Mercurial > hg > soundsoftware-site
changeset 37:94944d00e43c
* Update to SVN trunk rev 4411
line wrap: on
line diff
--- a/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 24 -/svn/!svn/ver/4173/trunk +/svn/!svn/ver/4411/trunk END Rakefile K 25
--- a/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk http://redmine.rubyforge.org/svn -2010-09-23T16:23:39.070168Z -4173 -winterheart +2010-11-17T18:27:38.712585Z +4411 +jplang has-props @@ -69,6 +69,9 @@ 307 +extra +dir + README.rdoc file @@ -103,9 +106,6 @@ 208 -extra -dir - db dir @@ -121,12 +121,6 @@ script dir -doc -dir - -config -dir - .gitignore file @@ -161,6 +155,12 @@ 322 +config +dir + +doc +dir + lib dir
--- a/app/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 28 -/svn/!svn/ver/4172/trunk/app +/svn/!svn/ver/4411/trunk/app END
--- a/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-17T18:27:38.712585Z +4411 +jplang
--- a/app/controllers/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/4172/trunk/app/controllers +/svn/!svn/ver/4411/trunk/app/controllers END issues_controller.rb K 25 svn:wc:ra_dav:version-url V 61 -/svn/!svn/ver/4083/trunk/app/controllers/issues_controller.rb +/svn/!svn/ver/4411/trunk/app/controllers/issues_controller.rb END queries_controller.rb K 25 @@ -43,7 +43,7 @@ K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/3745/trunk/app/controllers/my_controller.rb +/svn/!svn/ver/4224/trunk/app/controllers/my_controller.rb END comments_controller.rb K 25 @@ -67,7 +67,7 @@ K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/4059/trunk/app/controllers/context_menus_controller.rb +/svn/!svn/ver/4242/trunk/app/controllers/context_menus_controller.rb END journals_controller.rb K 25 @@ -81,6 +81,12 @@ V 64 /svn/!svn/ver/3536/trunk/app/controllers/workflows_controller.rb END +time_entry_reports_controller.rb +K 25 +svn:wc:ra_dav:version-url +V 73 +/svn/!svn/ver/4232/trunk/app/controllers/time_entry_reports_controller.rb +END reports_controller.rb K 25 svn:wc:ra_dav:version-url @@ -93,53 +99,53 @@ V 75 /svn/!svn/ver/4075/trunk/app/controllers/project_enumerations_controller.rb END +settings_controller.rb +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/4220/trunk/app/controllers/settings_controller.rb +END +timelog_controller.rb +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/!svn/ver/4410/trunk/app/controllers/timelog_controller.rb +END custom_fields_controller.rb K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/3627/trunk/app/controllers/custom_fields_controller.rb END -timelog_controller.rb +users_controller.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/4087/trunk/app/controllers/timelog_controller.rb -END -settings_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3176/trunk/app/controllers/settings_controller.rb +V 60 +/svn/!svn/ver/4382/trunk/app/controllers/users_controller.rb END issue_moves_controller.rb K 25 svn:wc:ra_dav:version-url V 66 -/svn/!svn/ver/3940/trunk/app/controllers/issue_moves_controller.rb -END -users_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4066/trunk/app/controllers/users_controller.rb +/svn/!svn/ver/4292/trunk/app/controllers/issue_moves_controller.rb END files_controller.rb K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/4085/trunk/app/controllers/files_controller.rb +/svn/!svn/ver/4177/trunk/app/controllers/files_controller.rb END application_controller.rb K 25 svn:wc:ra_dav:version-url V 66 -/svn/!svn/ver/4075/trunk/app/controllers/application_controller.rb +/svn/!svn/ver/4286/trunk/app/controllers/application_controller.rb END -previews_controller.rb +ldap_auth_sources_controller.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3946/trunk/app/controllers/previews_controller.rb +V 72 +/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb END auth_sources_controller.rb K 25 @@ -147,11 +153,11 @@ V 67 /svn/!svn/ver/3744/trunk/app/controllers/auth_sources_controller.rb END -ldap_auth_sources_controller.rb +previews_controller.rb K 25 svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb +V 63 +/svn/!svn/ver/4174/trunk/app/controllers/previews_controller.rb END search_controller.rb K 25 @@ -165,18 +171,18 @@ V 63 /svn/!svn/ver/3528/trunk/app/controllers/messages_controller.rb END -versions_controller.rb -K 25 -svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/4097/trunk/app/controllers/versions_controller.rb -END issue_relations_controller.rb K 25 svn:wc:ra_dav:version-url V 70 /svn/!svn/ver/3591/trunk/app/controllers/issue_relations_controller.rb END +versions_controller.rb +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/4354/trunk/app/controllers/versions_controller.rb +END boards_controller.rb K 25 svn:wc:ra_dav:version-url @@ -193,7 +199,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/4172/trunk/app/controllers/news_controller.rb +/svn/!svn/ver/4174/trunk/app/controllers/news_controller.rb END trackers_controller.rb K 25 @@ -241,7 +247,7 @@ K 25 svn:wc:ra_dav:version-url V 63 -/svn/!svn/ver/4070/trunk/app/controllers/projects_controller.rb +/svn/!svn/ver/4397/trunk/app/controllers/projects_controller.rb END account_controller.rb K 25 @@ -253,7 +259,7 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/4041/trunk/app/controllers/calendars_controller.rb +/svn/!svn/ver/4388/trunk/app/controllers/calendars_controller.rb END issue_categories_controller.rb K 25 @@ -265,7 +271,7 @@ K 25 svn:wc:ra_dav:version-url V 61 -/svn/!svn/ver/4072/trunk/app/controllers/gantts_controller.rb +/svn/!svn/ver/4388/trunk/app/controllers/gantts_controller.rb END documents_controller.rb K 25 @@ -277,7 +283,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3632/trunk/app/controllers/wiki_controller.rb +/svn/!svn/ver/4303/trunk/app/controllers/wiki_controller.rb END activities_controller.rb K 25
--- a/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/controllers http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-17T18:27:38.712585Z +4411 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:26.271687Z -611e226f9845a33fb6fe28700968e7de -2010-09-11T20:21:27.018967Z -4083 -jbbarth +2010-11-19T13:04:46.996826Z +e6c77385e49176b593367b44e7b33f3e +2010-11-17T18:27:38.712585Z +4411 +jplang has-props @@ -58,7 +58,7 @@ -13034 +12834 queries_controller.rb file @@ -236,10 +236,10 @@ -2010-09-23T14:37:44.395735Z -b178015d27e341adaa871e3800e94401 -2010-05-23T03:16:37.499264Z -3745 +2010-11-19T13:04:46.996826Z +b465d7aeca2d6b4cc11159ae9bc7349e +2010-09-28T22:13:11.637219Z +4224 edavis10 has-props @@ -262,7 +262,7 @@ -6422 +6021 comments_controller.rb file @@ -372,10 +372,10 @@ -2010-09-24T12:48:26.271687Z -8e09032afd0db141012e59a0f689b687 -2010-09-03T21:43:07.906158Z -4059 +2010-11-19T13:04:46.996826Z +2db29b69c3f0130e470a0a11dfc1f28b +2010-10-08T03:09:51.863032Z +4242 jbbarth @@ -398,7 +398,7 @@ -1647 +1821 journals_controller.rb file @@ -468,6 +468,40 @@ 3346 +time_entry_reports_controller.rb +file + + + + +2010-11-19T13:04:46.996826Z +dadcb57d89dc3c90c5fa099b143c07f8 +2010-10-05T16:07:17.015270Z +4232 +edavis10 + + + + + + + + + + + + + + + + + + + + + +9308 + reports_controller.rb file @@ -536,16 +570,16 @@ 856 -settings_controller.rb +timelog_controller.rb file -2010-09-23T14:37:44.399747Z -b7f5a5cb777aa2418a71520c164da11a -2009-12-17T18:21:02.630202Z -3176 +2010-11-19T13:04:46.996826Z +7984019db8d0beb1d7ff158390d4ad68 +2010-11-16T20:27:45.364396Z +4410 jplang has-props @@ -568,7 +602,7 @@ -2337 +8623 custom_fields_controller.rb file @@ -604,16 +638,16 @@ 2373 -timelog_controller.rb +settings_controller.rb file -2010-09-24T12:48:26.271687Z -7e5890e22da346ff06debe33cc4bf34d -2010-09-14T19:02:25.847894Z -4087 +2010-11-19T13:04:46.996826Z +4328cabdf111342d147b245bc61bb75e +2010-09-28T20:19:55.214366Z +4220 edavis10 has-props @@ -636,7 +670,41 @@ -14320 +2239 + +issue_moves_controller.rb +file + + + + +2010-11-19T13:04:47.000764Z +cacd6ffe0ce299e2ede9d45b7ef8af42 +2010-10-25T18:44:46.868009Z +4292 +edavis10 + + + + + + + + + + + + + + + + + + + + + +2441 users_controller.rb file @@ -644,11 +712,11 @@ -2010-09-24T12:48:26.275788Z -df36e1f9ccb5879ba3aa7b34592c18cf -2010-09-06T01:02:52.851079Z -4066 -edavis10 +2010-11-19T13:04:47.000764Z +3af0a81ba74621dc21d877a579b39d9c +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -670,41 +738,7 @@ -5977 - -issue_moves_controller.rb -file - - - - -2010-09-23T14:37:44.395735Z -41a4ff4e0c4fab3e134a9bfa8136323a -2010-08-13T14:59:04.653474Z -3940 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2290 +7565 files_controller.rb file @@ -712,33 +746,33 @@ -2010-09-24T12:48:26.275788Z -120cefe7fd45eda6957c2e633ceab0fb -2010-09-14T16:24:07.840869Z -4085 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1258 +2010-11-19T13:04:47.000764Z +f0246e8f8dde5ea7b93e4dc2162181fc +2010-09-26T08:07:41.604064Z +4177 +jplang + + + + + + + + + + + + + + + + + + + + + +1289 application_controller.rb file @@ -746,67 +780,67 @@ -2010-09-24T12:48:26.275788Z -e93fc4710d9abbef72273a22b174eb27 -2010-09-10T16:00:49.687515Z -4075 +2010-11-19T13:04:47.000764Z +8f7d4c9d306ae9d59ea0e064466454d1 +2010-10-23T11:07:04.019894Z +4286 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +13669 + +previews_controller.rb +file + + + + +2010-11-19T13:04:47.000764Z +c5ae4fae18159e70fd81c2487bb1daa1 +2010-09-24T16:26:46.819682Z +4174 edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -13486 - -ldap_auth_sources_controller.rb -file - - - - -2010-09-23T14:37:44.395735Z -5f7b9cb2e9c8a60db58ea0833cf481c5 -2010-05-23T03:16:31.304135Z -3744 -edavis10 - - - - - - - - - - - - - - - - - - - - - -917 + + + + + + + + + + + + + + + + + + + + + +957 auth_sources_controller.rb file @@ -842,16 +876,16 @@ 2542 -previews_controller.rb +ldap_auth_sources_controller.rb file 2010-09-23T14:37:44.395735Z -1407f3993f625a9fa14fa0e208c3df4f -2010-08-18T15:01:35.032314Z -3946 +5f7b9cb2e9c8a60db58ea0833cf481c5 +2010-05-23T03:16:31.304135Z +3744 edavis10 @@ -874,7 +908,7 @@ -835 +917 search_controller.rb file @@ -944,6 +978,40 @@ 5824 +versions_controller.rb +file + + + + +2010-11-19T13:04:47.000764Z +a98fb262a20669600a85c0f72202c5e6 +2010-11-01T13:13:32.982466Z +4354 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +6241 + issue_relations_controller.rb file @@ -978,40 +1046,6 @@ 2220 -versions_controller.rb -file - - - - -2010-09-24T12:48:26.275788Z -9cc19ecc2f9e1ad458f27cdbcd450970 -2010-09-17T15:55:08.377083Z -4097 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -6136 - boards_controller.rb file @@ -1086,10 +1120,10 @@ -2010-09-24T12:48:26.275788Z -dd877e070cf218909dccfc0c67658914 -2010-09-23T15:20:19.085385Z -4172 +2010-11-19T13:04:47.000764Z +d9e36fcf69f18973b274648b7b70dccf +2010-09-24T16:26:46.819682Z +4174 edavis10 has-props @@ -1112,7 +1146,7 @@ -3388 +3221 trackers_controller.rb file @@ -1358,11 +1392,11 @@ -2010-09-24T12:48:26.275788Z -7a9d61829d2ebbcab2524e763a28235b -2010-09-08T16:01:51.939478Z -4070 -edavis10 +2010-11-19T13:04:47.000764Z +b0f584d53a742f6c89b157030f9d6a8d +2010-11-13T10:05:43.644565Z +4397 +jplang has-props @@ -1384,7 +1418,7 @@ -9973 +10011 account_controller.rb file @@ -1426,33 +1460,33 @@ -2010-09-24T12:48:26.275788Z -cac7d6c5cbe1f559c89a3f41e79ea4b5 -2010-08-26T16:36:59.817467Z -4041 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1354 +2010-11-19T13:04:47.000764Z +0be20cab6d5ea49f428a90cf3afef3e3 +2010-11-07T22:38:10.728638Z +4388 +jplang + + + + + + + + + + + + + + + + + + + + + +1390 issue_categories_controller.rb file @@ -1494,11 +1528,11 @@ -2010-09-24T12:48:26.275788Z +2010-11-19T13:04:47.000764Z 81dbee1745da99b9ea499f3fbe1d3944 -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-07T22:38:10.728638Z +4388 +jplang @@ -1562,11 +1596,11 @@ -2010-09-23T14:37:44.403745Z -cb709bfbd3ba20cd9e7245a9575a720d -2010-04-11T12:56:18.077630Z -3632 -jplang +2010-11-19T13:04:47.004764Z +0af823002ab9c7e8f59b3d12cf6267e9 +2010-10-28T21:25:38.778234Z +4303 +edavis10 has-props @@ -1588,7 +1622,7 @@ -9211 +10145 activities_controller.rb file
--- a/app/controllers/.svn/text-base/application_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/application_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -153,8 +153,16 @@ # Authorize the user for the requested action def authorize(ctrl = params[:controller], action = params[:action], global = false) - allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global) - allowed ? true : deny_access + allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) + if allowed + true + else + if @project && @project.archived? + render_403 :message => :notice_not_authorized_archived_project + else + deny_access + end + end end # Authorize the user for the requested action outside a project @@ -213,16 +221,19 @@ def find_issues @issues = Issue.find_all_by_id(params[:id] || params[:ids]) raise ActiveRecord::RecordNotFound if @issues.empty? - projects = @issues.collect(&:project).compact.uniq - if projects.size == 1 - @project = projects.first - else + @projects = @issues.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + rescue ActiveRecord::RecordNotFound + render_404 + end + + # Check if project is unique before bulk operations + def check_project_uniqueness + unless @project # TODO: let users bulk edit/move/destroy issues from different projects render_error 'Can not bulk edit/move/destroy issues from different projects' return false end - rescue ActiveRecord::RecordNotFound - render_404 end # make sure that the user is a member of the project (or admin) if project is private @@ -262,39 +273,33 @@ redirect_to default end - def render_403 + def render_403(options={}) @project = nil - respond_to do |format| - format.html { render :template => "common/403", :layout => use_layout, :status => 403 } - format.atom { head 403 } - format.xml { head 403 } - format.js { head 403 } - format.json { head 403 } - end + render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) return false end - def render_404 - respond_to do |format| - format.html { render :template => "common/404", :layout => use_layout, :status => 404 } - format.atom { head 404 } - format.xml { head 404 } - format.js { head 404 } - format.json { head 404 } - end + def render_404(options={}) + render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) return false end - def render_error(msg) + # Renders an error response + def render_error(arg) + arg = {:message => arg} unless arg.is_a?(Hash) + + @message = arg[:message] + @message = l(@message) if @message.is_a?(Symbol) + @status = arg[:status] || 500 + respond_to do |format| - format.html { - flash.now[:error] = msg - render :text => '', :layout => use_layout, :status => 500 + format.html { + render :template => 'common/error', :layout => use_layout, :status => @status } - format.atom { head 500 } - format.xml { head 500 } - format.js { head 500 } - format.json { head 500 } + format.atom { head @status } + format.xml { head @status } + format.js { head @status } + format.json { head @status } end end
--- a/app/controllers/.svn/text-base/calendars_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/calendars_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -8,6 +8,8 @@ helper :projects helper :queries include QueriesHelper + helper :sort + include SortHelper def show if params[:year] and params[:year].to_i > 1900
--- a/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/context_menus_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,17 +16,21 @@ @projects = @issues.collect(&:project).compact.uniq @project = @projects.first if @projects.size == 1 - @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)), + @can = {:edit => User.current.allowed_to?(:edit_issues, @projects), :log_time => (@project && User.current.allowed_to?(:log_time, @project)), - :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))), + :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)), :move => (@project && User.current.allowed_to?(:move_issues, @project)), :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)), - :delete => (@project && User.current.allowed_to?(:delete_issues, @project)) + :delete => User.current.allowed_to?(:delete_issues, @projects) } if @project @assignables = @project.assignable_users @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to) @trackers = @project.trackers + else + #when multiple projects, we only keep the intersection of each set + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end @priorities = IssuePriority.all.reverse
--- a/app/controllers/.svn/text-base/files_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/files_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ attachments = Attachment.attach_files(container, params[:attachments]) render_attachment_warning_if_needed(container) - if !attachments.empty? && Setting.notified_events.include?('file_added') + if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added') Mailer.deliver_attachments_added(attachments[:files]) end redirect_to project_files_path(@project)
--- a/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/issue_moves_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ class IssueMovesController < ApplicationController default_search_scope :issues - before_filter :find_issues + before_filter :find_issues, :check_project_uniqueness before_filter :authorize def new @@ -18,6 +18,7 @@ @issues.each do |issue| issue.reload issue.init_journal(User.current) + issue.current_journal.notes = @notes if @notes.present? call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy }) if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)}) moved_issues << r @@ -50,11 +51,13 @@ @target_project ||= @project @trackers = @target_project.trackers @available_statuses = Workflow.available_statuses(@project) + @notes = params[:notes] + @notes ||= '' end def extract_changed_attributes_for_move(params) changed_attributes = {} - [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| + [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute| unless params[valid_attribute].blank? changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) end
--- a/app/controllers/.svn/text-base/issues_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/issues_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -21,12 +21,13 @@ before_filter :find_issue, :only => [:show, :edit, :update] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy] + before_filter :check_project_uniqueness, :only => [:move, :perform_move] before_filter :find_project, :only => [:new, :create] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => [:index] before_filter :check_for_default_issue_status, :only => [:new, :create] before_filter :build_new_issue_from_params, :only => [:new, :create] - accept_key_auth :index, :show + accept_key_auth :index, :show, :create, :update, :destroy rescue_from Query::StatementInvalid, :with => :query_statement_invalid @@ -149,11 +150,7 @@ end end end - - # Attributes that can be updated on workflow transition (without :edit permission) - # TODO: make it configurable (at least per role) - UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id fixed_version_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION) - + def edit update_issue_from_params @@ -193,8 +190,10 @@ # Bulk edit a set of issues def bulk_edit @issues.sort! - @available_statuses = Workflow.available_statuses(@project) - @custom_fields = @project.all_issue_custom_fields + @available_statuses = @projects.map{|p|Workflow.available_statuses(p)}.inject{|memo,w|memo & w} + @custom_fields = @projects.map{|p|p.all_issue_custom_fields}.inject{|memo,c|memo & c} + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end def bulk_update @@ -241,7 +240,7 @@ end @issues.each(&:destroy) respond_to do |format| - format.html { redirect_to :action => 'index', :project_id => @project } + format.html { redirect_back_or_default(:action => 'index', :project_id => @project) } format.xml { head :ok } format.json { head :ok } end @@ -270,20 +269,15 @@ @priorities = IssuePriority.all @edit_allowed = User.current.allowed_to?(:edit_issues, @project) @time_entry = TimeEntry.new + @time_entry.attributes = params[:time_entry] @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) @issue.init_journal(User.current, @notes) - # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed - if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue] - attrs = params[:issue].dup - attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed - attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s} - @issue.safe_attributes = attrs - end - + @issue.safe_attributes = params[:issue] end # TODO: Refactor, lots of extra code in here + # TODO: Changing tracker on an existing issue should not trigger this def build_new_issue_from_params if params[:id].blank? @issue = Issue.new @@ -300,12 +294,14 @@ render_error l(:error_no_tracker_in_project) return false end + @issue.start_date ||= Date.today if params[:issue].is_a?(Hash) @issue.safe_attributes = params[:issue] - @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project) + if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record? + @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] + end end @issue.author = User.current - @issue.start_date ||= Date.today @priorities = IssuePriority.all @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) end
--- a/app/controllers/.svn/text-base/my_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/my_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ @pref = @user.pref if request.post? @user.attributes = params[:user] - @user.mail_notification = (params[:notification_option] == 'all') + @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @@ -66,12 +66,8 @@ return end end - @notification_options = [[l(:label_user_mail_option_all), 'all'], - [l(:label_user_mail_option_none), 'none']] - # Only users that belong to more than 1 project can select projects for which they are notified - # Note that @user.membership.size would fail since AR ignores :include association option when doing a count - @notification_options.insert 1, [l(:label_user_mail_option_selected), 'selected'] if @user.memberships.length > 1 - @notification_option = @user.mail_notification? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') end # Manage user's password
--- a/app/controllers/.svn/text-base/news_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/news_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -18,10 +18,10 @@ class NewsController < ApplicationController default_search_scope :news model_object News - before_filter :find_model_object, :except => [:new, :create, :index, :preview] - before_filter :find_project_from_association, :except => [:new, :create, :index, :preview] - before_filter :find_project, :only => [:new, :create, :preview] - before_filter :authorize, :except => [:index, :preview] + before_filter :find_model_object, :except => [:new, :create, :index] + before_filter :find_project_from_association, :except => [:new, :create, :index] + before_filter :find_project, :only => [:new, :create] + before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => :index accept_key_auth :index @@ -78,11 +78,6 @@ redirect_to :action => 'index', :project_id => @project end - def preview - @text = (params[:news] ? params[:news][:description] : nil) - render :partial => 'common/preview' - end - private def find_project @project = Project.find(params[:project_id])
--- a/app/controllers/.svn/text-base/previews_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/previews_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,11 @@ render :layout => false end + def news + @text = (params[:news] ? params[:news][:description] : nil) + render :partial => 'common/preview' + end + private def find_project
--- a/app/controllers/.svn/text-base/projects_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/projects_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -93,7 +93,7 @@ flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'projects', :action => 'settings', :id => @project } - format.xml { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } + format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } end else respond_to do |format| @@ -125,13 +125,13 @@ if validate_parent_id && @project.copy(@source_project, :only => params[:only]) @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') flash[:notice] = l(:notice_successful_create) - redirect_to :controller => 'admin', :action => 'projects' + redirect_to :controller => 'projects', :action => 'settings' elsif !@project.new_record? # Project was created # But some objects were not copied due to validation failures # (eg. issues from disabled trackers) # TODO: inform about that - redirect_to :controller => 'admin', :action => 'projects' + redirect_to :controller => 'projects', :action => 'settings' end end end
--- a/app/controllers/.svn/text-base/settings_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/settings_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -26,7 +26,7 @@ end def edit - @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated) + @notifiables = Redmine::Notifiable.all if request.post? && params[:settings] && params[:settings].is_a?(Hash) settings = (params[:settings] || {}).dup.symbolize_keys settings.each do |name, value|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/controllers/.svn/text-base/time_entry_reports_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,209 @@ +class TimeEntryReportsController < ApplicationController + menu_item :issues + before_filter :find_optional_project + before_filter :load_available_criterias + + helper :sort + include SortHelper + helper :issues + helper :timelog + include TimelogHelper + helper :custom_fields + include CustomFieldsHelper + + def report + @criterias = params[:criterias] || [] + @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria} + @criterias.uniq! + @criterias = @criterias[0,3] + + @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month' + + retrieve_date_range + + unless @criterias.empty? + sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ') + sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ') + sql_condition = '' + + if @project.nil? + sql_condition = Project.allowed_to_condition(User.current, :view_time_entries) + elsif @issue.nil? + sql_condition = @project.project_condition(Setting.display_subprojects_issues?) + else + sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" + end + + sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours" + sql << " FROM #{TimeEntry.table_name}" + sql << time_report_joins + sql << " WHERE" + sql << " (%s) AND" % sql_condition + sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)] + sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on" + + @hours = ActiveRecord::Base.connection.select_all(sql) + + @hours.each do |row| + case @columns + when 'year' + row['year'] = row['tyear'] + when 'month' + row['month'] = "#{row['tyear']}-#{row['tmonth']}" + when 'week' + row['week'] = "#{row['tyear']}-#{row['tweek']}" + when 'day' + row['day'] = "#{row['spent_on']}" + end + end + + @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f} + + @periods = [] + # Date#at_beginning_of_ not supported in Rails 1.2.x + date_from = @from.to_time + # 100 columns max + while date_from <= @to.to_time && @periods.length < 100 + case @columns + when 'year' + @periods << "#{date_from.year}" + date_from = (date_from + 1.year).at_beginning_of_year + when 'month' + @periods << "#{date_from.year}-#{date_from.month}" + date_from = (date_from + 1.month).at_beginning_of_month + when 'week' + @periods << "#{date_from.year}-#{date_from.to_date.cweek}" + date_from = (date_from + 7.day).at_beginning_of_week + when 'day' + @periods << "#{date_from.to_date}" + date_from = date_from + 1.day + end + end + end + + respond_to do |format| + format.html { render :layout => !request.xhr? } + format.csv { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') } + end + end + + private + + # TODO: duplicated in TimelogController + def find_optional_project + if !params[:issue_id].blank? + @issue = Issue.find(params[:issue_id]) + @project = @issue.project + elsif !params[:project_id].blank? + @project = Project.find(params[:project_id]) + end + deny_access unless User.current.allowed_to?(:view_time_entries, @project, :global => true) + end + + # Retrieves the date range based on predefined ranges or specific from/to param dates + # TODO: duplicated in TimelogController + def retrieve_date_range + @free_period = false + @from, @to = nil, nil + + if params[:period_type] == '1' || (params[:period_type].nil? && !params[:period].nil?) + case params[:period].to_s + when 'today' + @from = @to = Date.today + when 'yesterday' + @from = @to = Date.today - 1 + when 'current_week' + @from = Date.today - (Date.today.cwday - 1)%7 + @to = @from + 6 + when 'last_week' + @from = Date.today - 7 - (Date.today.cwday - 1)%7 + @to = @from + 6 + when '7_days' + @from = Date.today - 7 + @to = Date.today + when 'current_month' + @from = Date.civil(Date.today.year, Date.today.month, 1) + @to = (@from >> 1) - 1 + when 'last_month' + @from = Date.civil(Date.today.year, Date.today.month, 1) << 1 + @to = (@from >> 1) - 1 + when '30_days' + @from = Date.today - 30 + @to = Date.today + when 'current_year' + @from = Date.civil(Date.today.year, 1, 1) + @to = Date.civil(Date.today.year, 12, 31) + end + elsif params[:period_type] == '2' || (params[:period_type].nil? && (!params[:from].nil? || !params[:to].nil?)) + begin; @from = params[:from].to_s.to_date unless params[:from].blank?; rescue; end + begin; @to = params[:to].to_s.to_date unless params[:to].blank?; rescue; end + @free_period = true + else + # default + end + + @from, @to = @to, @from if @from && @to && @from > @to + @from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today) + @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) + end + + def load_available_criterias + @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id", + :klass => Project, + :label => :label_project}, + 'version' => {:sql => "#{Issue.table_name}.fixed_version_id", + :klass => Version, + :label => :label_version}, + 'category' => {:sql => "#{Issue.table_name}.category_id", + :klass => IssueCategory, + :label => :field_category}, + 'member' => {:sql => "#{TimeEntry.table_name}.user_id", + :klass => User, + :label => :label_member}, + 'tracker' => {:sql => "#{Issue.table_name}.tracker_id", + :klass => Tracker, + :label => :label_tracker}, + 'activity' => {:sql => "#{TimeEntry.table_name}.activity_id", + :klass => TimeEntryActivity, + :label => :label_activity}, + 'issue' => {:sql => "#{TimeEntry.table_name}.issue_id", + :klass => Issue, + :label => :label_issue} + } + + # Add list and boolean custom fields as available criterias + custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields) + custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)", + :format => cf.field_format, + :label => cf.name} + end if @project + + # Add list and boolean time entry custom fields + TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)", + :format => cf.field_format, + :label => cf.name} + end + + # Add list and boolean time entry activity custom fields + TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)", + :format => cf.field_format, + :label => cf.name} + end + + call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project }) + @available_criterias + end + + def time_report_joins + sql = '' + sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id" + sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id" + # TODO: rename hook + call_hook(:controller_timelog_time_report_joins, {:sql => sql} ) + sql + end + +end
--- a/app/controllers/.svn/text-base/timelog_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/timelog_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,12 +17,11 @@ class TimelogController < ApplicationController menu_item :issues - before_filter :find_project, :authorize, :only => [:edit, :destroy] - before_filter :find_optional_project, :only => [:report, :details] - before_filter :load_available_criterias, :only => [:report] + before_filter :find_project, :only => [:new, :create] + before_filter :find_time_entry, :only => [:edit, :update, :destroy] + before_filter :authorize, :except => [:index] + before_filter :find_optional_project, :only => [:index] - verify :method => :post, :only => :destroy, :redirect_to => { :action => :details } - helper :sort include SortHelper helper :issues @@ -30,83 +29,7 @@ helper :custom_fields include CustomFieldsHelper - def report - @criterias = params[:criterias] || [] - @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria} - @criterias.uniq! - @criterias = @criterias[0,3] - - @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month' - - retrieve_date_range - - unless @criterias.empty? - sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ') - sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ') - sql_condition = '' - - if @project.nil? - sql_condition = Project.allowed_to_condition(User.current, :view_time_entries) - elsif @issue.nil? - sql_condition = @project.project_condition(Setting.display_subprojects_issues?) - else - sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" - end - - sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours" - sql << " FROM #{TimeEntry.table_name}" - sql << time_report_joins - sql << " WHERE" - sql << " (%s) AND" % sql_condition - sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)] - sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on" - - @hours = ActiveRecord::Base.connection.select_all(sql) - - @hours.each do |row| - case @columns - when 'year' - row['year'] = row['tyear'] - when 'month' - row['month'] = "#{row['tyear']}-#{row['tmonth']}" - when 'week' - row['week'] = "#{row['tyear']}-#{row['tweek']}" - when 'day' - row['day'] = "#{row['spent_on']}" - end - end - - @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f} - - @periods = [] - # Date#at_beginning_of_ not supported in Rails 1.2.x - date_from = @from.to_time - # 100 columns max - while date_from <= @to.to_time && @periods.length < 100 - case @columns - when 'year' - @periods << "#{date_from.year}" - date_from = (date_from + 1.year).at_beginning_of_year - when 'month' - @periods << "#{date_from.year}-#{date_from.month}" - date_from = (date_from + 1.month).at_beginning_of_month - when 'week' - @periods << "#{date_from.year}-#{date_from.to_date.cweek}" - date_from = (date_from + 7.day).at_beginning_of_week - when 'day' - @periods << "#{date_from.to_date}" - date_from = date_from + 1.day - end - end - end - - respond_to do |format| - format.html { render :layout => !request.xhr? } - format.csv { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') } - end - end - - def details + def index sort_init 'spent_on', 'desc' sort_update 'spent_on' => 'spent_on', 'user' => 'user_id', @@ -162,24 +85,52 @@ end end end - - def edit - (render_403; return) if @time_entry && !@time_entry.editable_by?(User.current) + + def new + @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today) + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + render :action => 'edit' + end + + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } + def create @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today) @time_entry.attributes = params[:time_entry] call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) - if request.post? and @time_entry.save + if @time_entry.save flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'details', :project_id => @time_entry.project - return + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + else + render :action => 'edit' end end + def edit + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + end + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + def update + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + + if @time_entry.save + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + else + render :action => 'edit' + end + end + + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } def destroy - (render_404; return) unless @time_entry - (render_403; return) unless @time_entry.editable_by?(User.current) if @time_entry.destroy && @time_entry.destroyed? flash[:notice] = l(:notice_successful_delete) else @@ -187,15 +138,23 @@ end redirect_to :back rescue ::ActionController::RedirectBackError - redirect_to :action => 'details', :project_id => @time_entry.project + redirect_to :action => 'index', :project_id => @time_entry.project end private + def find_time_entry + @time_entry = TimeEntry.find(params[:id]) + unless @time_entry.editable_by?(User.current) + render_403 + return false + end + @project = @time_entry.project + rescue ActiveRecord::RecordNotFound + render_404 + end + def find_project - if params[:id] - @time_entry = TimeEntry.find(params[:id]) - @project = @time_entry.project - elsif params[:issue_id] + if params[:issue_id] @issue = Issue.find(params[:issue_id]) @project = @issue.project elsif params[:project_id] @@ -264,61 +223,4 @@ @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) end - def load_available_criterias - @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id", - :klass => Project, - :label => :label_project}, - 'version' => {:sql => "#{Issue.table_name}.fixed_version_id", - :klass => Version, - :label => :label_version}, - 'category' => {:sql => "#{Issue.table_name}.category_id", - :klass => IssueCategory, - :label => :field_category}, - 'member' => {:sql => "#{TimeEntry.table_name}.user_id", - :klass => User, - :label => :label_member}, - 'tracker' => {:sql => "#{Issue.table_name}.tracker_id", - :klass => Tracker, - :label => :label_tracker}, - 'activity' => {:sql => "#{TimeEntry.table_name}.activity_id", - :klass => TimeEntryActivity, - :label => :label_activity}, - 'issue' => {:sql => "#{TimeEntry.table_name}.issue_id", - :klass => Issue, - :label => :label_issue} - } - - # Add list and boolean custom fields as available criterias - custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields) - custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)", - :format => cf.field_format, - :label => cf.name} - end if @project - - # Add list and boolean time entry custom fields - TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)", - :format => cf.field_format, - :label => cf.name} - end - - # Add list and boolean time entry activity custom fields - TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)", - :format => cf.field_format, - :label => cf.name} - end - - call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project }) - @available_criterias - end - - def time_report_joins - sql = '' - sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id" - sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id" - call_hook(:controller_timelog_time_report_joins, {:sql => sql} ) - sql - end end
--- a/app/controllers/.svn/text-base/users_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/users_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -51,7 +51,6 @@ def show @user = User.find(params[:id]) - @custom_values = @user.custom_values # show projects based on current user visibility @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current)) @@ -71,53 +70,96 @@ render_404 end - def add - if request.get? - @user = User.new(:language => Setting.default_language) + def new + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + + @user = User.new(:language => Setting.default_language) + @auth_sources = AuthSource.find(:all) + end + + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } + def create + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + + @user = User.new(params[:user]) + @user.admin = params[:user][:admin] || false + @user.login = params[:user][:login] + @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id + + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + + Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] + flash[:notice] = l(:notice_successful_create) + redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : + {:controller => 'users', :action => 'edit', :id => @user}) + return else - @user = User.new(params[:user]) - @user.admin = params[:user][:admin] || false - @user.login = params[:user][:login] - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id - if @user.save - Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] - flash[:notice] = l(:notice_successful_create) - redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} : - {:controller => 'users', :action => 'edit', :id => @user}) - return - end + @auth_sources = AuthSource.find(:all) + @notification_option = @user.mail_notification + + render :action => 'new' end - @auth_sources = AuthSource.find(:all) end def edit @user = User.find(params[:id]) - if request.post? - @user.admin = params[:user][:admin] if params[:user][:admin] - @user.login = params[:user][:login] if params[:user][:login] - if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] - end - @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] - @user.attributes = params[:user] - # Was the account actived ? (do it before User#save clears the change) - was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) - if @user.save - if was_activated - Mailer.deliver_account_activated(@user) - elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? - Mailer.deliver_account_information(@user, params[:password]) - end - flash[:notice] = l(:notice_successful_update) - redirect_to :back - end - end + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification + @auth_sources = AuthSource.find(:all) @membership ||= Member.new + end + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + def update + @user = User.find(params[:id]) + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification + + @user.admin = params[:user][:admin] if params[:user][:admin] + @user.login = params[:user][:login] if params[:user][:login] + if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) + @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + end + @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] + @user.attributes = params[:user] + # Was the account actived ? (do it before User#save clears the change) + was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + + if was_activated + Mailer.deliver_account_activated(@user) + elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? + Mailer.deliver_account_information(@user, params[:password]) + end + flash[:notice] = l(:notice_successful_update) + redirect_to :back + else + @auth_sources = AuthSource.find(:all) + @membership ||= Member.new + + render :action => :edit + end rescue ::ActionController::RedirectBackError redirect_to :controller => 'users', :action => 'edit', :id => @user end - + def edit_membership @user = User.find(params[:id]) @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
--- a/app/controllers/.svn/text-base/versions_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/versions_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -109,6 +109,10 @@ if @version.update_attributes(attributes) flash[:notice] = l(:notice_successful_update) redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project + else + respond_to do |format| + format.html { render :action => 'edit' } + end end end end
--- a/app/controllers/.svn/text-base/wiki_controller.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/.svn/text-base/wiki_controller.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,20 +17,39 @@ require 'diff' +# The WikiController follows the Rails REST controller pattern but with +# a few differences +# +# * index - shows a list of WikiPages grouped by page or date +# * new - not used +# * create - not used +# * show - will also show the form for creating a new wiki page +# * edit - used to edit an existing or new page +# * update - used to save a wiki page update to the database, including new pages +# * destroy - normal +# +# Other member and collection methods are also used +# +# TODO: still being worked on class WikiController < ApplicationController default_search_scope :wiki_pages before_filter :find_wiki, :authorize before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] - verify :method => :post, :only => [:destroy, :protect], :redirect_to => { :action => :index } + verify :method => :post, :only => [:protect], :redirect_to => { :action => :show } helper :attachments include AttachmentsHelper helper :watchers - + + # List of pages, sorted alphabetically and by parent (hierarchy) + def index + load_pages_grouped_by_date_without_content + end + # display a page (in editing mode if it doesn't exist) - def index - page_title = params[:page] + def show + page_title = params[:id] @page = @wiki.find_or_new_page(page_title) if @page.new_record? if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? @@ -63,7 +82,7 @@ # edit an existing page or a new one def edit - @page = @wiki.find_or_new_page(params[:page]) + @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? @@ -71,34 +90,48 @@ @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @content.comments = nil - if request.get? - # To prevent StaleObjectError exception when reverting to a previous version - @content.version = @page.content.version - else - if !@page.new_record? && @content.text == params[:content][:text] - attachments = Attachment.attach_files(@page, params[:attachments]) - render_attachment_warning_if_needed(@page) - # don't save if text wasn't changed - redirect_to :action => 'index', :id => @project, :page => @page.title - return - end - #@content.text = params[:content][:text] - #@content.comments = params[:content][:comments] - @content.attributes = params[:content] - @content.author = User.current - # if page is new @page.save will also save content, but not if page isn't a new record - if (@page.new_record? ? @page.save : @content.save) - attachments = Attachment.attach_files(@page, params[:attachments]) - render_attachment_warning_if_needed(@page) - call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) - redirect_to :action => 'index', :id => @project, :page => @page.title - end - end + + # To prevent StaleObjectError exception when reverting to a previous version + @content.version = @page.content.version rescue ActiveRecord::StaleObjectError # Optimistic locking exception flash[:error] = l(:notice_locking_conflict) end - + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + # Creates a new page or updates an existing one + def update + @page = @wiki.find_or_new_page(params[:id]) + return render_403 unless editable? + @page.content = WikiContent.new(:page => @page) if @page.new_record? + + @content = @page.content_for_version(params[:version]) + @content.text = initial_page_content(@page) if @content.text.blank? + # don't keep previous comment + @content.comments = nil + + if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text] + attachments = Attachment.attach_files(@page, params[:attachments]) + render_attachment_warning_if_needed(@page) + # don't save if text wasn't changed + redirect_to :action => 'show', :project_id => @project, :id => @page.title + return + end + @content.attributes = params[:content] + @content.author = User.current + # if page is new @page.save will also save content, but not if page isn't a new record + if (@page.new_record? ? @page.save : @content.save) + attachments = Attachment.attach_files(@page, params[:attachments]) + render_attachment_warning_if_needed(@page) + call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) + redirect_to :action => 'show', :project_id => @project, :id => @page.title + end + + rescue ActiveRecord::StaleObjectError + # Optimistic locking exception + flash[:error] = l(:notice_locking_conflict) + end + # rename a page def rename return render_403 unless editable? @@ -107,13 +140,13 @@ @original_title = @page.pretty_title if request.post? && @page.update_attributes(params[:wiki_page]) flash[:notice] = l(:notice_successful_update) - redirect_to :action => 'index', :id => @project, :page => @page.title + redirect_to :action => 'show', :project_id => @project, :id => @page.title end end def protect @page.update_attribute :protected, params[:protected] - redirect_to :action => 'index', :id => @project, :page => @page.title + redirect_to :action => 'show', :project_id => @project, :id => @page.title end # show page history @@ -139,7 +172,8 @@ @annotate = @page.annotate(params[:version]) render_404 unless @annotate end - + + verify :method => :delete, :only => [:destroy], :redirect_to => { :action => :show } # Removes a wiki page and its history # Children can be either set as root pages, removed or reassigned to another parent page def destroy @@ -166,41 +200,26 @@ end end @page.destroy - redirect_to :action => 'special', :id => @project, :page => 'Page_index' + redirect_to :action => 'index', :project_id => @project end - # display special pages - def special - page_title = params[:page].downcase - case page_title - # show pages index, sorted by title - when 'page_index', 'date_index' - # eager load information about last updates, without loading text - @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", - :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", - :order => 'title' - @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} - @pages_by_parent_id = @pages.group_by(&:parent_id) - # export wiki to a single html file - when 'export' - if User.current.allowed_to?(:export_wiki_pages, @project) - @pages = @wiki.pages.find :all, :order => 'title' - export = render_to_string :action => 'export_multiple', :layout => false - send_data(export, :type => 'text/html', :filename => "wiki.html") - else - redirect_to :action => 'index', :id => @project, :page => nil - end - return + # Export wiki to a single html file + def export + if User.current.allowed_to?(:export_wiki_pages, @project) + @pages = @wiki.pages.find :all, :order => 'title' + export = render_to_string :action => 'export_multiple', :layout => false + send_data(export, :type => 'text/html', :filename => "wiki.html") else - # requested special page doesn't exist, redirect to default page - redirect_to :action => 'index', :id => @project, :page => nil - return + redirect_to :action => 'show', :project_id => @project, :id => nil end - render :action => "special_#{page_title}" + end + + def date_index + load_pages_grouped_by_date_without_content end def preview - page = @wiki.find_page(params[:page]) + page = @wiki.find_page(params[:id]) # page is nil when previewing a new page return render_403 unless page.nil? || editable?(page) if page @@ -215,13 +234,13 @@ return render_403 unless editable? attachments = Attachment.attach_files(@page, params[:attachments]) render_attachment_warning_if_needed(@page) - redirect_to :action => 'index', :page => @page.title + redirect_to :action => 'show', :id => @page.title, :project_id => @project end private def find_wiki - @project = Project.find(params[:id]) + @project = Project.find(params[:project_id]) @wiki = @project.wiki render_404 unless @wiki rescue ActiveRecord::RecordNotFound @@ -230,7 +249,7 @@ # Finds the requested page and returns a 404 error if it doesn't exist def find_existing_page - @page = @wiki.find_page(params[:page]) + @page = @wiki.find_page(params[:id]) render_404 if @page.nil? end @@ -245,4 +264,14 @@ extend helper unless self.instance_of?(helper) helper.instance_method(:initial_page_content).bind(self).call(page) end + + # eager load information about last updates, without loading text + def load_pages_grouped_by_date_without_content + @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", + :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", + :order => 'title' + @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} + @pages_by_parent_id = @pages.group_by(&:parent_id) + end + end
--- a/app/controllers/application_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/application_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -153,8 +153,16 @@ # Authorize the user for the requested action def authorize(ctrl = params[:controller], action = params[:action], global = false) - allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global) - allowed ? true : deny_access + allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project || @projects, :global => global) + if allowed + true + else + if @project && @project.archived? + render_403 :message => :notice_not_authorized_archived_project + else + deny_access + end + end end # Authorize the user for the requested action outside a project @@ -213,16 +221,19 @@ def find_issues @issues = Issue.find_all_by_id(params[:id] || params[:ids]) raise ActiveRecord::RecordNotFound if @issues.empty? - projects = @issues.collect(&:project).compact.uniq - if projects.size == 1 - @project = projects.first - else + @projects = @issues.collect(&:project).compact.uniq + @project = @projects.first if @projects.size == 1 + rescue ActiveRecord::RecordNotFound + render_404 + end + + # Check if project is unique before bulk operations + def check_project_uniqueness + unless @project # TODO: let users bulk edit/move/destroy issues from different projects render_error 'Can not bulk edit/move/destroy issues from different projects' return false end - rescue ActiveRecord::RecordNotFound - render_404 end # make sure that the user is a member of the project (or admin) if project is private @@ -262,39 +273,33 @@ redirect_to default end - def render_403 + def render_403(options={}) @project = nil - respond_to do |format| - format.html { render :template => "common/403", :layout => use_layout, :status => 403 } - format.atom { head 403 } - format.xml { head 403 } - format.js { head 403 } - format.json { head 403 } - end + render_error({:message => :notice_not_authorized, :status => 403}.merge(options)) return false end - def render_404 - respond_to do |format| - format.html { render :template => "common/404", :layout => use_layout, :status => 404 } - format.atom { head 404 } - format.xml { head 404 } - format.js { head 404 } - format.json { head 404 } - end + def render_404(options={}) + render_error({:message => :notice_file_not_found, :status => 404}.merge(options)) return false end - def render_error(msg) + # Renders an error response + def render_error(arg) + arg = {:message => arg} unless arg.is_a?(Hash) + + @message = arg[:message] + @message = l(@message) if @message.is_a?(Symbol) + @status = arg[:status] || 500 + respond_to do |format| - format.html { - flash.now[:error] = msg - render :text => '', :layout => use_layout, :status => 500 + format.html { + render :template => 'common/error', :layout => use_layout, :status => @status } - format.atom { head 500 } - format.xml { head 500 } - format.js { head 500 } - format.json { head 500 } + format.atom { head @status } + format.xml { head @status } + format.js { head @status } + format.json { head @status } end end
--- a/app/controllers/calendars_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/calendars_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -8,6 +8,8 @@ helper :projects helper :queries include QueriesHelper + helper :sort + include SortHelper def show if params[:year] and params[:year].to_i > 1900
--- a/app/controllers/context_menus_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/context_menus_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -16,17 +16,21 @@ @projects = @issues.collect(&:project).compact.uniq @project = @projects.first if @projects.size == 1 - @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)), + @can = {:edit => User.current.allowed_to?(:edit_issues, @projects), :log_time => (@project && User.current.allowed_to?(:log_time, @project)), - :update => (@project && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && @allowed_statuses && !@allowed_statuses.empty?))), + :update => (User.current.allowed_to?(:edit_issues, @projects) || (User.current.allowed_to?(:change_status, @projects) && !@allowed_statuses.blank?)), :move => (@project && User.current.allowed_to?(:move_issues, @project)), :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)), - :delete => (@project && User.current.allowed_to?(:delete_issues, @project)) + :delete => User.current.allowed_to?(:delete_issues, @projects) } if @project @assignables = @project.assignable_users @assignables << @issue.assigned_to if @issue && @issue.assigned_to && !@assignables.include?(@issue.assigned_to) @trackers = @project.trackers + else + #when multiple projects, we only keep the intersection of each set + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end @priorities = IssuePriority.all.reverse
--- a/app/controllers/files_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/files_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ attachments = Attachment.attach_files(container, params[:attachments]) render_attachment_warning_if_needed(container) - if !attachments.empty? && Setting.notified_events.include?('file_added') + if !attachments.empty? && !attachments[:files].blank? && Setting.notified_events.include?('file_added') Mailer.deliver_attachments_added(attachments[:files]) end redirect_to project_files_path(@project)
--- a/app/controllers/issue_moves_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/issue_moves_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ class IssueMovesController < ApplicationController default_search_scope :issues - before_filter :find_issues + before_filter :find_issues, :check_project_uniqueness before_filter :authorize def new @@ -18,6 +18,7 @@ @issues.each do |issue| issue.reload issue.init_journal(User.current) + issue.current_journal.notes = @notes if @notes.present? call_hook(:controller_issues_move_before_save, { :params => params, :issue => issue, :target_project => @target_project, :copy => !!@copy }) if r = issue.move_to_project(@target_project, new_tracker, {:copy => @copy, :attributes => extract_changed_attributes_for_move(params)}) moved_issues << r @@ -50,11 +51,13 @@ @target_project ||= @project @trackers = @target_project.trackers @available_statuses = Workflow.available_statuses(@project) + @notes = params[:notes] + @notes ||= '' end def extract_changed_attributes_for_move(params) changed_attributes = {} - [:assigned_to_id, :status_id, :start_date, :due_date].each do |valid_attribute| + [:assigned_to_id, :status_id, :start_date, :due_date, :priority_id].each do |valid_attribute| unless params[valid_attribute].blank? changed_attributes[valid_attribute] = (params[valid_attribute] == 'none' ? nil : params[valid_attribute]) end
--- a/app/controllers/issues_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/issues_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -21,12 +21,13 @@ before_filter :find_issue, :only => [:show, :edit, :update] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :move, :perform_move, :destroy] + before_filter :check_project_uniqueness, :only => [:move, :perform_move] before_filter :find_project, :only => [:new, :create] before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => [:index] before_filter :check_for_default_issue_status, :only => [:new, :create] before_filter :build_new_issue_from_params, :only => [:new, :create] - accept_key_auth :index, :show + accept_key_auth :index, :show, :create, :update, :destroy rescue_from Query::StatementInvalid, :with => :query_statement_invalid @@ -149,11 +150,7 @@ end end end - - # Attributes that can be updated on workflow transition (without :edit permission) - # TODO: make it configurable (at least per role) - UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id fixed_version_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION) - + def edit update_issue_from_params @@ -193,8 +190,10 @@ # Bulk edit a set of issues def bulk_edit @issues.sort! - @available_statuses = Workflow.available_statuses(@project) - @custom_fields = @project.all_issue_custom_fields + @available_statuses = @projects.map{|p|Workflow.available_statuses(p)}.inject{|memo,w|memo & w} + @custom_fields = @projects.map{|p|p.all_issue_custom_fields}.inject{|memo,c|memo & c} + @assignables = @projects.map(&:assignable_users).inject{|memo,a| memo & a} + @trackers = @projects.map(&:trackers).inject{|memo,t| memo & t} end def bulk_update @@ -241,7 +240,7 @@ end @issues.each(&:destroy) respond_to do |format| - format.html { redirect_to :action => 'index', :project_id => @project } + format.html { redirect_back_or_default(:action => 'index', :project_id => @project) } format.xml { head :ok } format.json { head :ok } end @@ -270,20 +269,15 @@ @priorities = IssuePriority.all @edit_allowed = User.current.allowed_to?(:edit_issues, @project) @time_entry = TimeEntry.new + @time_entry.attributes = params[:time_entry] @notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) @issue.init_journal(User.current, @notes) - # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed - if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue] - attrs = params[:issue].dup - attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed - attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s} - @issue.safe_attributes = attrs - end - + @issue.safe_attributes = params[:issue] end # TODO: Refactor, lots of extra code in here + # TODO: Changing tracker on an existing issue should not trigger this def build_new_issue_from_params if params[:id].blank? @issue = Issue.new @@ -300,12 +294,14 @@ render_error l(:error_no_tracker_in_project) return false end + @issue.start_date ||= Date.today if params[:issue].is_a?(Hash) @issue.safe_attributes = params[:issue] - @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project) + if User.current.allowed_to?(:add_issue_watchers, @project) && @issue.new_record? + @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] + end end @issue.author = User.current - @issue.start_date ||= Date.today @priorities = IssuePriority.all @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) end
--- a/app/controllers/my_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/my_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ @pref = @user.pref if request.post? @user.attributes = params[:user] - @user.mail_notification = (params[:notification_option] == 'all') + @user.mail_notification = params[:notification_option] || 'only_my_events' @user.pref.attributes = params[:pref] @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') if @user.save @@ -66,12 +66,8 @@ return end end - @notification_options = [[l(:label_user_mail_option_all), 'all'], - [l(:label_user_mail_option_none), 'none']] - # Only users that belong to more than 1 project can select projects for which they are notified - # Note that @user.membership.size would fail since AR ignores :include association option when doing a count - @notification_options.insert 1, [l(:label_user_mail_option_selected), 'selected'] if @user.memberships.length > 1 - @notification_option = @user.mail_notification? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification #? ? 'all' : (@user.notified_projects_ids.empty? ? 'none' : 'selected') end # Manage user's password
--- a/app/controllers/news_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/news_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -18,10 +18,10 @@ class NewsController < ApplicationController default_search_scope :news model_object News - before_filter :find_model_object, :except => [:new, :create, :index, :preview] - before_filter :find_project_from_association, :except => [:new, :create, :index, :preview] - before_filter :find_project, :only => [:new, :create, :preview] - before_filter :authorize, :except => [:index, :preview] + before_filter :find_model_object, :except => [:new, :create, :index] + before_filter :find_project_from_association, :except => [:new, :create, :index] + before_filter :find_project, :only => [:new, :create] + before_filter :authorize, :except => [:index] before_filter :find_optional_project, :only => :index accept_key_auth :index @@ -78,11 +78,6 @@ redirect_to :action => 'index', :project_id => @project end - def preview - @text = (params[:news] ? params[:news][:description] : nil) - render :partial => 'common/preview' - end - private def find_project @project = Project.find(params[:project_id])
--- a/app/controllers/previews_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/previews_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,11 @@ render :layout => false end + def news + @text = (params[:news] ? params[:news][:description] : nil) + render :partial => 'common/preview' + end + private def find_project
--- a/app/controllers/projects_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/projects_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -93,7 +93,7 @@ flash[:notice] = l(:notice_successful_create) redirect_to :controller => 'projects', :action => 'settings', :id => @project } - format.xml { head :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } + format.xml { render :action => 'show', :status => :created, :location => url_for(:controller => 'projects', :action => 'show', :id => @project.id) } end else respond_to do |format| @@ -125,13 +125,13 @@ if validate_parent_id && @project.copy(@source_project, :only => params[:only]) @project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id') flash[:notice] = l(:notice_successful_create) - redirect_to :controller => 'admin', :action => 'projects' + redirect_to :controller => 'projects', :action => 'settings' elsif !@project.new_record? # Project was created # But some objects were not copied due to validation failures # (eg. issues from disabled trackers) # TODO: inform about that - redirect_to :controller => 'admin', :action => 'projects' + redirect_to :controller => 'projects', :action => 'settings' end end end
--- a/app/controllers/settings_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/settings_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -26,7 +26,7 @@ end def edit - @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated) + @notifiables = Redmine::Notifiable.all if request.post? && params[:settings] && params[:settings].is_a?(Hash) settings = (params[:settings] || {}).dup.symbolize_keys settings.each do |name, value|
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/controllers/time_entry_reports_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,209 @@ +class TimeEntryReportsController < ApplicationController + menu_item :issues + before_filter :find_optional_project + before_filter :load_available_criterias + + helper :sort + include SortHelper + helper :issues + helper :timelog + include TimelogHelper + helper :custom_fields + include CustomFieldsHelper + + def report + @criterias = params[:criterias] || [] + @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria} + @criterias.uniq! + @criterias = @criterias[0,3] + + @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month' + + retrieve_date_range + + unless @criterias.empty? + sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ') + sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ') + sql_condition = '' + + if @project.nil? + sql_condition = Project.allowed_to_condition(User.current, :view_time_entries) + elsif @issue.nil? + sql_condition = @project.project_condition(Setting.display_subprojects_issues?) + else + sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" + end + + sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours" + sql << " FROM #{TimeEntry.table_name}" + sql << time_report_joins + sql << " WHERE" + sql << " (%s) AND" % sql_condition + sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)] + sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on" + + @hours = ActiveRecord::Base.connection.select_all(sql) + + @hours.each do |row| + case @columns + when 'year' + row['year'] = row['tyear'] + when 'month' + row['month'] = "#{row['tyear']}-#{row['tmonth']}" + when 'week' + row['week'] = "#{row['tyear']}-#{row['tweek']}" + when 'day' + row['day'] = "#{row['spent_on']}" + end + end + + @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f} + + @periods = [] + # Date#at_beginning_of_ not supported in Rails 1.2.x + date_from = @from.to_time + # 100 columns max + while date_from <= @to.to_time && @periods.length < 100 + case @columns + when 'year' + @periods << "#{date_from.year}" + date_from = (date_from + 1.year).at_beginning_of_year + when 'month' + @periods << "#{date_from.year}-#{date_from.month}" + date_from = (date_from + 1.month).at_beginning_of_month + when 'week' + @periods << "#{date_from.year}-#{date_from.to_date.cweek}" + date_from = (date_from + 7.day).at_beginning_of_week + when 'day' + @periods << "#{date_from.to_date}" + date_from = date_from + 1.day + end + end + end + + respond_to do |format| + format.html { render :layout => !request.xhr? } + format.csv { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') } + end + end + + private + + # TODO: duplicated in TimelogController + def find_optional_project + if !params[:issue_id].blank? + @issue = Issue.find(params[:issue_id]) + @project = @issue.project + elsif !params[:project_id].blank? + @project = Project.find(params[:project_id]) + end + deny_access unless User.current.allowed_to?(:view_time_entries, @project, :global => true) + end + + # Retrieves the date range based on predefined ranges or specific from/to param dates + # TODO: duplicated in TimelogController + def retrieve_date_range + @free_period = false + @from, @to = nil, nil + + if params[:period_type] == '1' || (params[:period_type].nil? && !params[:period].nil?) + case params[:period].to_s + when 'today' + @from = @to = Date.today + when 'yesterday' + @from = @to = Date.today - 1 + when 'current_week' + @from = Date.today - (Date.today.cwday - 1)%7 + @to = @from + 6 + when 'last_week' + @from = Date.today - 7 - (Date.today.cwday - 1)%7 + @to = @from + 6 + when '7_days' + @from = Date.today - 7 + @to = Date.today + when 'current_month' + @from = Date.civil(Date.today.year, Date.today.month, 1) + @to = (@from >> 1) - 1 + when 'last_month' + @from = Date.civil(Date.today.year, Date.today.month, 1) << 1 + @to = (@from >> 1) - 1 + when '30_days' + @from = Date.today - 30 + @to = Date.today + when 'current_year' + @from = Date.civil(Date.today.year, 1, 1) + @to = Date.civil(Date.today.year, 12, 31) + end + elsif params[:period_type] == '2' || (params[:period_type].nil? && (!params[:from].nil? || !params[:to].nil?)) + begin; @from = params[:from].to_s.to_date unless params[:from].blank?; rescue; end + begin; @to = params[:to].to_s.to_date unless params[:to].blank?; rescue; end + @free_period = true + else + # default + end + + @from, @to = @to, @from if @from && @to && @from > @to + @from ||= (TimeEntry.earilest_date_for_project(@project) || Date.today) + @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) + end + + def load_available_criterias + @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id", + :klass => Project, + :label => :label_project}, + 'version' => {:sql => "#{Issue.table_name}.fixed_version_id", + :klass => Version, + :label => :label_version}, + 'category' => {:sql => "#{Issue.table_name}.category_id", + :klass => IssueCategory, + :label => :field_category}, + 'member' => {:sql => "#{TimeEntry.table_name}.user_id", + :klass => User, + :label => :label_member}, + 'tracker' => {:sql => "#{Issue.table_name}.tracker_id", + :klass => Tracker, + :label => :label_tracker}, + 'activity' => {:sql => "#{TimeEntry.table_name}.activity_id", + :klass => TimeEntryActivity, + :label => :label_activity}, + 'issue' => {:sql => "#{TimeEntry.table_name}.issue_id", + :klass => Issue, + :label => :label_issue} + } + + # Add list and boolean custom fields as available criterias + custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields) + custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)", + :format => cf.field_format, + :label => cf.name} + end if @project + + # Add list and boolean time entry custom fields + TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)", + :format => cf.field_format, + :label => cf.name} + end + + # Add list and boolean time entry activity custom fields + TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| + @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)", + :format => cf.field_format, + :label => cf.name} + end + + call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project }) + @available_criterias + end + + def time_report_joins + sql = '' + sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id" + sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id" + # TODO: rename hook + call_hook(:controller_timelog_time_report_joins, {:sql => sql} ) + sql + end + +end
--- a/app/controllers/timelog_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/timelog_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -17,12 +17,11 @@ class TimelogController < ApplicationController menu_item :issues - before_filter :find_project, :authorize, :only => [:edit, :destroy] - before_filter :find_optional_project, :only => [:report, :details] - before_filter :load_available_criterias, :only => [:report] + before_filter :find_project, :only => [:new, :create] + before_filter :find_time_entry, :only => [:edit, :update, :destroy] + before_filter :authorize, :except => [:index] + before_filter :find_optional_project, :only => [:index] - verify :method => :post, :only => :destroy, :redirect_to => { :action => :details } - helper :sort include SortHelper helper :issues @@ -30,83 +29,7 @@ helper :custom_fields include CustomFieldsHelper - def report - @criterias = params[:criterias] || [] - @criterias = @criterias.select{|criteria| @available_criterias.has_key? criteria} - @criterias.uniq! - @criterias = @criterias[0,3] - - @columns = (params[:columns] && %w(year month week day).include?(params[:columns])) ? params[:columns] : 'month' - - retrieve_date_range - - unless @criterias.empty? - sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ') - sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ') - sql_condition = '' - - if @project.nil? - sql_condition = Project.allowed_to_condition(User.current, :view_time_entries) - elsif @issue.nil? - sql_condition = @project.project_condition(Setting.display_subprojects_issues?) - else - sql_condition = "#{Issue.table_name}.root_id = #{@issue.root_id} AND #{Issue.table_name}.lft >= #{@issue.lft} AND #{Issue.table_name}.rgt <= #{@issue.rgt}" - end - - sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours" - sql << " FROM #{TimeEntry.table_name}" - sql << time_report_joins - sql << " WHERE" - sql << " (%s) AND" % sql_condition - sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from), ActiveRecord::Base.connection.quoted_date(@to)] - sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on" - - @hours = ActiveRecord::Base.connection.select_all(sql) - - @hours.each do |row| - case @columns - when 'year' - row['year'] = row['tyear'] - when 'month' - row['month'] = "#{row['tyear']}-#{row['tmonth']}" - when 'week' - row['week'] = "#{row['tyear']}-#{row['tweek']}" - when 'day' - row['day'] = "#{row['spent_on']}" - end - end - - @total_hours = @hours.inject(0) {|s,k| s = s + k['hours'].to_f} - - @periods = [] - # Date#at_beginning_of_ not supported in Rails 1.2.x - date_from = @from.to_time - # 100 columns max - while date_from <= @to.to_time && @periods.length < 100 - case @columns - when 'year' - @periods << "#{date_from.year}" - date_from = (date_from + 1.year).at_beginning_of_year - when 'month' - @periods << "#{date_from.year}-#{date_from.month}" - date_from = (date_from + 1.month).at_beginning_of_month - when 'week' - @periods << "#{date_from.year}-#{date_from.to_date.cweek}" - date_from = (date_from + 7.day).at_beginning_of_week - when 'day' - @periods << "#{date_from.to_date}" - date_from = date_from + 1.day - end - end - end - - respond_to do |format| - format.html { render :layout => !request.xhr? } - format.csv { send_data(report_to_csv(@criterias, @periods, @hours), :type => 'text/csv; header=present', :filename => 'timelog.csv') } - end - end - - def details + def index sort_init 'spent_on', 'desc' sort_update 'spent_on' => 'spent_on', 'user' => 'user_id', @@ -162,24 +85,52 @@ end end end - - def edit - (render_403; return) if @time_entry && !@time_entry.editable_by?(User.current) + + def new + @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today) + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + render :action => 'edit' + end + + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } + def create @time_entry ||= TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => User.current.today) @time_entry.attributes = params[:time_entry] call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) - if request.post? and @time_entry.save + if @time_entry.save flash[:notice] = l(:notice_successful_update) - redirect_back_or_default :action => 'details', :project_id => @time_entry.project - return + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + else + render :action => 'edit' end end + def edit + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + end + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + def update + @time_entry.attributes = params[:time_entry] + + call_hook(:controller_timelog_edit_before_save, { :params => params, :time_entry => @time_entry }) + + if @time_entry.save + flash[:notice] = l(:notice_successful_update) + redirect_back_or_default :action => 'index', :project_id => @time_entry.project + else + render :action => 'edit' + end + end + + verify :method => :delete, :only => :destroy, :render => {:nothing => true, :status => :method_not_allowed } def destroy - (render_404; return) unless @time_entry - (render_403; return) unless @time_entry.editable_by?(User.current) if @time_entry.destroy && @time_entry.destroyed? flash[:notice] = l(:notice_successful_delete) else @@ -187,15 +138,23 @@ end redirect_to :back rescue ::ActionController::RedirectBackError - redirect_to :action => 'details', :project_id => @time_entry.project + redirect_to :action => 'index', :project_id => @time_entry.project end private + def find_time_entry + @time_entry = TimeEntry.find(params[:id]) + unless @time_entry.editable_by?(User.current) + render_403 + return false + end + @project = @time_entry.project + rescue ActiveRecord::RecordNotFound + render_404 + end + def find_project - if params[:id] - @time_entry = TimeEntry.find(params[:id]) - @project = @time_entry.project - elsif params[:issue_id] + if params[:issue_id] @issue = Issue.find(params[:issue_id]) @project = @issue.project elsif params[:project_id] @@ -264,61 +223,4 @@ @to ||= (TimeEntry.latest_date_for_project(@project) || Date.today) end - def load_available_criterias - @available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id", - :klass => Project, - :label => :label_project}, - 'version' => {:sql => "#{Issue.table_name}.fixed_version_id", - :klass => Version, - :label => :label_version}, - 'category' => {:sql => "#{Issue.table_name}.category_id", - :klass => IssueCategory, - :label => :field_category}, - 'member' => {:sql => "#{TimeEntry.table_name}.user_id", - :klass => User, - :label => :label_member}, - 'tracker' => {:sql => "#{Issue.table_name}.tracker_id", - :klass => Tracker, - :label => :label_tracker}, - 'activity' => {:sql => "#{TimeEntry.table_name}.activity_id", - :klass => TimeEntryActivity, - :label => :label_activity}, - 'issue' => {:sql => "#{TimeEntry.table_name}.issue_id", - :klass => Issue, - :label => :label_issue} - } - - # Add list and boolean custom fields as available criterias - custom_fields = (@project.nil? ? IssueCustomField.for_all : @project.all_issue_custom_fields) - custom_fields.select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Issue' AND c.customized_id = #{Issue.table_name}.id)", - :format => cf.field_format, - :label => cf.name} - end if @project - - # Add list and boolean time entry custom fields - TimeEntryCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'TimeEntry' AND c.customized_id = #{TimeEntry.table_name}.id)", - :format => cf.field_format, - :label => cf.name} - end - - # Add list and boolean time entry activity custom fields - TimeEntryActivityCustomField.find(:all).select {|cf| %w(list bool).include? cf.field_format }.each do |cf| - @available_criterias["cf_#{cf.id}"] = {:sql => "(SELECT c.value FROM #{CustomValue.table_name} c WHERE c.custom_field_id = #{cf.id} AND c.customized_type = 'Enumeration' AND c.customized_id = #{TimeEntry.table_name}.activity_id)", - :format => cf.field_format, - :label => cf.name} - end - - call_hook(:controller_timelog_available_criterias, { :available_criterias => @available_criterias, :project => @project }) - @available_criterias - end - - def time_report_joins - sql = '' - sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id" - sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id" - call_hook(:controller_timelog_time_report_joins, {:sql => sql} ) - sql - end end
--- a/app/controllers/users_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/users_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -51,7 +51,6 @@ def show @user = User.find(params[:id]) - @custom_values = @user.custom_values # show projects based on current user visibility @memberships = @user.memberships.all(:conditions => Project.visible_by(User.current)) @@ -71,53 +70,96 @@ render_404 end - def add - if request.get? - @user = User.new(:language => Setting.default_language) + def new + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + + @user = User.new(:language => Setting.default_language) + @auth_sources = AuthSource.find(:all) + end + + verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed } + def create + @notification_options = User::MAIL_NOTIFICATION_OPTIONS + @notification_option = Setting.default_notification_option + + @user = User.new(params[:user]) + @user.admin = params[:user][:admin] || false + @user.login = params[:user][:login] + @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id + + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + + Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] + flash[:notice] = l(:notice_successful_create) + redirect_to(params[:continue] ? {:controller => 'users', :action => 'new'} : + {:controller => 'users', :action => 'edit', :id => @user}) + return else - @user = User.new(params[:user]) - @user.admin = params[:user][:admin] || false - @user.login = params[:user][:login] - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id - if @user.save - Mailer.deliver_account_information(@user, params[:password]) if params[:send_information] - flash[:notice] = l(:notice_successful_create) - redirect_to(params[:continue] ? {:controller => 'users', :action => 'add'} : - {:controller => 'users', :action => 'edit', :id => @user}) - return - end + @auth_sources = AuthSource.find(:all) + @notification_option = @user.mail_notification + + render :action => 'new' end - @auth_sources = AuthSource.find(:all) end def edit @user = User.find(params[:id]) - if request.post? - @user.admin = params[:user][:admin] if params[:user][:admin] - @user.login = params[:user][:login] if params[:user][:login] - if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) - @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] - end - @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] - @user.attributes = params[:user] - # Was the account actived ? (do it before User#save clears the change) - was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) - if @user.save - if was_activated - Mailer.deliver_account_activated(@user) - elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? - Mailer.deliver_account_information(@user, params[:password]) - end - flash[:notice] = l(:notice_successful_update) - redirect_to :back - end - end + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification + @auth_sources = AuthSource.find(:all) @membership ||= Member.new + end + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + def update + @user = User.find(params[:id]) + @notification_options = @user.valid_notification_options + @notification_option = @user.mail_notification + + @user.admin = params[:user][:admin] if params[:user][:admin] + @user.login = params[:user][:login] if params[:user][:login] + if params[:password].present? && (@user.auth_source_id.nil? || params[:user][:auth_source_id].blank?) + @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + end + @user.group_ids = params[:user][:group_ids] if params[:user][:group_ids] + @user.attributes = params[:user] + # Was the account actived ? (do it before User#save clears the change) + was_activated = (@user.status_change == [User::STATUS_REGISTERED, User::STATUS_ACTIVE]) + # TODO: Similar to My#account + @user.mail_notification = params[:notification_option] || 'only_my_events' + @user.pref.attributes = params[:pref] + @user.pref[:no_self_notified] = (params[:no_self_notified] == '1') + + if @user.save + @user.pref.save + @user.notified_project_ids = (params[:notification_option] == 'selected' ? params[:notified_project_ids] : []) + + if was_activated + Mailer.deliver_account_activated(@user) + elsif @user.active? && params[:send_information] && !params[:password].blank? && @user.auth_source_id.nil? + Mailer.deliver_account_information(@user, params[:password]) + end + flash[:notice] = l(:notice_successful_update) + redirect_to :back + else + @auth_sources = AuthSource.find(:all) + @membership ||= Member.new + + render :action => :edit + end rescue ::ActionController::RedirectBackError redirect_to :controller => 'users', :action => 'edit', :id => @user end - + def edit_membership @user = User.find(params[:id]) @membership = Member.edit_membership(params[:membership_id], params[:membership], @user)
--- a/app/controllers/versions_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/versions_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -109,6 +109,10 @@ if @version.update_attributes(attributes) flash[:notice] = l(:notice_successful_update) redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project + else + respond_to do |format| + format.html { render :action => 'edit' } + end end end end
--- a/app/controllers/wiki_controller.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/controllers/wiki_controller.rb Fri Nov 19 13:24:41 2010 +0000 @@ -17,20 +17,39 @@ require 'diff' +# The WikiController follows the Rails REST controller pattern but with +# a few differences +# +# * index - shows a list of WikiPages grouped by page or date +# * new - not used +# * create - not used +# * show - will also show the form for creating a new wiki page +# * edit - used to edit an existing or new page +# * update - used to save a wiki page update to the database, including new pages +# * destroy - normal +# +# Other member and collection methods are also used +# +# TODO: still being worked on class WikiController < ApplicationController default_search_scope :wiki_pages before_filter :find_wiki, :authorize before_filter :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy] - verify :method => :post, :only => [:destroy, :protect], :redirect_to => { :action => :index } + verify :method => :post, :only => [:protect], :redirect_to => { :action => :show } helper :attachments include AttachmentsHelper helper :watchers - + + # List of pages, sorted alphabetically and by parent (hierarchy) + def index + load_pages_grouped_by_date_without_content + end + # display a page (in editing mode if it doesn't exist) - def index - page_title = params[:page] + def show + page_title = params[:id] @page = @wiki.find_or_new_page(page_title) if @page.new_record? if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? @@ -63,7 +82,7 @@ # edit an existing page or a new one def edit - @page = @wiki.find_or_new_page(params[:page]) + @page = @wiki.find_or_new_page(params[:id]) return render_403 unless editable? @page.content = WikiContent.new(:page => @page) if @page.new_record? @@ -71,34 +90,48 @@ @content.text = initial_page_content(@page) if @content.text.blank? # don't keep previous comment @content.comments = nil - if request.get? - # To prevent StaleObjectError exception when reverting to a previous version - @content.version = @page.content.version - else - if !@page.new_record? && @content.text == params[:content][:text] - attachments = Attachment.attach_files(@page, params[:attachments]) - render_attachment_warning_if_needed(@page) - # don't save if text wasn't changed - redirect_to :action => 'index', :id => @project, :page => @page.title - return - end - #@content.text = params[:content][:text] - #@content.comments = params[:content][:comments] - @content.attributes = params[:content] - @content.author = User.current - # if page is new @page.save will also save content, but not if page isn't a new record - if (@page.new_record? ? @page.save : @content.save) - attachments = Attachment.attach_files(@page, params[:attachments]) - render_attachment_warning_if_needed(@page) - call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) - redirect_to :action => 'index', :id => @project, :page => @page.title - end - end + + # To prevent StaleObjectError exception when reverting to a previous version + @content.version = @page.content.version rescue ActiveRecord::StaleObjectError # Optimistic locking exception flash[:error] = l(:notice_locking_conflict) end - + + verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed } + # Creates a new page or updates an existing one + def update + @page = @wiki.find_or_new_page(params[:id]) + return render_403 unless editable? + @page.content = WikiContent.new(:page => @page) if @page.new_record? + + @content = @page.content_for_version(params[:version]) + @content.text = initial_page_content(@page) if @content.text.blank? + # don't keep previous comment + @content.comments = nil + + if !@page.new_record? && params[:content].present? && @content.text == params[:content][:text] + attachments = Attachment.attach_files(@page, params[:attachments]) + render_attachment_warning_if_needed(@page) + # don't save if text wasn't changed + redirect_to :action => 'show', :project_id => @project, :id => @page.title + return + end + @content.attributes = params[:content] + @content.author = User.current + # if page is new @page.save will also save content, but not if page isn't a new record + if (@page.new_record? ? @page.save : @content.save) + attachments = Attachment.attach_files(@page, params[:attachments]) + render_attachment_warning_if_needed(@page) + call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) + redirect_to :action => 'show', :project_id => @project, :id => @page.title + end + + rescue ActiveRecord::StaleObjectError + # Optimistic locking exception + flash[:error] = l(:notice_locking_conflict) + end + # rename a page def rename return render_403 unless editable? @@ -107,13 +140,13 @@ @original_title = @page.pretty_title if request.post? && @page.update_attributes(params[:wiki_page]) flash[:notice] = l(:notice_successful_update) - redirect_to :action => 'index', :id => @project, :page => @page.title + redirect_to :action => 'show', :project_id => @project, :id => @page.title end end def protect @page.update_attribute :protected, params[:protected] - redirect_to :action => 'index', :id => @project, :page => @page.title + redirect_to :action => 'show', :project_id => @project, :id => @page.title end # show page history @@ -139,7 +172,8 @@ @annotate = @page.annotate(params[:version]) render_404 unless @annotate end - + + verify :method => :delete, :only => [:destroy], :redirect_to => { :action => :show } # Removes a wiki page and its history # Children can be either set as root pages, removed or reassigned to another parent page def destroy @@ -166,41 +200,26 @@ end end @page.destroy - redirect_to :action => 'special', :id => @project, :page => 'Page_index' + redirect_to :action => 'index', :project_id => @project end - # display special pages - def special - page_title = params[:page].downcase - case page_title - # show pages index, sorted by title - when 'page_index', 'date_index' - # eager load information about last updates, without loading text - @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", - :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", - :order => 'title' - @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} - @pages_by_parent_id = @pages.group_by(&:parent_id) - # export wiki to a single html file - when 'export' - if User.current.allowed_to?(:export_wiki_pages, @project) - @pages = @wiki.pages.find :all, :order => 'title' - export = render_to_string :action => 'export_multiple', :layout => false - send_data(export, :type => 'text/html', :filename => "wiki.html") - else - redirect_to :action => 'index', :id => @project, :page => nil - end - return + # Export wiki to a single html file + def export + if User.current.allowed_to?(:export_wiki_pages, @project) + @pages = @wiki.pages.find :all, :order => 'title' + export = render_to_string :action => 'export_multiple', :layout => false + send_data(export, :type => 'text/html', :filename => "wiki.html") else - # requested special page doesn't exist, redirect to default page - redirect_to :action => 'index', :id => @project, :page => nil - return + redirect_to :action => 'show', :project_id => @project, :id => nil end - render :action => "special_#{page_title}" + end + + def date_index + load_pages_grouped_by_date_without_content end def preview - page = @wiki.find_page(params[:page]) + page = @wiki.find_page(params[:id]) # page is nil when previewing a new page return render_403 unless page.nil? || editable?(page) if page @@ -215,13 +234,13 @@ return render_403 unless editable? attachments = Attachment.attach_files(@page, params[:attachments]) render_attachment_warning_if_needed(@page) - redirect_to :action => 'index', :page => @page.title + redirect_to :action => 'show', :id => @page.title, :project_id => @project end private def find_wiki - @project = Project.find(params[:id]) + @project = Project.find(params[:project_id]) @wiki = @project.wiki render_404 unless @wiki rescue ActiveRecord::RecordNotFound @@ -230,7 +249,7 @@ # Finds the requested page and returns a 404 error if it doesn't exist def find_existing_page - @page = @wiki.find_page(params[:page]) + @page = @wiki.find_page(params[:id]) render_404 if @page.nil? end @@ -245,4 +264,14 @@ extend helper unless self.instance_of?(helper) helper.instance_method(:initial_page_content).bind(self).call(page) end + + # eager load information about last updates, without loading text + def load_pages_grouped_by_date_without_content + @pages = @wiki.pages.find :all, :select => "#{WikiPage.table_name}.*, #{WikiContent.table_name}.updated_on", + :joins => "LEFT JOIN #{WikiContent.table_name} ON #{WikiContent.table_name}.page_id = #{WikiPage.table_name}.id", + :order => 'title' + @pages_by_date = @pages.group_by {|p| p.updated_on.to_date} + @pages_by_parent_id = @pages.group_by(&:parent_id) + end + end
--- a/app/helpers/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 36 -/svn/!svn/ver/4166/trunk/app/helpers +/svn/!svn/ver/4391/trunk/app/helpers END trackers_helper.rb K 25 @@ -79,7 +79,7 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/2794/trunk/app/helpers/wiki_helper.rb +/svn/!svn/ver/4375/trunk/app/helpers/wiki_helper.rb END enumerations_helper.rb K 25 @@ -91,19 +91,19 @@ K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/4166/trunk/app/helpers/issues_helper.rb +/svn/!svn/ver/4281/trunk/app/helpers/issues_helper.rb +END +gantt_helper.rb +K 25 +svn:wc:ra_dav:version-url +V 52 +/svn/!svn/ver/4283/trunk/app/helpers/gantt_helper.rb END queries_helper.rb K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/3924/trunk/app/helpers/queries_helper.rb -END -gantt_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/4072/trunk/app/helpers/gantt_helper.rb +/svn/!svn/ver/4387/trunk/app/helpers/queries_helper.rb END mail_handler_helper.rb K 25 @@ -135,41 +135,47 @@ V 53 /svn/!svn/ver/333/trunk/app/helpers/welcome_helper.rb END +workflows_helper.rb +K 25 +svn:wc:ra_dav:version-url +V 56 +/svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb +END journals_helper.rb K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/4062/trunk/app/helpers/journals_helper.rb END -workflows_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb -END reports_helper.rb K 25 svn:wc:ra_dav:version-url V 53 /svn/!svn/ver/629/trunk/app/helpers/reports_helper.rb END +custom_fields_helper.rb +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/!svn/ver/3675/trunk/app/helpers/custom_fields_helper.rb +END +settings_helper.rb +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/!svn/ver/4222/trunk/app/helpers/settings_helper.rb +END timelog_helper.rb K 25 svn:wc:ra_dav:version-url V 54 /svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb END -settings_helper.rb +users_helper.rb K 25 svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3222/trunk/app/helpers/settings_helper.rb -END -custom_fields_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3675/trunk/app/helpers/custom_fields_helper.rb +V 52 +/svn/!svn/ver/4230/trunk/app/helpers/users_helper.rb END issue_moves_helper.rb K 25 @@ -177,17 +183,11 @@ V 58 /svn/!svn/ver/3936/trunk/app/helpers/issue_moves_helper.rb END -users_helper.rb -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3237/trunk/app/helpers/users_helper.rb -END application_helper.rb K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/4103/trunk/app/helpers/application_helper.rb +/svn/!svn/ver/4391/trunk/app/helpers/application_helper.rb END auth_sources_helper.rb K 25 @@ -199,7 +199,7 @@ K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/2822/trunk/app/helpers/search_helper.rb +/svn/!svn/ver/4353/trunk/app/helpers/search_helper.rb END messages_helper.rb K 25
--- a/app/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/helpers http://redmine.rubyforge.org/svn -2010-09-20T18:50:14.663319Z -4166 -edavis10 +2010-11-11T13:39:14.764400Z +4391 +jplang @@ -440,10 +440,10 @@ -2010-09-23T14:37:44.431779Z -aee0a578b4bbfe95d2ede93a418824a6 -2009-06-28T11:55:49.957729Z -2794 +2010-11-19T13:04:46.900732Z +3e6762604b5e9a201b7a7bb2edc1f78f +2010-11-06T14:30:32.528294Z +4375 jplang has-props @@ -466,7 +466,7 @@ -2307 +2297 enumerations_helper.rb file @@ -508,11 +508,11 @@ -2010-09-24T12:48:25.903794Z -f45b693d0286eacc66fde223d7306002 -2010-09-20T18:50:14.663319Z -4166 -edavis10 +2010-11-19T13:04:46.900732Z +b5569bf5b4ba507a522f4e371505ae0c +2010-10-22T22:29:32.969473Z +4281 +jplang has-props @@ -534,7 +534,41 @@ -11249 +10075 + +gantt_helper.rb +file + + + + +2010-11-19T13:04:46.900732Z +dfac5226f31c3c232d7dcc9416172071 +2010-10-23T09:08:55.877887Z +4283 +jplang + + + + + + + + + + + + + + + + + + + + + +1988 queries_helper.rb file @@ -542,11 +576,11 @@ -2010-09-23T14:37:44.427784Z -403463e02373d20faf0ed8988cfae033 -2010-08-08T07:07:20.961363Z -3924 -jbbarth +2010-11-19T13:04:46.900732Z +6b997d023cc081b101be1949eb18f893 +2010-11-07T15:38:51.908839Z +4387 +jplang has-props @@ -568,41 +602,7 @@ -3785 - -gantt_helper.rb -file - - - - -2010-09-24T12:48:25.903794Z -bed98c36b12ec59c120d8da45f1511e0 -2010-09-10T03:09:02.311267Z -4072 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1027 +3722 mail_handler_helper.rb file @@ -774,6 +774,40 @@ 817 +workflows_helper.rb +file + + + + +2010-09-23T14:37:44.431779Z +4f7bcbe149363ecb18080e3ce6c3f761 +2008-09-28T12:03:17.584169Z +1914 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +824 + journals_helper.rb file @@ -808,40 +842,6 @@ 2266 -workflows_helper.rb -file - - - - -2010-09-23T14:37:44.431779Z -4f7bcbe149363ecb18080e3ce6c3f761 -2008-09-28T12:03:17.584169Z -1914 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -824 - reports_helper.rb file @@ -876,6 +876,74 @@ 1265 +custom_fields_helper.rb +file + + + + +2010-09-23T14:37:44.423776Z +97753365c8eb76a948d7417d5db31079 +2010-04-16T15:34:05.970144Z +3675 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +5322 + +settings_helper.rb +file + + + + +2010-11-19T13:04:46.900732Z +868d0dc19e332ae2c817321637a8e31f +2010-09-28T21:09:06.467392Z +4222 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +3858 + timelog_helper.rb file @@ -910,108 +978,6 @@ 6636 -settings_helper.rb -file - - - - -2010-09-23T14:37:44.431779Z -72a1f70b395a94a9efae4d1046d5df2b -2009-12-23T17:56:39.685148Z -3222 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3350 - -custom_fields_helper.rb -file - - - - -2010-09-23T14:37:44.423776Z -97753365c8eb76a948d7417d5db31079 -2010-04-16T15:34:05.970144Z -3675 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -5322 - -users_helper.rb -file - - - - -2010-09-23T14:37:44.431779Z -051113e44a01776675b1a38144a5fb8c -2009-12-24T16:14:15.868995Z -3237 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2645 - issue_moves_helper.rb file @@ -1046,17 +1012,51 @@ 28 +users_helper.rb +file + + + + +2010-11-19T13:04:46.900732Z +01b097606863e1e2938e7222d07fc2b7 +2010-09-30T18:22:46.611444Z +4230 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +2644 + application_helper.rb file -2010-09-24T12:48:25.903794Z -fed6be9c1540dab50fb9e194984395b3 -2010-09-20T02:55:14.397976Z -4103 -edavis10 +2010-11-19T13:04:46.900732Z +a9ac6edf6104b93a669ba1b0705f4fc6 +2010-11-11T13:39:14.764400Z +4391 +jplang has-props @@ -1078,7 +1078,7 @@ -33297 +34105 auth_sources_helper.rb file @@ -1120,10 +1120,10 @@ -2010-09-23T14:37:44.431779Z -da0566fb2a355566f38723e4a11d1aab -2009-07-18T09:46:20.387008Z -2822 +2010-11-19T13:04:46.900732Z +dedb3c62af67e076703aa2f60c97fb2b +2010-11-01T12:55:15.292443Z +4353 jplang has-props @@ -1146,7 +1146,7 @@ -2639 +2668 messages_helper.rb file
--- a/app/helpers/.svn/text-base/application_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# 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 @@ -34,25 +34,11 @@ # Display a link if user is authorized # # @param [String] name Anchor text (passed to link_to) - # @param [Hash, String] options Hash params or url for the link target (passed to link_to). - # This will checked by authorize_for to see if the user is authorized + # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized # @param [optional, Hash] html_options Options passed to link_to # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference) - if options.is_a?(String) - begin - route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get) - link_controller = route[:controller] - link_action = route[:action] - rescue ActionController::RoutingError # Parse failed, not a route - link_controller, link_action = nil, nil - end - else - link_controller = options[:controller] || params[:controller] - link_action = options[:action] - end - - link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action) + link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action]) end # Display a link to remote if user is authorized @@ -121,11 +107,6 @@ link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) end - - def link_to_project(project, options={}) - options[:class] ||= 'project' - link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class]) - end # Generates a link to a project if active # Examples: @@ -196,7 +177,7 @@ content << "<ul class=\"pages-hierarchy\">\n" pages[node].each do |page| content << "<li>" - content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :id => page.project, :page => page.title}, + content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title}, :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil)) content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id] content << "</li>\n" @@ -257,15 +238,10 @@ end # Yields the given block for each project with its level in the tree + # + # Wrapper for Project#project_tree def project_tree(projects, &block) - ancestors = [] - projects.sort_by(&:lft).each do |project| - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) - ancestors.pop - end - yield project, ancestors.size - ancestors << project - end + Project.project_tree(projects, &block) end def project_nested_ul(projects, &block) @@ -475,7 +451,7 @@ text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) } parse_non_pre_blocks(text) do |text| - [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name| + [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name| send method_name, text, project, obj, attr, only_path, options end end @@ -548,7 +524,7 @@ esc, all, page, title = $1, $2, $3, $5 if esc.nil? if page =~ /^([^\:]+)\:(.*)$/ - link_project = Project.find_by_name($1) || Project.find_by_identifier($1) + link_project = Project.find_by_identifier($1) || Project.find_by_name($1) page = $2 title ||= $1 if page.blank? end @@ -565,7 +541,8 @@ when :local; "#{title}.html" when :anchor; "##{title}" # used for single-file wiki export else - url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => link_project, :page => Wiki.titleize(page), :anchor => anchor) + wiki_page_id = page.present? ? Wiki.titleize(page) : nil + url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor) end link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) else @@ -696,6 +673,50 @@ leading + (link || "#{prefix}#{sep}#{identifier}") end end + + TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE) + + # Headings and TOC + # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false + def parse_headings(text, project, obj, attr, only_path, options) + headings = [] + text.gsub!(HEADING_RE) do + level, attrs, content = $1.to_i, $2, $3 + item = strip_tags(content).strip + anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') + headings << [level, anchor, item] + "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a></h#{level}>" + end unless options[:headings] == false + + text.gsub!(TOC_RE) do + if headings.empty? + '' + else + div_class = 'toc' + div_class << ' right' if $1 == '>' + div_class << ' left' if $1 == '<' + out = "<ul class=\"#{div_class}\"><li>" + root = headings.map(&:first).min + current = root + started = false + headings.each do |level, anchor, item| + if level > current + out << '<ul><li>' * (level - current) + elsif level < current + out << "</li></ul>\n" * (current - level) + "</li><li>" + elsif started + out << '</li><li>' + end + out << "<a href=\"##{anchor}\">#{item}</a>" + current = level + started = true + end + out << '</li></ul>' * (current - root) + out << '</li></ul>' + end + end + end # Same as Rails' simple_format helper without using paragraphs def simple_format_without_paragraph(text)
--- a/app/helpers/.svn/text-base/gantt_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/gantt_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,31 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module GanttHelper + + def gantt_zoom_link(gantt, in_or_out) + case in_or_out + when :in + if gantt.zoom < 4 + link_to_remote(l(:text_zoom_in), + {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'}, + {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))), + :class => 'icon icon-zoom-in'}) + else + content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in') + end + + when :out + if gantt.zoom > 1 + link_to_remote(l(:text_zoom_out), + {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'}, + {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))), + :class => 'icon icon-zoom-out'}) + else + content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out') + end + end + end + def number_of_issues_on_versions(gantt) versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
--- a/app/helpers/.svn/text-base/issues_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/issues_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -246,30 +246,4 @@ end export end - - def gantt_zoom_link(gantt, in_or_out) - img_attributes = {:style => 'height:1.4em; width:1.4em; margin-left: 3px;'} # em for accessibility - - case in_or_out - when :in - if gantt.zoom < 4 - link_to_remote(l(:text_zoom_in) + image_tag('zoom_in.png', img_attributes.merge(:alt => l(:text_zoom_in))), - {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1)))}) - else - l(:text_zoom_in) + - image_tag('zoom_in_g.png', img_attributes.merge(:alt => l(:text_zoom_in))) - end - - when :out - if gantt.zoom > 1 - link_to_remote(l(:text_zoom_out) + image_tag('zoom_out.png', img_attributes.merge(:alt => l(:text_zoom_out))), - {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1)))}) - else - l(:text_zoom_out) + - image_tag('zoom_out_g.png', img_attributes.merge(:alt => l(:text_zoom_out))) - end - end - end end
--- a/app/helpers/.svn/text-base/queries_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/queries_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -78,10 +78,9 @@ # Give it a name, required to be valid @query = Query.new(:name => "_") @query.project = @project - if params[:fields] and params[:fields].is_a? Array - params[:fields].each do |field| - @query.add_filter(field, params[:operators][field], params[:values][field]) - end + if params[:fields] + @query.filters = {} + @query.add_filters(params[:fields], params[:operators], params[:values]) else @query.available_filters.keys.each do |field| @query.add_short_filter(field, params[field]) if params[field]
--- a/app/helpers/.svn/text-base/search_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/search_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -39,7 +39,7 @@ end def type_label(t) - l("label_#{t.singularize}_plural") + l("label_#{t.singularize}_plural", :default => t.to_s.humanize) end def project_select_tag
--- a/app/helpers/.svn/text-base/settings_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/settings_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -71,4 +71,14 @@ label = options.delete(:label) label != false ? content_tag("label", l(label || "setting_#{setting}")) : '' end + + # Renders a notification field for a Redmine::Notifiable option + def notification_field(notifiable) + return content_tag(:label, + check_box_tag('settings[notified_events][]', + notifiable.name, + Setting.notified_events.include?(notifiable.name)) + + l_or_humanize(notifiable.name, :prefix => 'label_'), + :class => notifiable.parent.present? ? "parent" : '') + end end
--- a/app/helpers/.svn/text-base/users_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/users_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -34,14 +34,14 @@ end def change_status_link(user) - url = {:controller => 'users', :action => 'edit', :id => user, :page => params[:page], :status => params[:status], :tab => nil} + url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} if user.locked? - link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock' + link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' elsif user.registered? - link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock' + link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' elsif user != User.current - link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :post, :class => 'icon icon-lock' + link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock' end end
--- a/app/helpers/.svn/text-base/wiki_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/wiki_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -24,7 +24,7 @@ attrs << " selected='selected'" if selected == page indent = (level > 0) ? (' ' * level * 2 + '» ') : nil - s << "<option value='#{page.id}'>#{indent}#{h page.pretty_title}</option>\n" + + s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + wiki_page_options_for_select(pages, selected, page, level + 1) end s
--- a/app/helpers/application_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/application_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# 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 @@ -34,25 +34,11 @@ # Display a link if user is authorized # # @param [String] name Anchor text (passed to link_to) - # @param [Hash, String] options Hash params or url for the link target (passed to link_to). - # This will checked by authorize_for to see if the user is authorized + # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized # @param [optional, Hash] html_options Options passed to link_to # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference) - if options.is_a?(String) - begin - route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get) - link_controller = route[:controller] - link_action = route[:action] - rescue ActionController::RoutingError # Parse failed, not a route - link_controller, link_action = nil, nil - end - else - link_controller = options[:controller] || params[:controller] - link_action = options[:action] - end - - link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action) + link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action]) end # Display a link to remote if user is authorized @@ -121,11 +107,6 @@ link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) end - - def link_to_project(project, options={}) - options[:class] ||= 'project' - link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class]) - end # Generates a link to a project if active # Examples: @@ -196,7 +177,7 @@ content << "<ul class=\"pages-hierarchy\">\n" pages[node].each do |page| content << "<li>" - content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :id => page.project, :page => page.title}, + content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title}, :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil)) content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id] content << "</li>\n" @@ -257,15 +238,10 @@ end # Yields the given block for each project with its level in the tree + # + # Wrapper for Project#project_tree def project_tree(projects, &block) - ancestors = [] - projects.sort_by(&:lft).each do |project| - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) - ancestors.pop - end - yield project, ancestors.size - ancestors << project - end + Project.project_tree(projects, &block) end def project_nested_ul(projects, &block) @@ -475,7 +451,7 @@ text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) } parse_non_pre_blocks(text) do |text| - [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name| + [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name| send method_name, text, project, obj, attr, only_path, options end end @@ -548,7 +524,7 @@ esc, all, page, title = $1, $2, $3, $5 if esc.nil? if page =~ /^([^\:]+)\:(.*)$/ - link_project = Project.find_by_name($1) || Project.find_by_identifier($1) + link_project = Project.find_by_identifier($1) || Project.find_by_name($1) page = $2 title ||= $1 if page.blank? end @@ -565,7 +541,8 @@ when :local; "#{title}.html" when :anchor; "##{title}" # used for single-file wiki export else - url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => link_project, :page => Wiki.titleize(page), :anchor => anchor) + wiki_page_id = page.present? ? Wiki.titleize(page) : nil + url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor) end link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) else @@ -696,6 +673,50 @@ leading + (link || "#{prefix}#{sep}#{identifier}") end end + + TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE) + + # Headings and TOC + # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false + def parse_headings(text, project, obj, attr, only_path, options) + headings = [] + text.gsub!(HEADING_RE) do + level, attrs, content = $1.to_i, $2, $3 + item = strip_tags(content).strip + anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') + headings << [level, anchor, item] + "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a></h#{level}>" + end unless options[:headings] == false + + text.gsub!(TOC_RE) do + if headings.empty? + '' + else + div_class = 'toc' + div_class << ' right' if $1 == '>' + div_class << ' left' if $1 == '<' + out = "<ul class=\"#{div_class}\"><li>" + root = headings.map(&:first).min + current = root + started = false + headings.each do |level, anchor, item| + if level > current + out << '<ul><li>' * (level - current) + elsif level < current + out << "</li></ul>\n" * (current - level) + "</li><li>" + elsif started + out << '</li><li>' + end + out << "<a href=\"##{anchor}\">#{item}</a>" + current = level + started = true + end + out << '</li></ul>' * (current - root) + out << '</li></ul>' + end + end + end # Same as Rails' simple_format helper without using paragraphs def simple_format_without_paragraph(text)
--- a/app/helpers/gantt_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/gantt_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,31 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module GanttHelper + + def gantt_zoom_link(gantt, in_or_out) + case in_or_out + when :in + if gantt.zoom < 4 + link_to_remote(l(:text_zoom_in), + {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'}, + {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1))), + :class => 'icon icon-zoom-in'}) + else + content_tag('span', l(:text_zoom_in), :class => 'icon icon-zoom-in') + end + + when :out + if gantt.zoom > 1 + link_to_remote(l(:text_zoom_out), + {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'}, + {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1))), + :class => 'icon icon-zoom-out'}) + else + content_tag('span', l(:text_zoom_out), :class => 'icon icon-zoom-out') + end + end + end + def number_of_issues_on_versions(gantt) versions = gantt.events.collect {|event| (event.is_a? Version) ? event : nil}.compact
--- a/app/helpers/issues_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/issues_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -246,30 +246,4 @@ end export end - - def gantt_zoom_link(gantt, in_or_out) - img_attributes = {:style => 'height:1.4em; width:1.4em; margin-left: 3px;'} # em for accessibility - - case in_or_out - when :in - if gantt.zoom < 4 - link_to_remote(l(:text_zoom_in) + image_tag('zoom_in.png', img_attributes.merge(:alt => l(:text_zoom_in))), - {:url => gantt.params.merge(:zoom => (gantt.zoom+1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom+1)))}) - else - l(:text_zoom_in) + - image_tag('zoom_in_g.png', img_attributes.merge(:alt => l(:text_zoom_in))) - end - - when :out - if gantt.zoom > 1 - link_to_remote(l(:text_zoom_out) + image_tag('zoom_out.png', img_attributes.merge(:alt => l(:text_zoom_out))), - {:url => gantt.params.merge(:zoom => (gantt.zoom-1)), :method => :get, :update => 'content'}, - {:href => url_for(gantt.params.merge(:zoom => (gantt.zoom-1)))}) - else - l(:text_zoom_out) + - image_tag('zoom_out_g.png', img_attributes.merge(:alt => l(:text_zoom_out))) - end - end - end end
--- a/app/helpers/queries_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/queries_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -78,10 +78,9 @@ # Give it a name, required to be valid @query = Query.new(:name => "_") @query.project = @project - if params[:fields] and params[:fields].is_a? Array - params[:fields].each do |field| - @query.add_filter(field, params[:operators][field], params[:values][field]) - end + if params[:fields] + @query.filters = {} + @query.add_filters(params[:fields], params[:operators], params[:values]) else @query.available_filters.keys.each do |field| @query.add_short_filter(field, params[field]) if params[field]
--- a/app/helpers/search_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/search_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -39,7 +39,7 @@ end def type_label(t) - l("label_#{t.singularize}_plural") + l("label_#{t.singularize}_plural", :default => t.to_s.humanize) end def project_select_tag
--- a/app/helpers/settings_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/settings_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -71,4 +71,14 @@ label = options.delete(:label) label != false ? content_tag("label", l(label || "setting_#{setting}")) : '' end + + # Renders a notification field for a Redmine::Notifiable option + def notification_field(notifiable) + return content_tag(:label, + check_box_tag('settings[notified_events][]', + notifiable.name, + Setting.notified_events.include?(notifiable.name)) + + l_or_humanize(notifiable.name, :prefix => 'label_'), + :class => notifiable.parent.present? ? "parent" : '') + end end
--- a/app/helpers/users_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/users_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -34,14 +34,14 @@ end def change_status_link(user) - url = {:controller => 'users', :action => 'edit', :id => user, :page => params[:page], :status => params[:status], :tab => nil} + url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} if user.locked? - link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock' + link_to l(:button_unlock), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' elsif user.registered? - link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :post, :class => 'icon icon-unlock' + link_to l(:button_activate), url.merge(:user => {:status => User::STATUS_ACTIVE}), :method => :put, :class => 'icon icon-unlock' elsif user != User.current - link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :post, :class => 'icon icon-lock' + link_to l(:button_lock), url.merge(:user => {:status => User::STATUS_LOCKED}), :method => :put, :class => 'icon icon-lock' end end
--- a/app/helpers/wiki_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/wiki_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -24,7 +24,7 @@ attrs << " selected='selected'" if selected == page indent = (level > 0) ? (' ' * level * 2 + '» ') : nil - s << "<option value='#{page.id}'>#{indent}#{h page.pretty_title}</option>\n" + + s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + wiki_page_options_for_select(pages, selected, page, level + 1) end s
--- a/app/models/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 35 -/svn/!svn/ver/4167/trunk/app/models +/svn/!svn/ver/4404/trunk/app/models END document.rb K 25 @@ -13,7 +13,7 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3801/trunk/app/models/mail_handler.rb +/svn/!svn/ver/4404/trunk/app/models/mail_handler.rb END repository.rb K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4087/trunk/app/models/time_entry.rb +/svn/!svn/ver/4277/trunk/app/models/time_entry.rb END token.rb K 25 @@ -37,7 +37,7 @@ K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/2637/trunk/app/models/journal_observer.rb +/svn/!svn/ver/4221/trunk/app/models/journal_observer.rb END auth_source_ldap.rb K 25 @@ -81,6 +81,12 @@ V 50 /svn/!svn/ver/3240/trunk/app/models/enumeration.rb END +issue.rb +K 25 +svn:wc:ra_dav:version-url +V 44 +/svn/!svn/ver/4394/trunk/app/models/issue.rb +END time_entry_activity_custom_field.rb K 25 svn:wc:ra_dav:version-url @@ -93,12 +99,6 @@ V 50 /svn/!svn/ver/3250/trunk/app/models/member_role.rb END -issue.rb -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/4105/trunk/app/models/issue.rb -END issue_priority.rb K 25 svn:wc:ra_dav:version-url @@ -111,23 +111,17 @@ V 55 /svn/!svn/ver/3169/trunk/app/models/message_observer.rb END -wiki_content.rb -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/3632/trunk/app/models/wiki_content.rb -END watcher.rb K 25 svn:wc:ra_dav:version-url V 46 /svn/!svn/ver/3167/trunk/app/models/watcher.rb END -wiki_page.rb +wiki_content.rb K 25 svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/3632/trunk/app/models/wiki_page.rb +V 51 +/svn/!svn/ver/4296/trunk/app/models/wiki_content.rb END enabled_module.rb K 25 @@ -135,6 +129,12 @@ V 53 /svn/!svn/ver/2970/trunk/app/models/enabled_module.rb END +wiki_page.rb +K 25 +svn:wc:ra_dav:version-url +V 48 +/svn/!svn/ver/4296/trunk/app/models/wiki_page.rb +END comment.rb K 25 svn:wc:ra_dav:version-url @@ -151,7 +151,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4079/trunk/app/models/query.rb +/svn/!svn/ver/4387/trunk/app/models/query.rb END member.rb K 25 @@ -169,7 +169,13 @@ K 25 svn:wc:ra_dav:version-url V 45 -/svn/!svn/ver/4167/trunk/app/models/mailer.rb +/svn/!svn/ver/4373/trunk/app/models/mailer.rb +END +journal.rb +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4062/trunk/app/models/journal.rb END workflow.rb K 25 @@ -177,12 +183,6 @@ V 47 /svn/!svn/ver/3709/trunk/app/models/workflow.rb END -journal.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4062/trunk/app/models/journal.rb -END user_custom_field.rb K 25 svn:wc:ra_dav:version-url @@ -211,7 +211,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/4164/trunk/app/models/user.rb +/svn/!svn/ver/4234/trunk/app/models/user.rb END auth_source.rb K 25 @@ -343,13 +343,13 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3077/trunk/app/models/custom_value.rb +/svn/!svn/ver/4382/trunk/app/models/custom_value.rb END project.rb K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4087/trunk/app/models/project.rb +/svn/!svn/ver/4402/trunk/app/models/project.rb END document_category.rb K 25
--- a/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/models http://redmine.rubyforge.org/svn -2010-09-20T23:17:51.402972Z -4167 -edavis10 +2010-11-14T13:48:01.671461Z +4404 +jplang @@ -69,11 +69,11 @@ -2010-09-23T14:37:44.475780Z -009baaf8ec2c62e225d84f9dc9898a23 -2010-06-20T16:22:36.211973Z -3801 -edavis10 +2010-11-19T13:04:46.952746Z +dd4785525bab24b6791967d66ffe6cb9 +2010-11-14T13:48:01.671461Z +4404 +jplang has-props @@ -95,7 +95,7 @@ -12708 +13455 repository.rb file @@ -137,33 +137,33 @@ -2010-09-24T12:48:25.923798Z -005148fc17a331f651990b8784f70a3e -2010-09-14T19:02:25.847894Z +2010-11-19T13:04:46.956816Z +aa2cc7da3c19ce52813f08949e6cefec +2010-10-22T20:40:11.668687Z +4277 +jplang +has-props + + + + + + + + + + + + + + + + + + + + 4087 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -4089 token.rb file @@ -205,10 +205,10 @@ -2010-09-23T14:37:44.475780Z -0c8188293bba080a074aeb40a86e49f7 -2009-03-28T00:38:57.780983Z -2637 +2010-11-19T13:04:46.956816Z +7d895b3a013ce8f4e63dd4e7aab7eb20 +2010-09-28T20:20:00.843023Z +4221 edavis10 has-props @@ -231,7 +231,7 @@ -974 +1302 auth_source_ldap.rb file @@ -471,16 +471,16 @@ 3856 -issue.rb +time_entry_activity_custom_field.rb file -2010-09-24T12:48:25.923798Z -d169fc23e9a8686dba8f414b92e0fe26 -2010-09-20T02:55:26.436604Z -4105 +2010-09-23T14:37:44.487730Z +d5549b2847a255d4bdd7185a670988b5 +2009-10-21T22:35:03.091600Z +2952 edavis10 has-props @@ -503,7 +503,7 @@ -31528 +896 member_role.rb file @@ -539,17 +539,17 @@ 2011 -time_entry_activity_custom_field.rb +issue.rb file -2010-09-23T14:37:44.487730Z -d5549b2847a255d4bdd7185a670988b5 -2009-10-21T22:35:03.091600Z -2952 -edavis10 +2010-11-19T13:04:46.956816Z +35d32fdd4b71df26207f71005d93580e +2010-11-12T11:34:53.754717Z +4394 +jplang has-props @@ -571,7 +571,7 @@ -896 +32352 issue_priority.rb file @@ -641,6 +641,40 @@ 979 +wiki_content.rb +file + + + + +2010-11-19T13:04:46.956816Z +3cac6a9c934a472fcbdf99cd00e5bfbb +2010-10-27T16:27:06.240747Z +4296 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +4480 + watcher.rb file @@ -675,17 +709,17 @@ 2093 -wiki_content.rb +wiki_page.rb file -2010-09-23T14:37:44.491776Z -2ce4521051866ff5f654f8a8bddfc824 -2010-04-11T12:56:18.077630Z -3632 -jplang +2010-11-19T13:04:46.956816Z +a45da72d99c7bc05ce93eb86205942e5 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -707,7 +741,7 @@ -4458 +6720 enabled_module.rb file @@ -743,40 +777,6 @@ 1296 -wiki_page.rb -file - - - - -2010-09-23T14:37:44.491776Z -e6b3c8e83cb441a021358acf5d246d21 -2010-04-11T12:56:18.077630Z -3632 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6697 - comment.rb file @@ -851,11 +851,11 @@ -2010-09-24T12:48:25.923798Z -1cbc803eff5cf06cb8f3f133e5e7bed2 -2010-09-10T19:53:57.028875Z -4079 -edavis10 +2010-11-19T13:04:46.956816Z +ab1aeac4c9dd4c6ff846a281927b515a +2010-11-07T15:38:51.908839Z +4387 +jplang has-props @@ -877,7 +877,7 @@ -26050 +26148 member.rb file @@ -953,11 +953,11 @@ -2010-09-24T12:48:25.923798Z -46fe26aa1e0c5f59bdc2eab01a1c88e0 -2010-09-20T23:17:51.402972Z -4167 -edavis10 +2010-11-19T13:04:46.956816Z +1c4b2494e527ab830998b06f67b18f52 +2010-11-06T13:23:23.456511Z +4373 +jplang has-props @@ -979,7 +979,41 @@ -18478 +18490 + +workflow.rb +file + + + + +2010-09-23T14:37:44.491776Z +4561dfcb12b3fa066a9516c59a9eef94 +2010-04-30T12:19:51.238583Z +3709 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +4028 journal.rb file @@ -1015,40 +1049,6 @@ 3214 -workflow.rb -file - - - - -2010-09-23T14:37:44.491776Z -4561dfcb12b3fa066a9516c59a9eef94 -2010-04-30T12:19:51.238583Z -3709 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -4028 - user_custom_field.rb file @@ -1191,11 +1191,11 @@ -2010-09-24T12:48:25.927735Z -911221c7bce8ea7ed20a36477f72d457 -2010-09-20T16:38:00.519430Z -4164 -edavis10 +2010-11-19T13:04:46.956816Z +de9dd6a174b66d7a7f16a699f1f1698f +2010-10-06T05:08:38.847540Z +4234 +jbbarth has-props @@ -1217,7 +1217,7 @@ -13260 +15699 auth_source.rb file @@ -1939,10 +1939,10 @@ -2010-09-23T14:37:44.471831Z -2fdf508dceb97028a97b4fee91368d92 -2009-11-20T12:57:52.379950Z -3077 +2010-11-19T13:04:46.960863Z +6938d61d0f9e1fc190bb1d0e6c05546e +2010-11-07T14:15:01.891476Z +4382 jplang has-props @@ -1965,7 +1965,7 @@ -2374 +2424 project.rb file @@ -1973,11 +1973,11 @@ -2010-09-24T12:48:25.927735Z -fc2bd6fba523135882690f2d4b218277 -2010-09-14T19:02:25.847894Z -4087 -edavis10 +2010-11-19T13:04:46.960863Z +87ee5ad7f6983a739700f40cff0d65ae +2010-11-14T12:33:14.198318Z +4402 +jplang has-props @@ -1999,7 +1999,7 @@ -29540 +30070 document_category.rb file
--- a/app/models/.svn/text-base/custom_value.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/custom_value.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -34,6 +34,10 @@ custom_field.editable? end + def visible? + custom_field.visible? + end + def required? custom_field.is_required? end
--- a/app/models/.svn/text-base/issue.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/issue.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -86,8 +86,8 @@ } before_create :default_assign - before_save :reschedule_following_issues, :close_duplicates, :update_done_ratio_from_issue_status - after_save :update_nested_set_attributes, :update_parent_attributes, :create_journal + before_save :close_duplicates, :update_done_ratio_from_issue_status + after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal after_destroy :destroy_children after_destroy :update_parent_attributes @@ -233,14 +233,35 @@ lock_version ) unless const_defined?(:SAFE_ATTRIBUTES) + SAFE_ATTRIBUTES_ON_TRANSITION = %w( + status_id + assigned_to_id + fixed_version_id + done_ratio + ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION) + # Safely sets attributes # Should be called from controllers instead of #attributes= # attr_accessible is too rough because we still want things like # Issue.new(:project => foo) to work # TODO: move workflow/permission checks from controllers to here def safe_attributes=(attrs, user=User.current) - return if attrs.nil? - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} + return unless attrs.is_a?(Hash) + + # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed + if new_record? || user.allowed_to?(:edit_issues, project) + attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} + elsif new_statuses_allowed_to(user).any? + attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)} + else + return + end + + # Tracker must be set before since new_statuses_allowed_to depends on it. + if t = attrs.delete('tracker_id') + self.tracker_id = t + end + if attrs['status_id'] unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i) attrs.delete('status_id') @@ -263,7 +284,7 @@ end def done_ratio - if Issue.use_status_for_done_ratio? && status && status.default_done_ratio? + if Issue.use_status_for_done_ratio? && status && status.default_done_ratio status.default_done_ratio else read_attribute(:done_ratio) @@ -326,7 +347,7 @@ # Set the done_ratio using the status if that setting is set. This will keep the done_ratios # even if the user turns off the setting later def update_done_ratio_from_issue_status - if Issue.use_status_for_done_ratio? && status && status.default_done_ratio? + if Issue.use_status_for_done_ratio? && status && status.default_done_ratio self.done_ratio = status.default_done_ratio end end @@ -390,7 +411,9 @@ # Users the issue can be assigned to def assignable_users - project.assignable_users + users = project.assignable_users + users << author if author + users.uniq.sort end # Versions that the issue can be assigned to @@ -415,9 +438,10 @@ # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users - # Author and assignee are always notified unless they have been locked - notified << author if author && author.active? - notified << assigned_to if assigned_to && assigned_to.active? + # Author and assignee are always notified unless they have been + # locked or don't want to be notified + notified << author if author && author.active? && author.notify_about?(self) + notified << assigned_to if assigned_to && assigned_to.active? && assigned_to.notify_about?(self) notified.uniq! # Remove users that can not view the issue notified.reject! {|user| !visible?(user)} @@ -714,7 +738,7 @@ end # done ratio = weighted average ratio of leaves - unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio? + unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio leaves_count = p.leaves.count if leaves_count > 0 average = p.leaves.average(:estimated_hours).to_f
--- a/app/models/.svn/text-base/journal_observer.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/journal_observer.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,11 @@ class JournalObserver < ActiveRecord::Observer def after_create(journal) - Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') + if Setting.notified_events.include?('issue_updated') || + (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || + (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || + (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + Mailer.deliver_issue_edit(journal) + end end end
--- a/app/models/.svn/text-base/mail_handler.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/mail_handler.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,7 @@ class MailHandler < ActionMailer::Base include ActionView::Helpers::SanitizeHelper + include Redmine::I18n class UnauthorizedAction < StandardError; end class MissingInformation < StandardError; end @@ -116,36 +117,20 @@ # Creates a new issue def receive_issue project = target_project - tracker = (get_keyword(:tracker) && project.trackers.find_by_name(get_keyword(:tracker))) || project.trackers.find(:first) - category = (get_keyword(:category) && project.issue_categories.find_by_name(get_keyword(:category))) - priority = (get_keyword(:priority) && IssuePriority.find_by_name(get_keyword(:priority))) - status = (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status))) - assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true))) - due_date = get_keyword(:due_date, :override => true) - start_date = get_keyword(:start_date, :override => true) - # check permission unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issues, project) end - issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority, :due_date => due_date, :start_date => start_date, :assigned_to => assigned_to) - # check workflow - if status && issue.new_statuses_allowed_to(user).include?(status) - issue.status = status - end - issue.subject = email.subject.chomp[0,255] + issue = Issue.new(:author => user, :project => project) + issue.safe_attributes = issue_attributes_from_keywords(issue) + issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} + issue.subject = email.subject.to_s.chomp[0,255] if issue.subject.blank? issue.subject = '(no subject)' end - # custom fields - issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c| - if value = get_keyword(c.name, :override => true) - h[c.id] = value - end - h - end issue.description = cleaned_up_text_body + # add To and Cc as watchers before saving so the watchers can reply to Redmine add_watchers(issue) issue.save! @@ -154,41 +139,19 @@ issue end - def target_project - # TODO: other ways to specify project: - # * parse the email To field - # * specific project (eg. Setting.mail_handler_target_project) - target = Project.find_by_identifier(get_keyword(:project)) - raise MissingInformation.new('Unable to determine target project') if target.nil? - target - end - # Adds a note to an existing issue def receive_issue_reply(issue_id) - status = (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status))) - due_date = get_keyword(:due_date, :override => true) - start_date = get_keyword(:start_date, :override => true) - assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true))) - issue = Issue.find_by_id(issue_id) return unless issue # check permission unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) - raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project) end - - # add the note + journal = issue.init_journal(user, cleaned_up_text_body) + issue.safe_attributes = issue_attributes_from_keywords(issue) + issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} add_attachments(issue) - # check workflow - if status && issue.new_statuses_allowed_to(user).include?(status) - issue.status = status - end - issue.start_date = start_date if start_date - issue.due_date = due_date if due_date - issue.assigned_to = assigned_to if assigned_to - issue.save! logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info journal @@ -255,8 +218,8 @@ @keywords[attr] else @keywords[attr] = begin - if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '') - $1.strip + if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format])) + v elsif !@@handler_options[:issue][attr].blank? @@handler_options[:issue][attr] end @@ -264,6 +227,59 @@ end end + # Destructively extracts the value for +attr+ in +text+ + # Returns nil if no matching keyword found + def extract_keyword!(text, attr, format=nil) + keys = [attr.to_s.humanize] + if attr.is_a?(Symbol) + keys << l("field_#{attr}", :default => '', :locale => user.language) if user + keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) + end + keys.reject! {|k| k.blank?} + keys.collect! {|k| Regexp.escape(k)} + format ||= '.+' + text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '') + $2 && $2.strip + end + + def target_project + # TODO: other ways to specify project: + # * parse the email To field + # * specific project (eg. Setting.mail_handler_target_project) + target = Project.find_by_identifier(get_keyword(:project)) + raise MissingInformation.new('Unable to determine target project') if target.nil? + target + end + + # Returns a Hash of issue attributes extracted from keywords in the email body + def issue_attributes_from_keywords(issue) + assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) + assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) + + { + 'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id), + 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), + 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), + 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), + 'assigned_to_id' => assigned_to.try(:id), + 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), + 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), + 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), + 'estimated_hours' => get_keyword(:estimated_hours, :override => true), + 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') + }.delete_if {|k, v| v.blank? } + end + + # Returns a Hash of issue custom field values extracted from keywords in the email body + def custom_field_values_from_keywords(customized) + customized.custom_field_values.inject({}) do |h, v| + if value = get_keyword(v.custom_field.name, :override => true) + h[v.custom_field.id.to_s] = value + end + h + end + end + # Returns the text/plain part of the email # If not found (eg. HTML-only email), returns the body with tags removed def plain_text_body @@ -318,7 +334,7 @@ def cleanup_body(body) delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} unless delimiters.empty? - regex = Regexp.new("^(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE) + regex = Regexp.new("^[> ]*(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE) body = body.gsub(regex, '') end body.strip
--- a/app/models/.svn/text-base/mailer.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/mailer.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -178,9 +178,9 @@ message_id wiki_content recipients wiki_content.recipients cc(wiki_content.page.wiki.watcher_recipients - recipients) - subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}" + subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}" body :wiki_content => wiki_content, - :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title) + :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) render_multipart('wiki_content_added', body) end @@ -195,10 +195,10 @@ message_id wiki_content recipients wiki_content.recipients cc(wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients) - subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :page => wiki_content.page.pretty_title)}" + subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}" body :wiki_content => wiki_content, - :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title), - :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version) + :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title), + :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :project_id => wiki_content.project, :id => wiki_content.page.title, :version => wiki_content.version) render_multipart('wiki_content_updated', body) end
--- a/app/models/.svn/text-base/project.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/project.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,9 @@ STATUS_ACTIVE = 1 STATUS_ARCHIVED = 9 + # Maximum length for project identifiers + IDENTIFIER_MAX_LENGTH = 100 + # Specific overidden Activities has_many :time_entry_activities has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}" @@ -64,11 +67,11 @@ attr_protected :status, :enabled_module_names validates_presence_of :name, :identifier - validates_uniqueness_of :name, :identifier + validates_uniqueness_of :identifier validates_associated :repository, :wiki - validates_length_of :name, :maximum => 30 + validates_length_of :name, :maximum => 255 validates_length_of :homepage, :maximum => 255 - validates_length_of :identifier, :in => 1..20 + validates_length_of :identifier, :in => 1..IDENTIFIER_MAX_LENGTH # donwcase letters, digits, dashes but not digits only validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :if => Proc.new { |p| p.identifier_changed? } # reserved words @@ -220,6 +223,10 @@ self.status == STATUS_ACTIVE end + def archived? + self.status == STATUS_ARCHIVED + end + # Archives the project and its descendants def archive # Check that there is no issue of a non descendant project that is assigned @@ -382,12 +389,13 @@ # Returns the mail adresses of users that should be always notified on project events def recipients - members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail} + notified_users.collect {|user| user.mail} end # Returns the users that should be notified on project events def notified_users - members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user} + # TODO: User part should be extracted to User#notify_about? + members.select {|m| m.mail_notification? || m.user.mail_notification == 'all'}.collect {|m| m.user} end # Returns an array of all custom fields enabled for project issues @@ -564,6 +572,18 @@ return nil end end + + # Yields the given block for each project with its level in the tree + def self.project_tree(projects, &block) + ancestors = [] + projects.sort_by(&:lft).each do |project| + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + ancestors.pop + end + yield project, ancestors.size + ancestors << project + end + end private
--- a/app/models/.svn/text-base/query.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/query.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -196,10 +196,10 @@ @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty? - group_values = Group.all.collect {|g| [g.name, g.id] } + group_values = Group.all.collect {|g| [g.name, g.id.to_s] } @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty? - role_values = Role.givable.collect {|r| [r.name, r.id] } + role_values = Role.givable.collect {|r| [r.name, r.id.to_s] } @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? if User.current.logged? @@ -258,8 +258,10 @@ # Add multiple filters using +add_filter+ def add_filters(fields, operators, values) - fields.each do |field| - add_filter(field, operators[field], values[field]) + if fields.is_a?(Array) && operators.is_a?(Hash) && values.is_a?(Hash) + fields.each do |field| + add_filter(field, operators[field], values[field]) + end end end
--- a/app/models/.svn/text-base/time_entry.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/time_entry.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ acts_as_customizable acts_as_event :title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"}, - :url => Proc.new {|o| {:controller => 'timelog', :action => 'details', :project_id => o.project, :issue_id => o.issue}}, + :url => Proc.new {|o| {:controller => 'timelog', :action => 'index', :project_id => o.project, :issue_id => o.issue}}, :author => :user, :description => :comments
--- a/app/models/.svn/text-base/user.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/user.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -33,6 +33,15 @@ :username => '#{login}' } + MAIL_NOTIFICATION_OPTIONS = [ + [:all, :label_user_mail_option_all], + [:selected, :label_user_mail_option_selected], + [:none, :label_user_mail_option_none], + [:only_my_events, :label_user_mail_option_only_my_events], + [:only_assigned, :label_user_mail_option_only_assigned], + [:only_owner, :label_user_mail_option_only_owner] + ] + has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, :after_remove => Proc.new {|user, group| group.user_removed(user)} has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify @@ -65,7 +74,7 @@ validates_confirmation_of :password, :allow_nil => true def before_create - self.mail_notification = false + self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? true end @@ -250,6 +259,17 @@ notified_projects_ids end + # Only users that belong to more than 1 project can select projects for which they are notified + def valid_notification_options + # Note that @user.membership.size would fail since AR ignores + # :include association option when doing a count + if memberships.length < 1 + MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected} + else + MAIL_NOTIFICATION_OPTIONS + end + end + # Find a user account by matching the exact login and then a case-insensitive # version. Exact matches will be given priority. def self.find_by_login(login) @@ -324,23 +344,35 @@ !roles_for_project(project).detect {|role| role.member?}.nil? end - # Return true if the user is allowed to do the specified action on project - # action can be: + # Return true if the user is allowed to do the specified action on a specific context + # Action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') # * a permission Symbol (eg. :edit_project) - def allowed_to?(action, project, options={}) - if project + # Context can be: + # * a project : returns true if user is allowed to do the specified action on this project + # * a group of projects : returns true if user is allowed on every project + # * nil with options[:global] set : check if user has at least one role allowed for this action, + # or falls back to Non Member / Anonymous permissions depending if the user is logged + def allowed_to?(action, context, options={}) + if context && context.is_a?(Project) # No action allowed on archived projects - return false unless project.active? + return false unless context.active? # No action allowed on disabled modules - return false unless project.allows_to?(action) + return false unless context.allows_to?(action) # Admin users are authorized for anything else return true if admin? - roles = roles_for_project(project) + roles = roles_for_project(context) return false unless roles - roles.detect {|role| (project.is_public? || role.member?) && role.allowed_to?(action)} + roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)} + elsif context && context.is_a?(Array) + # Authorize if user is authorized on every element of the array + context.map do |project| + allowed_to?(action,project,options) + end.inject do |memo,allowed| + memo && allowed + end elsif options[:global] # Admin users are always authorized return true if admin? @@ -359,6 +391,41 @@ allowed_to?(action, nil, options.reverse_merge(:global => true)) end + # Utility method to help check if a user should be notified about an + # event. + # + # TODO: only supports Issue events currently + def notify_about?(object) + case mail_notification.to_sym + when :all + true + when :selected + # Handled by the Project + when :none + false + when :only_my_events + if object.is_a?(Issue) && (object.author == self || object.assigned_to == self) + true + else + false + end + when :only_assigned + if object.is_a?(Issue) && object.assigned_to == self + true + else + false + end + when :only_owner + if object.is_a?(Issue) && object.author == self + true + else + false + end + else + false + end + end + def self.current=(user) @current_user = user end
--- a/app/models/.svn/text-base/wiki_content.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/wiki_content.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ :description => :comments, :datetime => :updated_on, :type => 'wiki-page', - :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}} + :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}} acts_as_activity_provider :type => 'wiki_edits', :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
--- a/app/models/.svn/text-base/wiki_page.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/.svn/text-base/wiki_page.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"}, :description => :text, :datetime => :created_on, - :url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project, :page => o.title}} + :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}} acts_as_searchable :columns => ['title', 'text'], :include => [{:wiki => :project}, :content], @@ -139,7 +139,7 @@ parent_page = t.blank? ? nil : self.wiki.find_page(t) self.parent = parent_page end - + protected def validate
--- a/app/models/custom_value.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/custom_value.rb Fri Nov 19 13:24:41 2010 +0000 @@ -34,6 +34,10 @@ custom_field.editable? end + def visible? + custom_field.visible? + end + def required? custom_field.is_required? end
--- a/app/models/issue.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/issue.rb Fri Nov 19 13:24:41 2010 +0000 @@ -86,8 +86,8 @@ } before_create :default_assign - before_save :reschedule_following_issues, :close_duplicates, :update_done_ratio_from_issue_status - after_save :update_nested_set_attributes, :update_parent_attributes, :create_journal + before_save :close_duplicates, :update_done_ratio_from_issue_status + after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal after_destroy :destroy_children after_destroy :update_parent_attributes @@ -233,14 +233,35 @@ lock_version ) unless const_defined?(:SAFE_ATTRIBUTES) + SAFE_ATTRIBUTES_ON_TRANSITION = %w( + status_id + assigned_to_id + fixed_version_id + done_ratio + ) unless const_defined?(:SAFE_ATTRIBUTES_ON_TRANSITION) + # Safely sets attributes # Should be called from controllers instead of #attributes= # attr_accessible is too rough because we still want things like # Issue.new(:project => foo) to work # TODO: move workflow/permission checks from controllers to here def safe_attributes=(attrs, user=User.current) - return if attrs.nil? - attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} + return unless attrs.is_a?(Hash) + + # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed + if new_record? || user.allowed_to?(:edit_issues, project) + attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES.include?(k)} + elsif new_statuses_allowed_to(user).any? + attrs = attrs.reject {|k,v| !SAFE_ATTRIBUTES_ON_TRANSITION.include?(k)} + else + return + end + + # Tracker must be set before since new_statuses_allowed_to depends on it. + if t = attrs.delete('tracker_id') + self.tracker_id = t + end + if attrs['status_id'] unless new_statuses_allowed_to(user).collect(&:id).include?(attrs['status_id'].to_i) attrs.delete('status_id') @@ -263,7 +284,7 @@ end def done_ratio - if Issue.use_status_for_done_ratio? && status && status.default_done_ratio? + if Issue.use_status_for_done_ratio? && status && status.default_done_ratio status.default_done_ratio else read_attribute(:done_ratio) @@ -326,7 +347,7 @@ # Set the done_ratio using the status if that setting is set. This will keep the done_ratios # even if the user turns off the setting later def update_done_ratio_from_issue_status - if Issue.use_status_for_done_ratio? && status && status.default_done_ratio? + if Issue.use_status_for_done_ratio? && status && status.default_done_ratio self.done_ratio = status.default_done_ratio end end @@ -390,7 +411,9 @@ # Users the issue can be assigned to def assignable_users - project.assignable_users + users = project.assignable_users + users << author if author + users.uniq.sort end # Versions that the issue can be assigned to @@ -415,9 +438,10 @@ # Returns the mail adresses of users that should be notified def recipients notified = project.notified_users - # Author and assignee are always notified unless they have been locked - notified << author if author && author.active? - notified << assigned_to if assigned_to && assigned_to.active? + # Author and assignee are always notified unless they have been + # locked or don't want to be notified + notified << author if author && author.active? && author.notify_about?(self) + notified << assigned_to if assigned_to && assigned_to.active? && assigned_to.notify_about?(self) notified.uniq! # Remove users that can not view the issue notified.reject! {|user| !visible?(user)} @@ -714,7 +738,7 @@ end # done ratio = weighted average ratio of leaves - unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio? + unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio leaves_count = p.leaves.count if leaves_count > 0 average = p.leaves.average(:estimated_hours).to_f
--- a/app/models/journal_observer.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/journal_observer.rb Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,11 @@ class JournalObserver < ActiveRecord::Observer def after_create(journal) - Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') + if Setting.notified_events.include?('issue_updated') || + (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) || + (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) || + (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?) + Mailer.deliver_issue_edit(journal) + end end end
--- a/app/models/mail_handler.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/mail_handler.rb Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,7 @@ class MailHandler < ActionMailer::Base include ActionView::Helpers::SanitizeHelper + include Redmine::I18n class UnauthorizedAction < StandardError; end class MissingInformation < StandardError; end @@ -116,36 +117,20 @@ # Creates a new issue def receive_issue project = target_project - tracker = (get_keyword(:tracker) && project.trackers.find_by_name(get_keyword(:tracker))) || project.trackers.find(:first) - category = (get_keyword(:category) && project.issue_categories.find_by_name(get_keyword(:category))) - priority = (get_keyword(:priority) && IssuePriority.find_by_name(get_keyword(:priority))) - status = (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status))) - assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true))) - due_date = get_keyword(:due_date, :override => true) - start_date = get_keyword(:start_date, :override => true) - # check permission unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issues, project) end - issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority, :due_date => due_date, :start_date => start_date, :assigned_to => assigned_to) - # check workflow - if status && issue.new_statuses_allowed_to(user).include?(status) - issue.status = status - end - issue.subject = email.subject.chomp[0,255] + issue = Issue.new(:author => user, :project => project) + issue.safe_attributes = issue_attributes_from_keywords(issue) + issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} + issue.subject = email.subject.to_s.chomp[0,255] if issue.subject.blank? issue.subject = '(no subject)' end - # custom fields - issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c| - if value = get_keyword(c.name, :override => true) - h[c.id] = value - end - h - end issue.description = cleaned_up_text_body + # add To and Cc as watchers before saving so the watchers can reply to Redmine add_watchers(issue) issue.save! @@ -154,41 +139,19 @@ issue end - def target_project - # TODO: other ways to specify project: - # * parse the email To field - # * specific project (eg. Setting.mail_handler_target_project) - target = Project.find_by_identifier(get_keyword(:project)) - raise MissingInformation.new('Unable to determine target project') if target.nil? - target - end - # Adds a note to an existing issue def receive_issue_reply(issue_id) - status = (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status))) - due_date = get_keyword(:due_date, :override => true) - start_date = get_keyword(:start_date, :override => true) - assigned_to = (get_keyword(:assigned_to, :override => true) && find_user_from_keyword(get_keyword(:assigned_to, :override => true))) - issue = Issue.find_by_id(issue_id) return unless issue # check permission unless @@handler_options[:no_permission_check] raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) - raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project) end - - # add the note + journal = issue.init_journal(user, cleaned_up_text_body) + issue.safe_attributes = issue_attributes_from_keywords(issue) + issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} add_attachments(issue) - # check workflow - if status && issue.new_statuses_allowed_to(user).include?(status) - issue.status = status - end - issue.start_date = start_date if start_date - issue.due_date = due_date if due_date - issue.assigned_to = assigned_to if assigned_to - issue.save! logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info journal @@ -255,8 +218,8 @@ @keywords[attr] else @keywords[attr] = begin - if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '') - $1.strip + if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format])) + v elsif !@@handler_options[:issue][attr].blank? @@handler_options[:issue][attr] end @@ -264,6 +227,59 @@ end end + # Destructively extracts the value for +attr+ in +text+ + # Returns nil if no matching keyword found + def extract_keyword!(text, attr, format=nil) + keys = [attr.to_s.humanize] + if attr.is_a?(Symbol) + keys << l("field_#{attr}", :default => '', :locale => user.language) if user + keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) + end + keys.reject! {|k| k.blank?} + keys.collect! {|k| Regexp.escape(k)} + format ||= '.+' + text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '') + $2 && $2.strip + end + + def target_project + # TODO: other ways to specify project: + # * parse the email To field + # * specific project (eg. Setting.mail_handler_target_project) + target = Project.find_by_identifier(get_keyword(:project)) + raise MissingInformation.new('Unable to determine target project') if target.nil? + target + end + + # Returns a Hash of issue attributes extracted from keywords in the email body + def issue_attributes_from_keywords(issue) + assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) + assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) + + { + 'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id), + 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), + 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), + 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), + 'assigned_to_id' => assigned_to.try(:id), + 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), + 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), + 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), + 'estimated_hours' => get_keyword(:estimated_hours, :override => true), + 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') + }.delete_if {|k, v| v.blank? } + end + + # Returns a Hash of issue custom field values extracted from keywords in the email body + def custom_field_values_from_keywords(customized) + customized.custom_field_values.inject({}) do |h, v| + if value = get_keyword(v.custom_field.name, :override => true) + h[v.custom_field.id.to_s] = value + end + h + end + end + # Returns the text/plain part of the email # If not found (eg. HTML-only email), returns the body with tags removed def plain_text_body @@ -318,7 +334,7 @@ def cleanup_body(body) delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} unless delimiters.empty? - regex = Regexp.new("^(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE) + regex = Regexp.new("^[> ]*(#{ delimiters.join('|') })\s*[\r\n].*", Regexp::MULTILINE) body = body.gsub(regex, '') end body.strip
--- a/app/models/mailer.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/mailer.rb Fri Nov 19 13:24:41 2010 +0000 @@ -178,9 +178,9 @@ message_id wiki_content recipients wiki_content.recipients cc(wiki_content.page.wiki.watcher_recipients - recipients) - subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}" + subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :id => wiki_content.page.pretty_title)}" body :wiki_content => wiki_content, - :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title) + :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title) render_multipart('wiki_content_added', body) end @@ -195,10 +195,10 @@ message_id wiki_content recipients wiki_content.recipients cc(wiki_content.page.wiki.watcher_recipients + wiki_content.page.watcher_recipients - recipients) - subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :page => wiki_content.page.pretty_title)}" + subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_updated, :id => wiki_content.page.pretty_title)}" body :wiki_content => wiki_content, - :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title), - :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version) + :wiki_content_url => url_for(:controller => 'wiki', :action => 'show', :project_id => wiki_content.project, :id => wiki_content.page.title), + :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :project_id => wiki_content.project, :id => wiki_content.page.title, :version => wiki_content.version) render_multipart('wiki_content_updated', body) end
--- a/app/models/project.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/project.rb Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,9 @@ STATUS_ACTIVE = 1 STATUS_ARCHIVED = 9 + # Maximum length for project identifiers + IDENTIFIER_MAX_LENGTH = 100 + # Specific overidden Activities has_many :time_entry_activities has_many :members, :include => [:user, :roles], :conditions => "#{User.table_name}.type='User' AND #{User.table_name}.status=#{User::STATUS_ACTIVE}" @@ -64,11 +67,11 @@ attr_protected :status, :enabled_module_names validates_presence_of :name, :identifier - validates_uniqueness_of :name, :identifier + validates_uniqueness_of :identifier validates_associated :repository, :wiki - validates_length_of :name, :maximum => 30 + validates_length_of :name, :maximum => 255 validates_length_of :homepage, :maximum => 255 - validates_length_of :identifier, :in => 1..20 + validates_length_of :identifier, :in => 1..IDENTIFIER_MAX_LENGTH # donwcase letters, digits, dashes but not digits only validates_format_of :identifier, :with => /^(?!\d+$)[a-z0-9\-]*$/, :if => Proc.new { |p| p.identifier_changed? } # reserved words @@ -220,6 +223,10 @@ self.status == STATUS_ACTIVE end + def archived? + self.status == STATUS_ARCHIVED + end + # Archives the project and its descendants def archive # Check that there is no issue of a non descendant project that is assigned @@ -382,12 +389,13 @@ # Returns the mail adresses of users that should be always notified on project events def recipients - members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user.mail} + notified_users.collect {|user| user.mail} end # Returns the users that should be notified on project events def notified_users - members.select {|m| m.mail_notification? || m.user.mail_notification?}.collect {|m| m.user} + # TODO: User part should be extracted to User#notify_about? + members.select {|m| m.mail_notification? || m.user.mail_notification == 'all'}.collect {|m| m.user} end # Returns an array of all custom fields enabled for project issues @@ -564,6 +572,18 @@ return nil end end + + # Yields the given block for each project with its level in the tree + def self.project_tree(projects, &block) + ancestors = [] + projects.sort_by(&:lft).each do |project| + while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) + ancestors.pop + end + yield project, ancestors.size + ancestors << project + end + end private
--- a/app/models/query.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/query.rb Fri Nov 19 13:24:41 2010 +0000 @@ -196,10 +196,10 @@ @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty? @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty? - group_values = Group.all.collect {|g| [g.name, g.id] } + group_values = Group.all.collect {|g| [g.name, g.id.to_s] } @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty? - role_values = Role.givable.collect {|r| [r.name, r.id] } + role_values = Role.givable.collect {|r| [r.name, r.id.to_s] } @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? if User.current.logged? @@ -258,8 +258,10 @@ # Add multiple filters using +add_filter+ def add_filters(fields, operators, values) - fields.each do |field| - add_filter(field, operators[field], values[field]) + if fields.is_a?(Array) && operators.is_a?(Hash) && values.is_a?(Hash) + fields.each do |field| + add_filter(field, operators[field], values[field]) + end end end
--- a/app/models/repository/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/repository/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/models/repository http://redmine.rubyforge.org/svn
--- a/app/models/time_entry.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/time_entry.rb Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ acts_as_customizable acts_as_event :title => Proc.new {|o| "#{l_hours(o.hours)} (#{(o.issue || o.project).event_title})"}, - :url => Proc.new {|o| {:controller => 'timelog', :action => 'details', :project_id => o.project, :issue_id => o.issue}}, + :url => Proc.new {|o| {:controller => 'timelog', :action => 'index', :project_id => o.project, :issue_id => o.issue}}, :author => :user, :description => :comments
--- a/app/models/user.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/user.rb Fri Nov 19 13:24:41 2010 +0000 @@ -33,6 +33,15 @@ :username => '#{login}' } + MAIL_NOTIFICATION_OPTIONS = [ + [:all, :label_user_mail_option_all], + [:selected, :label_user_mail_option_selected], + [:none, :label_user_mail_option_none], + [:only_my_events, :label_user_mail_option_only_my_events], + [:only_assigned, :label_user_mail_option_only_assigned], + [:only_owner, :label_user_mail_option_only_owner] + ] + has_and_belongs_to_many :groups, :after_add => Proc.new {|user, group| group.user_added(user)}, :after_remove => Proc.new {|user, group| group.user_removed(user)} has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify @@ -65,7 +74,7 @@ validates_confirmation_of :password, :allow_nil => true def before_create - self.mail_notification = false + self.mail_notification = Setting.default_notification_option if self.mail_notification.blank? true end @@ -250,6 +259,17 @@ notified_projects_ids end + # Only users that belong to more than 1 project can select projects for which they are notified + def valid_notification_options + # Note that @user.membership.size would fail since AR ignores + # :include association option when doing a count + if memberships.length < 1 + MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == :selected} + else + MAIL_NOTIFICATION_OPTIONS + end + end + # Find a user account by matching the exact login and then a case-insensitive # version. Exact matches will be given priority. def self.find_by_login(login) @@ -324,23 +344,35 @@ !roles_for_project(project).detect {|role| role.member?}.nil? end - # Return true if the user is allowed to do the specified action on project - # action can be: + # Return true if the user is allowed to do the specified action on a specific context + # Action can be: # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit') # * a permission Symbol (eg. :edit_project) - def allowed_to?(action, project, options={}) - if project + # Context can be: + # * a project : returns true if user is allowed to do the specified action on this project + # * a group of projects : returns true if user is allowed on every project + # * nil with options[:global] set : check if user has at least one role allowed for this action, + # or falls back to Non Member / Anonymous permissions depending if the user is logged + def allowed_to?(action, context, options={}) + if context && context.is_a?(Project) # No action allowed on archived projects - return false unless project.active? + return false unless context.active? # No action allowed on disabled modules - return false unless project.allows_to?(action) + return false unless context.allows_to?(action) # Admin users are authorized for anything else return true if admin? - roles = roles_for_project(project) + roles = roles_for_project(context) return false unless roles - roles.detect {|role| (project.is_public? || role.member?) && role.allowed_to?(action)} + roles.detect {|role| (context.is_public? || role.member?) && role.allowed_to?(action)} + elsif context && context.is_a?(Array) + # Authorize if user is authorized on every element of the array + context.map do |project| + allowed_to?(action,project,options) + end.inject do |memo,allowed| + memo && allowed + end elsif options[:global] # Admin users are always authorized return true if admin? @@ -359,6 +391,41 @@ allowed_to?(action, nil, options.reverse_merge(:global => true)) end + # Utility method to help check if a user should be notified about an + # event. + # + # TODO: only supports Issue events currently + def notify_about?(object) + case mail_notification.to_sym + when :all + true + when :selected + # Handled by the Project + when :none + false + when :only_my_events + if object.is_a?(Issue) && (object.author == self || object.assigned_to == self) + true + else + false + end + when :only_assigned + if object.is_a?(Issue) && object.assigned_to == self + true + else + false + end + when :only_owner + if object.is_a?(Issue) && object.author == self + true + else + false + end + else + false + end + end + def self.current=(user) @current_user = user end
--- a/app/models/wiki_content.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/wiki_content.rb Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ :description => :comments, :datetime => :updated_on, :type => 'wiki-page', - :url => Proc.new {|o| {:controller => 'wiki', :id => o.page.wiki.project_id, :page => o.page.title, :version => o.version}} + :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.page.wiki.project, :id => o.page.title, :version => o.version}} acts_as_activity_provider :type => 'wiki_edits', :timestamp => "#{WikiContent.versioned_table_name}.updated_on",
--- a/app/models/wiki_page.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/models/wiki_page.rb Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ acts_as_event :title => Proc.new {|o| "#{l(:label_wiki)}: #{o.title}"}, :description => :text, :datetime => :created_on, - :url => Proc.new {|o| {:controller => 'wiki', :id => o.wiki.project, :page => o.title}} + :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}} acts_as_searchable :columns => ['title', 'text'], :include => [{:wiki => :project}, :content], @@ -139,7 +139,7 @@ parent_page = t.blank? ? nil : self.wiki.find_page(t) self.parent = parent_page end - + protected def validate
--- a/app/sweepers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/sweepers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/sweepers http://redmine.rubyforge.org/svn
--- a/app/views/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 34 -/svn/!svn/ver/4172/trunk/app/views +/svn/!svn/ver/4409/trunk/app/views END
--- a/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-16T19:49:08.085592Z +4409 +jplang @@ -50,6 +50,9 @@ workflows dir +time_entry_reports +dir + reports dir @@ -74,13 +77,13 @@ files dir -previews +ldap_auth_sources dir auth_sources dir -ldap_auth_sources +previews dir search @@ -89,10 +92,10 @@ messages dir -versions +issue_relations dir -issue_relations +versions dir mailer
--- a/app/views/account/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/account/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/account http://redmine.rubyforge.org/svn
--- a/app/views/activities/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/activities/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/activities http://redmine.rubyforge.org/svn
--- a/app/views/admin/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/admin/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/4080/trunk/app/views/admin +/svn/!svn/ver/4271/trunk/app/views/admin END info.rhtml K 25 @@ -37,5 +37,5 @@ K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/4080/trunk/app/views/admin/projects.rhtml +/svn/!svn/ver/4271/trunk/app/views/admin/projects.rhtml END
--- a/app/views/admin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/admin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/admin http://redmine.rubyforge.org/svn -2010-09-10T23:07:10.817821Z -4080 -edavis10 +2010-10-22T15:11:04.321155Z +4271 +jplang @@ -202,11 +202,11 @@ -2010-09-24T12:48:28.359820Z -5ed19629dda93ba07ab4e356099d19c4 -2010-09-10T23:07:10.817821Z -4080 -edavis10 +2010-11-19T13:04:49.448967Z +9aaefdc17951db18479f38fb0db73ea7 +2010-10-22T15:11:04.321155Z +4271 +jplang has-props @@ -228,5 +228,5 @@ -2198 +2136
--- a/app/views/admin/.svn/text-base/projects.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/admin/.svn/text-base/projects.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -19,7 +19,6 @@ <table class="list"> <thead><tr> <th><%=l(:label_project)%></th> - <th><%=l(:field_description)%></th> <th><%=l(:field_is_public)%></th> <th><%=l(:field_created_on)%></th> <th></th> @@ -27,8 +26,7 @@ <tbody> <% project_tree(@projects) do |project, level| %> <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> - <td class="name"><%= link_to_project(project, :action => 'settings') %></td> - <td><%= textilizable project.short_description, :project => project %></td> + <td class="name"><span><%= link_to_project(project, {:action => 'settings'}, :title => project.short_description) %></span></td> <td align="center"><%= checked_image project.is_public? %></td> <td align="center"><%= format_date(project.created_on) %></td> <td class="buttons">
--- a/app/views/admin/projects.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/admin/projects.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -19,7 +19,6 @@ <table class="list"> <thead><tr> <th><%=l(:label_project)%></th> - <th><%=l(:field_description)%></th> <th><%=l(:field_is_public)%></th> <th><%=l(:field_created_on)%></th> <th></th> @@ -27,8 +26,7 @@ <tbody> <% project_tree(@projects) do |project, level| %> <tr class="<%= cycle("odd", "even") %> <%= project.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> - <td class="name"><%= link_to_project(project, :action => 'settings') %></td> - <td><%= textilizable project.short_description, :project => project %></td> + <td class="name"><span><%= link_to_project(project, {:action => 'settings'}, :title => project.short_description) %></span></td> <td align="center"><%= checked_image project.is_public? %></td> <td align="center"><%= format_date(project.created_on) %></td> <td class="buttons">
--- a/app/views/attachments/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/attachments/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/attachments http://redmine.rubyforge.org/svn
--- a/app/views/auth_sources/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/auth_sources/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/auth_sources http://redmine.rubyforge.org/svn
--- a/app/views/auto_completes/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/auto_completes/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/auto_completes http://redmine.rubyforge.org/svn
--- a/app/views/boards/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/boards/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/boards http://redmine.rubyforge.org/svn
--- a/app/views/calendars/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/calendars/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4045/trunk/app/views/calendars +/svn/!svn/ver/4238/trunk/app/views/calendars END show.html.erb K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/4045/trunk/app/views/calendars/show.html.erb +/svn/!svn/ver/4238/trunk/app/views/calendars/show.html.erb END
--- a/app/views/calendars/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/calendars/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/calendars http://redmine.rubyforge.org/svn -2010-08-26T16:37:21.560510Z -4045 -edavis10 +2010-10-07T15:26:53.500793Z +4238 +winterheart @@ -32,11 +32,11 @@ -2010-09-24T12:48:28.963902Z -a8b2469aff09bc51d836f40717281a44 -2010-08-26T16:37:21.560510Z -4045 -edavis10 +2010-11-19T13:04:49.472856Z +d47ece5d0e0ff017f3f1b5ce4b776ba0 +2010-10-07T15:26:53.500793Z +4238 +winterheart has-props @@ -58,5 +58,5 @@ -1880 +1946
--- a/app/views/calendars/.svn/text-base/show.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/calendars/.svn/text-base/show.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -26,7 +26,8 @@ }, :class => 'icon icon-checked' %> <%= link_to_remote l(:button_clear), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, + { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, + :method => :put, :update => "content", }, :class => 'icon icon-reload' if @query.new_record? %> </p> @@ -37,9 +38,9 @@ <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %> <p class="legend cal"> - <span class="starting"><%= l(:text_tip_task_begin_day) %></span> - <span class="ending"><%= l(:text_tip_task_end_day) %></span> - <span class="starting ending"><%= l(:text_tip_task_begin_end_day) %></span> + <span class="starting"><%= l(:text_tip_issue_begin_day) %></span> + <span class="ending"><%= l(:text_tip_issue_end_day) %></span> + <span class="starting ending"><%= l(:text_tip_issue_begin_end_day) %></span> </p> <% end %>
--- a/app/views/calendars/show.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/calendars/show.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -26,7 +26,8 @@ }, :class => 'icon icon-checked' %> <%= link_to_remote l(:button_clear), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, + { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, + :method => :put, :update => "content", }, :class => 'icon icon-reload' if @query.new_record? %> </p> @@ -37,9 +38,9 @@ <%= render :partial => 'common/calendar', :locals => {:calendar => @calendar} %> <p class="legend cal"> - <span class="starting"><%= l(:text_tip_task_begin_day) %></span> - <span class="ending"><%= l(:text_tip_task_end_day) %></span> - <span class="starting ending"><%= l(:text_tip_task_begin_end_day) %></span> + <span class="starting"><%= l(:text_tip_issue_begin_day) %></span> + <span class="ending"><%= l(:text_tip_issue_end_day) %></span> + <span class="starting ending"><%= l(:text_tip_issue_begin_end_day) %></span> </p> <% end %>
--- a/app/views/common/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/common/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/3790/trunk/app/views/common +/svn/!svn/ver/4286/trunk/app/views/common END _file.rhtml K 25 @@ -15,24 +15,18 @@ V 56 /svn/!svn/ver/2768/trunk/app/views/common/feed.atom.rxml END +error.html.erb +K 25 +svn:wc:ra_dav:version-url +V 56 +/svn/!svn/ver/4286/trunk/app/views/common/error.html.erb +END _preview.rhtml K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/1699/trunk/app/views/common/_preview.rhtml END -403.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/1032/trunk/app/views/common/403.rhtml -END -404.rhtml -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/1032/trunk/app/views/common/404.rhtml -END _diff.rhtml K 25 svn:wc:ra_dav:version-url
--- a/app/views/common/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/common/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/common http://redmine.rubyforge.org/svn -2010-06-19T22:52:15.523619Z -3790 -edavis10 +2010-10-23T11:07:04.019894Z +4286 +jplang @@ -94,6 +94,40 @@ 1410 +error.html.erb +file + + + + +2010-11-19T13:04:49.456921Z +882dace2c9ea129616067a2052cebef4 +2010-10-23T11:07:04.019894Z +4286 +jplang + + + + + + + + + + + + + + + + + + + + + +156 + _preview.rhtml file @@ -128,74 +162,6 @@ 160 -403.rhtml -file - - - - -2010-09-23T14:37:44.523788Z -6d702bd53ba3e3fb3b1849b20ea05932 -2008-01-02T22:41:53.166620Z -1032 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -130 - -404.rhtml -file - - - - -2010-09-23T14:37:44.523788Z -c6f0413a62e887c7638111e882e33d20 -2008-01-02T22:41:53.166620Z -1032 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -130 - _diff.rhtml file
--- a/app/views/common/.svn/prop-base/403.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/common/.svn/prop-base/404.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/common/.svn/text-base/403.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -<h2>403</h2> - -<p><%= l(:notice_not_authorized) %></p> -<p><a href="javascript:history.back()">Back</a></p> - -<% html_title '403' %>
--- a/app/views/common/.svn/text-base/404.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -<h2>404</h2> - -<p><%= l(:notice_file_not_found) %></p> -<p><a href="javascript:history.back()">Back</a></p> - -<% html_title '404' %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/common/.svn/text-base/error.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,6 @@ +<h2><%=h @status %></h2> + +<p id="errorExplanation"><%=h @message %></p> +<p><a href="javascript:history.back()">Back</a></p> + +<% html_title @status %>
--- a/app/views/common/403.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -<h2>403</h2> - -<p><%= l(:notice_not_authorized) %></p> -<p><a href="javascript:history.back()">Back</a></p> - -<% html_title '403' %>
--- a/app/views/common/404.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -<h2>404</h2> - -<p><%= l(:notice_file_not_found) %></p> -<p><a href="javascript:history.back()">Back</a></p> - -<% html_title '404' %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/common/error.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,6 @@ +<h2><%=h @status %></h2> + +<p id="errorExplanation"><%=h @message %></p> +<p><a href="javascript:history.back()">Back</a></p> + +<% html_title @status %>
--- a/app/views/context_menus/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/context_menus/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/4059/trunk/app/views/context_menus +/svn/!svn/ver/4409/trunk/app/views/context_menus END issues.html.erb K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/4059/trunk/app/views/context_menus/issues.html.erb +/svn/!svn/ver/4409/trunk/app/views/context_menus/issues.html.erb END
--- a/app/views/context_menus/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/context_menus/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/context_menus http://redmine.rubyforge.org/svn -2010-09-03T21:43:07.906158Z -4059 -jbbarth +2010-11-16T19:49:08.085592Z +4409 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:26.291820Z -8cf639a9f676637f0825ccf06013495c -2010-09-03T21:43:07.906158Z -4059 -jbbarth +2010-11-19T13:04:47.016806Z +1a873e0d09f011b6b274e955460d35a1 +2010-11-16T19:49:08.085592Z +4409 +jplang has-props @@ -58,5 +58,5 @@ -6709 +6698
--- a/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/context_menus/.svn/text-base/issues.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -9,7 +9,7 @@ :class => 'icon-edit', :disabled => !@can[:edit] %></li> <% end %> - <% unless @allowed_statuses.empty? %> + <% if @allowed_statuses.present? %> <li class="folder"> <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a> <ul> @@ -33,7 +33,6 @@ </li> <% end %> - <% if @projects.size == 1 %> <li class="folder"> <a href="#" class="submenu"><%= l(:field_priority) %></a> <ul> @@ -43,8 +42,8 @@ <% end -%> </ul> </li> - <% end %> + <% #TODO: allow editing versions when multiple projects %> <% unless @project.nil? || @project.shared_versions.open.empty? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_fixed_version) %></a> @@ -58,7 +57,7 @@ </ul> </li> <% end %> - <% unless @assignables.nil? || @assignables.empty? -%> + <% if @assignables.present? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_assigned_to) %></a> <ul> @@ -85,7 +84,7 @@ </li> <% end -%> - <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %> + <% if Issue.use_field_for_done_ratio? %> <li class="folder"> <a href="#" class="submenu"><%= l(:field_done_ratio) %></a> <ul> @@ -99,7 +98,7 @@ <% if !@issue.nil? %> <% if @can[:log_time] -%> - <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, + <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon-time-add' %></li> <% end %> <% if User.current.logged? %> @@ -115,7 +114,7 @@ :class => 'icon-copy', :disabled => !@can[:move] %></li> <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)), :class => 'icon-move', :disabled => !@can[:move] %></li> - <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)}, + <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back}, :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li> <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
--- a/app/views/context_menus/issues.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/context_menus/issues.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -9,7 +9,7 @@ :class => 'icon-edit', :disabled => !@can[:edit] %></li> <% end %> - <% unless @allowed_statuses.empty? %> + <% if @allowed_statuses.present? %> <li class="folder"> <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a> <ul> @@ -33,7 +33,6 @@ </li> <% end %> - <% if @projects.size == 1 %> <li class="folder"> <a href="#" class="submenu"><%= l(:field_priority) %></a> <ul> @@ -43,8 +42,8 @@ <% end -%> </ul> </li> - <% end %> + <% #TODO: allow editing versions when multiple projects %> <% unless @project.nil? || @project.shared_versions.open.empty? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_fixed_version) %></a> @@ -58,7 +57,7 @@ </ul> </li> <% end %> - <% unless @assignables.nil? || @assignables.empty? -%> + <% if @assignables.present? -%> <li class="folder"> <a href="#" class="submenu"><%= l(:field_assigned_to) %></a> <ul> @@ -85,7 +84,7 @@ </li> <% end -%> - <% if Issue.use_field_for_done_ratio? && @projects.size == 1 %> + <% if Issue.use_field_for_done_ratio? %> <li class="folder"> <a href="#" class="submenu"><%= l(:field_done_ratio) %></a> <ul> @@ -99,7 +98,7 @@ <% if !@issue.nil? %> <% if @can[:log_time] -%> - <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, + <li><%= context_menu_link l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon-time-add' %></li> <% end %> <% if User.current.logged? %> @@ -115,7 +114,7 @@ :class => 'icon-copy', :disabled => !@can[:move] %></li> <li><%= context_menu_link l(:button_move), new_issue_move_path(:ids => @issues.collect(&:id)), :class => 'icon-move', :disabled => !@can[:move] %></li> - <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)}, + <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id), :back_url => @back}, :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li> <%= call_hook(:view_issues_context_menu_end, {:issues => @issues, :can => @can, :back => @back }) %>
--- a/app/views/custom_fields/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/custom_fields/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/3672/trunk/app/views/custom_fields +/svn/!svn/ver/4382/trunk/app/views/custom_fields END _form.rhtml K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/3510/trunk/app/views/custom_fields/_form.rhtml +/svn/!svn/ver/4382/trunk/app/views/custom_fields/_form.rhtml END edit.rhtml K 25
--- a/app/views/custom_fields/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/custom_fields/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/custom_fields http://redmine.rubyforge.org/svn -2010-04-16T15:33:49.924704Z -3672 -edavis10 +2010-11-07T14:15:01.891476Z +4382 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.527783Z -4a422eb0f307906a5015134deef6e66a -2010-02-28T10:55:24.417498Z -3510 +2010-11-19T13:04:48.192856Z +7c1accc3dd22bd872e2e9b6a7f02a5c2 +2010-11-07T14:15:01.891476Z +4382 jplang has-props @@ -58,7 +58,7 @@ -3882 +3960 edit.rhtml file
--- a/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/custom_fields/.svn/text-base/_form.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -86,10 +86,12 @@ <% when "UserCustomField" %> <p><%= f.check_box :is_required %></p> + <p><%= f.check_box :visible %></p> <p><%= f.check_box :editable %></p> <% when "ProjectCustomField" %> <p><%= f.check_box :is_required %></p> + <p><%= f.check_box :visible %></p> <p><%= f.check_box :searchable %></p> <% when "TimeEntryCustomField" %>
--- a/app/views/custom_fields/_form.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/custom_fields/_form.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -86,10 +86,12 @@ <% when "UserCustomField" %> <p><%= f.check_box :is_required %></p> + <p><%= f.check_box :visible %></p> <p><%= f.check_box :editable %></p> <% when "ProjectCustomField" %> <p><%= f.check_box :is_required %></p> + <p><%= f.check_box :visible %></p> <p><%= f.check_box :searchable %></p> <% when "TimeEntryCustomField" %>
--- a/app/views/documents/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/documents/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/documents http://redmine.rubyforge.org/svn
--- a/app/views/enumerations/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/enumerations/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/enumerations http://redmine.rubyforge.org/svn
--- a/app/views/files/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/files/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/4085/trunk/app/views/files +/svn/!svn/ver/4268/trunk/app/views/files END index.html.erb K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/4085/trunk/app/views/files/index.html.erb +/svn/!svn/ver/4268/trunk/app/views/files/index.html.erb END new.html.erb K 25
--- a/app/views/files/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/files/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/files http://redmine.rubyforge.org/svn -2010-09-14T16:24:07.840869Z -4085 -edavis10 +2010-10-22T14:45:02.987126Z +4268 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:27.722352Z -178f4ae5a5527ba5ab517e9e5685d670 -2010-09-14T16:24:07.840869Z -4085 -edavis10 +2010-11-19T13:04:49.392852Z +05986f09d13424caeb68601c7c9ff16b +2010-10-22T14:45:02.987126Z +4268 +jplang has-props @@ -58,7 +58,7 @@ -1838 +1878 new.html.erb file
--- a/app/views/files/.svn/text-base/index.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/files/.svn/text-base/index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to_if_authorized l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add' %> +<%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %> </div> <h2><%=l(:label_attachment_plural)%></h2>
--- a/app/views/files/index.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/files/index.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to_if_authorized l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add' %> +<%= link_to(l(:label_attachment_new), new_project_file_path(@project), :class => 'icon icon-add') if User.current.allowed_to?(:manage_files, @project) %> </div> <h2><%=l(:label_attachment_plural)%></h2>
--- a/app/views/gantts/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/gantts/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/4074/trunk/app/views/gantts +/svn/!svn/ver/4283/trunk/app/views/gantts END show.html.erb K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/4074/trunk/app/views/gantts/show.html.erb +/svn/!svn/ver/4283/trunk/app/views/gantts/show.html.erb END
--- a/app/views/gantts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/gantts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/gantts http://redmine.rubyforge.org/svn -2010-09-10T03:09:18.467829Z -4074 -edavis10 +2010-10-23T09:08:55.877887Z +4283 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:28.971835Z -821f1ef595aacb4d32e9a449742c4d67 -2010-09-10T03:09:18.467829Z -4074 -edavis10 +2010-11-19T13:04:49.480864Z +e0ed1c5fd05cd8c8f3f930c443564ebc +2010-10-23T09:08:55.877887Z +4283 +jplang has-props @@ -58,5 +58,5 @@ -6152 +6213
--- a/app/views/gantts/.svn/text-base/show.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/gantts/.svn/text-base/show.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -10,7 +10,7 @@ </div> </fieldset> -<p style="float:right;"> +<p class="contextual"> <%= gantt_zoom_link(@gantt, :in) %> <%= gantt_zoom_link(@gantt, :out) %> </p> @@ -29,7 +29,8 @@ }, :class => 'icon icon-checked' %> <%= link_to_remote l(:button_clear), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, + { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, + :method => :put, :update => "content", }, :class => 'icon icon-reload' if @query.new_record? %> </p>
--- a/app/views/gantts/show.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/gantts/show.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -10,7 +10,7 @@ </div> </fieldset> -<p style="float:right;"> +<p class="contextual"> <%= gantt_zoom_link(@gantt, :in) %> <%= gantt_zoom_link(@gantt, :out) %> </p> @@ -29,7 +29,8 @@ }, :class => 'icon icon-checked' %> <%= link_to_remote l(:button_clear), - { :url => { :set_filter => (@query.new_record? ? 1 : nil) }, + { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, + :method => :put, :update => "content", }, :class => 'icon icon-reload' if @query.new_record? %> </p>
--- a/app/views/groups/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/groups/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/3734/trunk/app/views/groups +/svn/!svn/ver/4312/trunk/app/views/groups END autocomplete_for_user.html.erb K 25 @@ -43,7 +43,7 @@ K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/3734/trunk/app/views/groups/_users.html.erb +/svn/!svn/ver/4312/trunk/app/views/groups/_users.html.erb END show.html.erb K 25
--- a/app/views/groups/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/groups/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/groups http://redmine.rubyforge.org/svn -2010-05-09T11:19:15.980195Z -3734 -jplang +2010-10-30T16:47:33.260585Z +4312 +jbbarth @@ -236,11 +236,11 @@ -2010-09-23T14:37:44.547775Z -eff82d54d4b9afef8e057bce83a79055 -2010-05-09T11:19:15.980195Z -3734 -jplang +2010-11-19T13:04:49.444940Z +7738dc0db4c4ad48e82613829c1e991a +2010-10-30T16:47:33.260585Z +4312 +jbbarth has-props @@ -262,7 +262,7 @@ -1572 +1625 show.html.erb file
--- a/app/views/groups/.svn/text-base/_users.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/groups/.svn/text-base/_users.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,7 @@ <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %> <fieldset><legend><%=l(:label_user_new)%></legend> - <p><%= text_field_tag 'user_search', nil %></p> + <p><%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p> <%= observe_field(:user_search, :frequency => 0.5, :update => :users,
--- a/app/views/groups/_users.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/groups/_users.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,7 @@ <% remote_form_for(:group, @group, :url => {:controller => 'groups', :action => 'add_users', :id => @group}, :method => :post) do |f| %> <fieldset><legend><%=l(:label_user_new)%></legend> - <p><%= text_field_tag 'user_search', nil %></p> + <p><%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p> <%= observe_field(:user_search, :frequency => 0.5, :update => :users,
--- a/app/views/issue_categories/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_categories/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3549/trunk/app/views/issue_categories +/svn/!svn/ver/4385/trunk/app/views/issue_categories END new.html.erb K 25 @@ -12,8 +12,8 @@ _form.rhtml K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/577/trunk/app/views/issue_categories/_form.rhtml +V 63 +/svn/!svn/ver/4385/trunk/app/views/issue_categories/_form.rhtml END edit.rhtml K 25
--- a/app/views/issue_categories/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_categories/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/issue_categories http://redmine.rubyforge.org/svn -2010-03-06T18:43:00.594668Z -3549 +2010-11-07T14:56:12.614499Z +4385 jplang @@ -66,10 +66,10 @@ -2010-09-23T14:37:44.551784Z -18eb89247454858a8ee0d9ffe9f0e8f6 -2007-06-29T17:21:37.739022Z -577 +2010-11-19T13:04:49.476971Z +e0d28729320423a7b8fcb6309b58de9a +2010-11-07T14:56:12.614499Z +4385 jplang has-props @@ -92,7 +92,7 @@ -235 +240 edit.rhtml file
--- a/app/views/issue_categories/.svn/text-base/_form.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_categories/.svn/text-base/_form.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -2,5 +2,5 @@ <div class="box"> <p><%= f.text_field :name, :size => 30, :required => true %></p> -<p><%= f.select :assigned_to_id, @project.users.collect{|u| [u.name, u.id]}, :include_blank => true %></p> +<p><%= f.select :assigned_to_id, @project.users.sort.collect{|u| [u.name, u.id]}, :include_blank => true %></p> </div>
--- a/app/views/issue_categories/_form.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_categories/_form.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -2,5 +2,5 @@ <div class="box"> <p><%= f.text_field :name, :size => 30, :required => true %></p> -<p><%= f.select :assigned_to_id, @project.users.collect{|u| [u.name, u.id]}, :include_blank => true %></p> +<p><%= f.select :assigned_to_id, @project.users.sort.collect{|u| [u.name, u.id]}, :include_blank => true %></p> </div>
--- a/app/views/issue_moves/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_moves/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/3936/trunk/app/views/issue_moves +/svn/!svn/ver/4292/trunk/app/views/issue_moves END new.rhtml K 25 svn:wc:ra_dav:version-url V 56 -/svn/!svn/ver/3936/trunk/app/views/issue_moves/new.rhtml +/svn/!svn/ver/4292/trunk/app/views/issue_moves/new.rhtml END
--- a/app/views/issue_moves/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_moves/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/issue_moves http://redmine.rubyforge.org/svn -2010-08-11T14:42:10.119704Z -3936 +2010-10-25T18:44:46.868009Z +4292 edavis10 @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.555783Z -75404bb56747fe4f58e979b3452af027 -2010-08-11T14:42:10.119704Z -3936 +2010-11-19T13:04:48.788846Z +1ad6c5f00ec9a5a7509125da416b0b07 +2010-10-25T18:44:46.868009Z +4292 edavis10 has-props @@ -58,5 +58,5 @@ -2304 +2701
--- a/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_moves/.svn/text-base/new.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -34,6 +34,11 @@ </p> <p> + <label><%= l(:field_priority) %></label> + <%= select_tag('priority_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(IssuePriority.all, :id, :name)) %> +</p> + +<p> <label><%= l(:field_start_date) %></label> <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %> </p> @@ -43,6 +48,11 @@ <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %> </p> +<fieldset><legend><%= l(:field_notes) %></legend> +<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %> +<%= wikitoolbar_for 'notes' %> +</fieldset> + <%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %> </div>
--- a/app/views/issue_moves/new.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_moves/new.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -34,6 +34,11 @@ </p> <p> + <label><%= l(:field_priority) %></label> + <%= select_tag('priority_id', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(IssuePriority.all, :id, :name)) %> +</p> + +<p> <label><%= l(:field_start_date) %></label> <%= text_field_tag 'start_date', '', :size => 10 %><%= calendar_for('start_date') %> </p> @@ -43,6 +48,11 @@ <%= text_field_tag 'due_date', '', :size => 10 %><%= calendar_for('due_date') %> </p> +<fieldset><legend><%= l(:field_notes) %></legend> +<%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit' %> +<%= wikitoolbar_for 'notes' %> +</fieldset> + <%= call_hook(:view_issues_move_bottom, :issues => @issues, :target_project => @target_project, :copy => !!@copy) %> </div>
--- a/app/views/issue_relations/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_relations/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/issue_relations http://redmine.rubyforge.org/svn
--- a/app/views/issue_statuses/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issue_statuses/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/issue_statuses http://redmine.rubyforge.org/svn
--- a/app/views/issues/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/4165/trunk/app/views/issues +/svn/!svn/ver/4311/trunk/app/views/issues END _relations.rhtml K 25 @@ -9,29 +9,29 @@ V 58 /svn/!svn/ver/4065/trunk/app/views/issues/_relations.rhtml END -_action_menu.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4105/trunk/app/views/issues/_action_menu.rhtml -END _history.rhtml K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/4062/trunk/app/views/issues/_history.rhtml END -_form.rhtml +_action_menu.rhtml K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/4165/trunk/app/views/issues/_form.rhtml +V 60 +/svn/!svn/ver/4258/trunk/app/views/issues/_action_menu.rhtml END bulk_edit.rhtml K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/4037/trunk/app/views/issues/bulk_edit.rhtml +/svn/!svn/ver/4242/trunk/app/views/issues/bulk_edit.rhtml +END +_form.rhtml +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/4311/trunk/app/views/issues/_form.rhtml END _form_update.rhtml K 25 @@ -73,7 +73,7 @@ K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/4014/trunk/app/views/issues/show.rhtml +/svn/!svn/ver/4264/trunk/app/views/issues/show.rhtml END _form_custom_fields.rhtml K 25 @@ -81,18 +81,18 @@ V 67 /svn/!svn/ver/2827/trunk/app/views/issues/_form_custom_fields.rhtml END +_list_simple.rhtml +K 25 +svn:wc:ra_dav:version-url +V 60 +/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml +END _changesets.rhtml K 25 svn:wc:ra_dav:version-url V 59 /svn/!svn/ver/3898/trunk/app/views/issues/_changesets.rhtml END -_list_simple.rhtml -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/3924/trunk/app/views/issues/_list_simple.rhtml -END _edit.rhtml K 25 svn:wc:ra_dav:version-url @@ -121,5 +121,5 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3946/trunk/app/views/issues/new.rhtml +/svn/!svn/ver/4311/trunk/app/views/issues/new.rhtml END
--- a/app/views/issues/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/issues http://redmine.rubyforge.org/svn -2010-09-20T18:50:09.519311Z -4165 -edavis10 +2010-10-30T16:15:31.867344Z +4311 +jbbarth @@ -60,6 +60,40 @@ 1816 +_action_menu.rhtml +file + + + + +2010-11-19T13:04:50.824922Z +74c6e939ebb113c49a367fff0f463f63 +2010-10-15T23:11:05.712143Z +4258 +edavis10 + + + + + + + + + + + + + + + + + + + + + +1285 + _history.rhtml file @@ -94,17 +128,18 @@ 859 -_action_menu.rhtml +_form.rhtml file -2010-09-24T12:48:29.596042Z -d39cbd8da926ba1c0912674a25e0bbae -2010-09-20T02:55:26.436604Z -4105 -edavis10 +2010-11-19T13:04:50.824922Z +7c3d2a41291eabbd1c7e28139be69e49 +2010-10-30T16:15:31.867344Z +4311 +jbbarth +has-props @@ -125,8 +160,7 @@ - -1228 +2033 bulk_edit.rhtml file @@ -134,11 +168,11 @@ -2010-09-23T14:37:44.571741Z -2118a1220c381352190040dc4b80e7d4 -2010-08-24T15:27:12.793586Z -4037 -edavis10 +2010-11-19T13:04:50.824922Z +b60c0aee0477249fc72d3206e30a8a07 +2010-10-08T03:09:51.863032Z +4242 +jbbarth has-props @@ -160,41 +194,7 @@ -3344 - -_form.rhtml -file - - - - -2010-09-24T12:48:29.596042Z -c95e7aec098a5197f699f7ff5d9cfea5 -2010-09-20T18:50:09.519311Z -4165 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -2034 +3438 _form_update.rhtml file @@ -406,11 +406,11 @@ -2010-09-23T14:37:44.575742Z -81fcfef3bb688e30577916647e05f02a -2010-08-22T19:12:21.015911Z -4014 -edavis10 +2010-11-19T13:04:50.824922Z +1f2adc49d35b7299cebfc9aff8152908 +2010-10-19T19:26:07.436051Z +4264 +jplang has-props @@ -432,7 +432,7 @@ -5394 +5399 _form_custom_fields.rhtml file @@ -468,6 +468,40 @@ 353 +_changesets.rhtml +file + + + + +2010-09-23T14:37:44.571741Z +4c03735a361a24cc60a70975502bace7 +2010-07-29T15:48:53.812065Z +3898 +winterheart +has-props + + + + + + + + + + + + + + + + + + + + +509 + _list_simple.rhtml file @@ -502,40 +536,6 @@ 989 -_changesets.rhtml -file - - - - -2010-09-23T14:37:44.571741Z -4c03735a361a24cc60a70975502bace7 -2010-07-29T15:48:53.812065Z -3898 -winterheart -has-props - - - - - - - - - - - - - - - - - - - - -509 - _edit.rhtml file @@ -678,11 +678,11 @@ -2010-09-23T14:37:44.575742Z -c1a3c605c3eed0e46487a4455acefad7 -2010-08-18T15:01:35.032314Z -3946 -edavis10 +2010-11-19T13:04:50.824922Z +9889d4cce0dfd6d224e85fc1f489c623 +2010-10-30T16:15:31.867344Z +4311 +jbbarth has-props @@ -704,5 +704,5 @@ -1118 +1154
--- a/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/text-base/_action_menu.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,10 +1,10 @@ <div class="contextual"> <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time-add' %> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %> <% replace_watcher ||= 'watcher' %> <%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %> <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %> -<%= link_to_if_authorized l(:button_copy), new_issue_move_path(:id => @issue, :copy_options => {:copy => 't'}), :class => 'icon icon-copy' %> -<%= link_to_if_authorized l(:button_move), new_issue_move_path(:id => @issue), :class => 'icon icon-move' %> +<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %> +<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %> <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %> </div>
--- a/app/views/issues/.svn/text-base/_form.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/text-base/_form.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -8,8 +8,8 @@ <p><%= f.text_field :subject, :size => 80, :required => true %></p> -<% unless (@issue.new_record? && @issue.parent_issue_id.nil?) || !User.current.allowed_to?(:manage_subtasks, @project) %> -<p><%= f.text_field :parent_issue_id, :size => 10 %></p> +<% if User.current.allowed_to?(:manage_subtasks, @project) %> +<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p> <div id="parent_issue_candidates" class="autocomplete"></div> <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> <% end %> @@ -26,11 +26,11 @@ </div> <% if @issue.new_record? %> -<p><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> +<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> <% end %> <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%> -<p><label><%= l(:label_issue_watchers) %></label> +<p id="watchers_form"><label><%= l(:label_issue_watchers) %></label> <% @issue.project.users.sort.each do |user| -%> <label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label> <% end -%>
--- a/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/text-base/bulk_edit.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -11,7 +11,7 @@ <div class="splitcontentleft"> <p> <label><%= l(:field_tracker) %></label> - <%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@project.trackers, :id, :name)) %> + <%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@trackers, :id, :name)) %> </p> <% if @available_statuses.any? %> <p> @@ -27,20 +27,25 @@ <label><%= l(:field_assigned_to) %></label> <%= select_tag('issue[assigned_to_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_nobody), :value => 'none') + - options_from_collection_for_select(@project.assignable_users, :id, :name)) %> + options_from_collection_for_select(@assignables, :id, :name)) %> </p> +<% if @project %> <p> <label><%= l(:field_category) %></label> <%= select_tag('issue[category_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + options_from_collection_for_select(@project.issue_categories, :id, :name)) %> </p> +<% end %> +<% #TODO: allow editing versions when multiple projects %> +<% if @project %> <p> <label><%= l(:field_fixed_version) %></label> <%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + version_options_for_select(@project.shared_versions.open)) %> </p> +<% end %> <% @custom_fields.each do |custom_field| %> <p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
--- a/app/views/issues/.svn/text-base/new.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/text-base/new.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ <h2><%=l(:label_issue_new)%></h2> <% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create', :project_id => @project}, - :html => {:multipart => true, :id => 'issue-form'} do |f| %> + :html => {:multipart => true, :id => 'issue-form', :class => 'tabular new-issue-form'} do |f| %> <%= error_messages_for 'issue' %> <div class="box"> <%= render :partial => 'issues/form', :locals => {:f => f} %>
--- a/app/views/issues/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -32,7 +32,7 @@ <th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h @issue.category ? @issue.category.name : "-" %></td> <% if User.current.allowed_to?(:view_time_entries, @project) %> <th class="spent-time"><%=l(:label_spent_time)%>:</th> - <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}) : "-" %></td> + <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td> <% end %> </tr> <tr> @@ -44,18 +44,19 @@ <%= render_custom_fields_rows(@issue) %> <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> </table> + +<% if @issue.description? || @issue.attachments.any? -%> <hr /> - <div class="contextual"> -<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') unless @issue.description.blank? %> +<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %> </div> -<p><strong><%=l(:field_description)%></strong></p> <div class="wiki"> <%= textilizable @issue, :description, :attachments => @issue.attachments %> </div> <%= link_to_attachments @issue %> +<% end -%> <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
--- a/app/views/issues/_action_menu.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/_action_menu.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,10 +1,10 @@ <div class="contextual"> <%= link_to_if_authorized(l(:button_update), {:controller => 'issues', :action => 'edit', :id => @issue }, :onclick => 'showAndScrollTo("update", "notes"); return false;', :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time-add' %> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :issue_id => @issue}, :class => 'icon icon-time-add' %> <% replace_watcher ||= 'watcher' %> <%= watcher_tag(@issue, User.current, {:id => replace_watcher, :replace => ['watcher','watcher2']}) %> <%= link_to_if_authorized l(:button_duplicate), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue }, :class => 'icon icon-duplicate' %> -<%= link_to_if_authorized l(:button_copy), new_issue_move_path(:id => @issue, :copy_options => {:copy => 't'}), :class => 'icon icon-copy' %> -<%= link_to_if_authorized l(:button_move), new_issue_move_path(:id => @issue), :class => 'icon icon-move' %> +<%= link_to_if_authorized l(:button_copy), {:controller => 'issue_moves', :action => 'new', :id => @issue, :copy_options => {:copy => 't'}}, :class => 'icon icon-copy' %> +<%= link_to_if_authorized l(:button_move), {:controller => 'issue_moves', :action => 'new', :id => @issue}, :class => 'icon icon-move' %> <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => (@issue.leaf? ? l(:text_are_you_sure) : l(:text_are_you_sure_with_children)), :method => :post, :class => 'icon icon-del' %> </div>
--- a/app/views/issues/_form.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/_form.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -8,8 +8,8 @@ <p><%= f.text_field :subject, :size => 80, :required => true %></p> -<% unless (@issue.new_record? && @issue.parent_issue_id.nil?) || !User.current.allowed_to?(:manage_subtasks, @project) %> -<p><%= f.text_field :parent_issue_id, :size => 10 %></p> +<% if User.current.allowed_to?(:manage_subtasks, @project) %> +<p id="parent_issue"><%= f.text_field :parent_issue_id, :size => 10 %></p> <div id="parent_issue_candidates" class="autocomplete"></div> <%= javascript_tag "observeParentIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %> <% end %> @@ -26,11 +26,11 @@ </div> <% if @issue.new_record? %> -<p><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> +<p id="attachments_form"><%= label_tag('attachments[1][file]', l(:label_attachment_plural))%><%= render :partial => 'attachments/form' %></p> <% end %> <% if @issue.new_record? && User.current.allowed_to?(:add_issue_watchers, @project) -%> -<p><label><%= l(:label_issue_watchers) %></label> +<p id="watchers_form"><label><%= l(:label_issue_watchers) %></label> <% @issue.project.users.sort.each do |user| -%> <label class="floating"><%= check_box_tag 'issue[watcher_user_ids][]', user.id, @issue.watched_by?(user) %> <%=h user %></label> <% end -%>
--- a/app/views/issues/bulk_edit.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/bulk_edit.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -11,7 +11,7 @@ <div class="splitcontentleft"> <p> <label><%= l(:field_tracker) %></label> - <%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@project.trackers, :id, :name)) %> + <%= select_tag('issue[tracker_id]', "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@trackers, :id, :name)) %> </p> <% if @available_statuses.any? %> <p> @@ -27,20 +27,25 @@ <label><%= l(:field_assigned_to) %></label> <%= select_tag('issue[assigned_to_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_nobody), :value => 'none') + - options_from_collection_for_select(@project.assignable_users, :id, :name)) %> + options_from_collection_for_select(@assignables, :id, :name)) %> </p> +<% if @project %> <p> <label><%= l(:field_category) %></label> <%= select_tag('issue[category_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + options_from_collection_for_select(@project.issue_categories, :id, :name)) %> </p> +<% end %> +<% #TODO: allow editing versions when multiple projects %> +<% if @project %> <p> <label><%= l(:field_fixed_version) %></label> <%= select_tag('issue[fixed_version_id]', content_tag('option', l(:label_no_change_option), :value => '') + content_tag('option', l(:label_none), :value => 'none') + version_options_for_select(@project.shared_versions.open)) %> </p> +<% end %> <% @custom_fields.each do |custom_field| %> <p><label><%= h(custom_field.name) %></label> <%= custom_field_tag_for_bulk_edit('issue', custom_field) %></p>
--- a/app/views/issues/new.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/new.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ <h2><%=l(:label_issue_new)%></h2> <% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create', :project_id => @project}, - :html => {:multipart => true, :id => 'issue-form'} do |f| %> + :html => {:multipart => true, :id => 'issue-form', :class => 'tabular new-issue-form'} do |f| %> <%= error_messages_for 'issue' %> <div class="box"> <%= render :partial => 'issues/form', :locals => {:f => f} %>
--- a/app/views/issues/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/issues/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -32,7 +32,7 @@ <th class="category"><%=l(:field_category)%>:</th><td class="category"><%=h @issue.category ? @issue.category.name : "-" %></td> <% if User.current.allowed_to?(:view_time_entries, @project) %> <th class="spent-time"><%=l(:label_spent_time)%>:</th> - <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue}) : "-" %></td> + <td class="spent-time"><%= @issue.spent_hours > 0 ? (link_to l_hours(@issue.spent_hours), {:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue}) : "-" %></td> <% end %> </tr> <tr> @@ -44,18 +44,19 @@ <%= render_custom_fields_rows(@issue) %> <%= call_hook(:view_issues_show_details_bottom, :issue => @issue) %> </table> + +<% if @issue.description? || @issue.attachments.any? -%> <hr /> - <div class="contextual"> -<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') unless @issue.description.blank? %> +<%= link_to_remote_if_authorized(l(:button_quote), { :url => {:action => 'reply', :id => @issue} }, :class => 'icon icon-comment') if @issue.description? %> </div> -<p><strong><%=l(:field_description)%></strong></p> <div class="wiki"> <%= textilizable @issue, :description, :attachments => @issue.attachments %> </div> <%= link_to_attachments @issue %> +<% end -%> <%= call_hook(:view_issues_show_description_bottom, :issue => @issue) %>
--- a/app/views/journals/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/journals/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/journals http://redmine.rubyforge.org/svn
--- a/app/views/layouts/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/4005/trunk/app/views/layouts +/svn/!svn/ver/4362/trunk/app/views/layouts END base.rhtml K 25 @@ -13,13 +13,13 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/2887/trunk/app/views/layouts/mailer.text.plain.erb +/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.plain.erb END mailer.text.html.erb K 25 svn:wc:ra_dav:version-url V 63 -/svn/!svn/ver/2887/trunk/app/views/layouts/mailer.text.html.erb +/svn/!svn/ver/4362/trunk/app/views/layouts/mailer.text.html.erb END admin.rhtml K 25
--- a/app/views/layouts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/layouts http://redmine.rubyforge.org/svn -2010-08-19T16:57:44.231882Z -4005 -winterheart +2010-11-02T19:00:36.834304Z +4362 +edavis10 @@ -66,10 +66,10 @@ -2010-09-23T14:37:44.583752Z -9631cc13a2471d1bdde52f4d8cee6f18 -2009-09-13T17:14:35.707881Z -2887 +2010-11-19T13:04:48.184855Z +490231bbc42932a0f9e1735a94d06260 +2010-11-02T19:00:36.834304Z +4362 edavis10 has-props @@ -92,7 +92,7 @@ -46 +75 mailer.text.html.erb file @@ -100,10 +100,10 @@ -2010-09-23T14:37:44.583752Z -bd4792711b615ebda6bb50b1f1158f0c -2009-09-13T17:14:35.707881Z -2887 +2010-11-19T13:04:48.184855Z +5073a425d4e7896c725996f9cf35f74b +2010-11-02T19:00:36.834304Z +4362 edavis10 has-props @@ -126,7 +126,7 @@ -646 +761 admin.rhtml file
--- a/app/views/layouts/.svn/text-base/mailer.text.html.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/.svn/text-base/mailer.text.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -25,6 +25,7 @@ </style> </head> <body> +<span class="header"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_header) %></span> <%= yield %> <hr /> <span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
--- a/app/views/layouts/.svn/text-base/mailer.text.plain.erb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/.svn/text-base/mailer.text.plain.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,4 @@ +<%= Setting.emails_header %> <%= yield %> -- <%= Setting.emails_footer %>
--- a/app/views/layouts/mailer.text.html.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/mailer.text.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -25,6 +25,7 @@ </style> </head> <body> +<span class="header"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_header) %></span> <%= yield %> <hr /> <span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
--- a/app/views/layouts/mailer.text.plain.erb Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/layouts/mailer.text.plain.erb Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,4 @@ +<%= Setting.emails_header %> <%= yield %> -- <%= Setting.emails_footer %>
--- a/app/views/ldap_auth_sources/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/ldap_auth_sources/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/ldap_auth_sources http://redmine.rubyforge.org/svn
--- a/app/views/mailer/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/3452/trunk/app/views/mailer +/svn/!svn/ver/4296/trunk/app/views/mailer END wiki_content_added.text.plain.rhtml K 25 svn:wc:ra_dav:version-url V 77 -/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml +/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml END account_activated.text.plain.rhtml K 25 @@ -79,7 +79,7 @@ K 25 svn:wc:ra_dav:version-url V 76 -/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_added.text.html.rhtml +/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.html.rhtml END test.text.plain.rhtml K 25 @@ -117,18 +117,18 @@ V 64 /svn/!svn/ver/3452/trunk/app/views/mailer/_issue_text_html.rhtml END +attachments_added.text.html.rhtml +K 25 +svn:wc:ra_dav:version-url +V 75 +/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml +END news_added.text.plain.rhtml K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/877/trunk/app/views/mailer/news_added.text.plain.rhtml END -attachments_added.text.html.rhtml -K 25 -svn:wc:ra_dav:version-url -V 75 -/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml -END news_added.text.html.rhtml K 25 svn:wc:ra_dav:version-url @@ -141,41 +141,35 @@ V 72 /svn/!svn/ver/877/trunk/app/views/mailer/document_added.text.plain.rhtml END +issue_add.text.plain.rhtml +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml +END document_added.text.html.rhtml K 25 svn:wc:ra_dav:version-url V 72 /svn/!svn/ver/3452/trunk/app/views/mailer/document_added.text.html.rhtml END -issue_add.text.plain.rhtml -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml -END account_information.text.plain.rhtml K 25 svn:wc:ra_dav:version-url V 77 /svn/!svn/ver/877/trunk/app/views/mailer/account_information.text.plain.rhtml END -message_posted.text.plain.rhtml -K 25 -svn:wc:ra_dav:version-url -V 72 -/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml -END account_information.text.html.rhtml K 25 svn:wc:ra_dav:version-url V 77 /svn/!svn/ver/3452/trunk/app/views/mailer/account_information.text.html.rhtml END -wiki_content_updated.text.plain.rhtml +message_posted.text.plain.rhtml K 25 svn:wc:ra_dav:version-url -V 79 -/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml +V 72 +/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml END lost_password.text.plain.rhtml K 25 @@ -183,11 +177,17 @@ V 72 /svn/!svn/ver/1683/trunk/app/views/mailer/lost_password.text.plain.rhtml END +wiki_content_updated.text.plain.rhtml +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml +END wiki_content_updated.text.html.rhtml K 25 svn:wc:ra_dav:version-url V 78 -/svn/!svn/ver/2749/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml +/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml END lost_password.text.html.rhtml K 25
--- a/app/views/mailer/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/mailer http://redmine.rubyforge.org/svn -2010-02-18T19:13:38.135448Z -3452 -jplang +2010-10-27T16:27:06.240747Z +4296 +edavis10 @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.607738Z -882607e6f82c2c4e7db74136ee974a5b -2009-05-17T09:55:13.601447Z -2749 -jplang +2010-11-19T13:04:49.420968Z +1729c597befa0c9411266eb9d1c5b577 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -58,7 +58,7 @@ -197 +195 account_activated.text.plain.rhtml file @@ -440,11 +440,11 @@ -2010-09-23T14:37:44.607738Z -21acbb8688d350bccc49d0b9f0fa7964 -2009-05-17T09:55:13.601447Z -2749 -jplang +2010-11-19T13:04:49.420968Z +37e05984b98664e4b97c26b51196f9ab +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -466,7 +466,7 @@ -225 +223 test.text.plain.rhtml file @@ -672,6 +672,40 @@ 629 +attachments_added.text.html.rhtml +file + + + + +2010-09-23T14:37:44.603754Z +db9ef17343824d59b7a19db7036ee2f1 +2010-02-18T19:13:38.135448Z +3452 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +144 + news_added.text.plain.rhtml file @@ -706,40 +740,6 @@ 87 -attachments_added.text.html.rhtml -file - - - - -2010-09-23T14:37:44.603754Z -db9ef17343824d59b7a19db7036ee2f1 -2010-02-18T19:13:38.135448Z -3452 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -144 - news_added.text.html.rhtml file @@ -808,6 +808,40 @@ 107 +issue_add.text.plain.rhtml +file + + + + +2010-09-23T14:37:44.603754Z +52a0f774acd5b7aeeb3768de943af901 +2009-02-21T11:04:50.579477Z +2493 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +224 + document_added.text.html.rhtml file @@ -842,40 +876,6 @@ 163 -issue_add.text.plain.rhtml -file - - - - -2010-09-23T14:37:44.603754Z -52a0f774acd5b7aeeb3768de943af901 -2009-02-21T11:04:50.579477Z -2493 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -224 - account_information.text.plain.rhtml file @@ -910,6 +910,40 @@ 295 +account_information.text.html.rhtml +file + + + + +2010-09-23T14:37:44.603754Z +e7e91d7f18dd1547cfebafdf4822a18f +2010-02-18T19:13:38.135448Z +3452 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +368 + message_posted.text.plain.rhtml file @@ -944,74 +978,6 @@ 68 -account_information.text.html.rhtml -file - - - - -2010-09-23T14:37:44.603754Z -e7e91d7f18dd1547cfebafdf4822a18f -2010-02-18T19:13:38.135448Z -3452 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -368 - -wiki_content_updated.text.plain.rhtml -file - - - - -2010-09-23T14:37:44.607738Z -801160f7633227c04b4a3a8c249feeff -2009-05-17T09:55:13.601447Z -2749 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -290 - lost_password.text.plain.rhtml file @@ -1046,6 +1012,40 @@ 97 +wiki_content_updated.text.plain.rhtml +file + + + + +2010-11-19T13:04:49.420968Z +0cb005c22ad144fdbe29238b0080f28b +2010-10-27T16:27:06.240747Z +4296 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +288 + lost_password.text.html.rhtml file @@ -1086,11 +1086,11 @@ -2010-09-23T14:37:44.607738Z -f7cca2b19b22b64036fdba45803b6805 -2009-05-17T09:55:13.601447Z -2749 -jplang +2010-11-19T13:04:49.420968Z +f35cf0d09dd393a255db2d428a3d30f0 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -1112,5 +1112,5 @@ -320 +318
--- a/app/views/mailer/.svn/text-base/wiki_content_added.text.html.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/text-base/wiki_content_added.text.html.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ -<p><%= l(:mail_body_wiki_content_added, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), +<p><%= l(:mail_body_wiki_content_added, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %><br /> <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/.svn/text-base/wiki_content_added.text.plain.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/text-base/wiki_content_added.text.plain.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<%= l(:mail_body_wiki_content_added, :page => h(@wiki_content.page.pretty_title), +<%= l(:mail_body_wiki_content_added, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> <%= @wiki_content.comments %>
--- a/app/views/mailer/.svn/text-base/wiki_content_updated.text.html.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/text-base/wiki_content_updated.text.html.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<p><%= l(:mail_body_wiki_content_updated, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), +<p><%= l(:mail_body_wiki_content_updated, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %><br /> <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/.svn/text-base/wiki_content_updated.text.plain.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/.svn/text-base/wiki_content_updated.text.plain.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<%= l(:mail_body_wiki_content_updated, :page => h(@wiki_content.page.pretty_title), +<%= l(:mail_body_wiki_content_updated, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> <%= @wiki_content.comments %>
--- a/app/views/mailer/wiki_content_added.text.html.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/wiki_content_added.text.html.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ -<p><%= l(:mail_body_wiki_content_added, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), +<p><%= l(:mail_body_wiki_content_added, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %><br /> <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/wiki_content_added.text.plain.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/wiki_content_added.text.plain.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<%= l(:mail_body_wiki_content_added, :page => h(@wiki_content.page.pretty_title), +<%= l(:mail_body_wiki_content_added, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> <%= @wiki_content.comments %>
--- a/app/views/mailer/wiki_content_updated.text.html.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/wiki_content_updated.text.html.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<p><%= l(:mail_body_wiki_content_updated, :page => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), +<p><%= l(:mail_body_wiki_content_updated, :id => link_to(h(@wiki_content.page.pretty_title), @wiki_content_url), :author => h(@wiki_content.author)) %><br /> <em><%=h @wiki_content.comments %></em></p>
--- a/app/views/mailer/wiki_content_updated.text.plain.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/mailer/wiki_content_updated.text.plain.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<%= l(:mail_body_wiki_content_updated, :page => h(@wiki_content.page.pretty_title), +<%= l(:mail_body_wiki_content_updated, :id => h(@wiki_content.page.pretty_title), :author => h(@wiki_content.author)) %> <%= @wiki_content.comments %>
--- a/app/views/members/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/members/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/members http://redmine.rubyforge.org/svn
--- a/app/views/messages/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/messages/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/messages http://redmine.rubyforge.org/svn
--- a/app/views/my/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 37 -/svn/!svn/ver/3775/trunk/app/views/my +/svn/!svn/ver/4380/trunk/app/views/my END account.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3745/trunk/app/views/my/account.rhtml +/svn/!svn/ver/4223/trunk/app/views/my/account.rhtml END page.rhtml K 25 @@ -37,5 +37,5 @@ K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/3755/trunk/app/views/my/page_layout.rhtml +/svn/!svn/ver/4380/trunk/app/views/my/page_layout.rhtml END
--- a/app/views/my/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/my http://redmine.rubyforge.org/svn -2010-06-19T16:50:13.340830Z -3775 -edavis10 +2010-11-07T12:36:19.797484Z +4380 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.619750Z -4fb90e7d5633e4ec24100c38acdad03d -2010-05-23T03:16:37.499264Z -3745 +2010-11-19T13:04:47.012855Z +746c4ac2d5bc111d91747aa0b0c54a5a +2010-09-28T22:13:06.534232Z +4223 edavis10 has-props @@ -58,7 +58,7 @@ -2730 +1561 page.rhtml file @@ -205,11 +205,11 @@ -2010-09-23T14:37:44.623783Z -c1260ac20d704693b8748cef7b7c58f9 -2010-05-26T21:52:03.637924Z -3755 -edavis10 +2010-11-19T13:04:47.012855Z +afbc3db612a251e1fcb34498f27c50b8 +2010-11-07T12:36:19.797484Z +4380 +jplang has-props @@ -231,5 +231,5 @@ -4115 +4274
--- a/app/views/my/.svn/text-base/account.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/.svn/text-base/account.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -32,24 +32,12 @@ <div class="splitcontentright"> <h3><%=l(:field_mail_notification)%></h3> <div class="box"> -<%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option), - :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> -<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> -<p><% User.current.projects.each do |project| %> - <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> -<% end %></p> -<p><em><%= l(:text_user_mail_option) %></em></p> -<% end %> -<p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p> +<%= render :partial => 'users/mail_notifications' %> </div> <h3><%=l(:label_preferences)%></h3> <div class="box tabular"> -<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> -<p><%= pref_fields.check_box :hide_mail %></p> -<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> -<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> -<% end %> +<%= render :partial => 'users/preferences' %> </div> </div>
--- a/app/views/my/.svn/text-base/page_layout.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/.svn/text-base/page_layout.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -5,9 +5,9 @@ Sortable.destroy('list-left'); Sortable.destroy('list-right'); - Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=top', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'}) - Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=left', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'}) - Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=right', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'top') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'left') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'right') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'}) } function updateSelect() {
--- a/app/views/my/account.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/account.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -32,24 +32,12 @@ <div class="splitcontentright"> <h3><%=l(:field_mail_notification)%></h3> <div class="box"> -<%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option), - :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> -<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> -<p><% User.current.projects.each do |project| %> - <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> -<% end %></p> -<p><em><%= l(:text_user_mail_option) %></em></p> -<% end %> -<p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p> +<%= render :partial => 'users/mail_notifications' %> </div> <h3><%=l(:label_preferences)%></h3> <div class="box tabular"> -<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> -<p><%= pref_fields.check_box :hide_mail %></p> -<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> -<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> -<% end %> +<%= render :partial => 'users/preferences' %> </div> </div>
--- a/app/views/my/blocks/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/blocks/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/3734/trunk/app/views/my/blocks +/svn/!svn/ver/4259/trunk/app/views/my/blocks END _issueswatched.rhtml K 25 @@ -31,7 +31,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3734/trunk/app/views/my/blocks/_timelog.rhtml +/svn/!svn/ver/4259/trunk/app/views/my/blocks/_timelog.rhtml END _documents.rhtml K 25
--- a/app/views/my/blocks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/blocks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/my/blocks http://redmine.rubyforge.org/svn -2010-05-09T11:19:15.980195Z -3734 -jplang +2010-10-15T23:37:01.382819Z +4259 +edavis10 @@ -168,11 +168,11 @@ -2010-09-23T14:37:44.623783Z -4dfff03583b1da52a7f2fb8d20398928 -2010-05-09T11:19:15.980195Z -3734 -jplang +2010-11-19T13:04:47.008792Z +2ba11e15a7f15f88fe061979d921b59d +2010-10-15T23:37:01.382819Z +4259 +edavis10 has-props @@ -194,7 +194,7 @@ -2282 +2284 _documents.rhtml file
--- a/app/views/my/blocks/.svn/text-base/_timelog.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/blocks/.svn/text-base/_timelog.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -40,7 +40,7 @@ :title => l(:button_edit) %> <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry}, :confirm => l(:text_are_you_sure), - :method => :post, + :method => :delete, :title => l(:button_delete) %> <% end -%> </td>
--- a/app/views/my/blocks/_timelog.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/blocks/_timelog.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -40,7 +40,7 @@ :title => l(:button_edit) %> <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry}, :confirm => l(:text_are_you_sure), - :method => :post, + :method => :delete, :title => l(:button_delete) %> <% end -%> </td>
--- a/app/views/my/page_layout.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/my/page_layout.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -5,9 +5,9 @@ Sortable.destroy('list-left'); Sortable.destroy('list-right'); - Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=top', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'}) - Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=left', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'}) - Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('/my/order_blocks?group=right', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-top", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'top') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-top")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-left", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'left') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-left")})}, only:'mypage-box', tag:'div'}) + Sortable.create("list-right", {constraint:false, containment:['list-top','list-left','list-right'], dropOnEmpty:true, handle:'handle', onUpdate:function(){new Ajax.Request('<%= url_for(:controller => 'my', :action => 'order_blocks', :group => 'right') %>', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("list-right")})}, only:'mypage-box', tag:'div'}) } function updateSelect() {
--- a/app/views/news/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,19 +1,19 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4172/trunk/app/views/news +/svn/!svn/ver/4267/trunk/app/views/news END _news.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3924/trunk/app/views/news/_news.rhtml +/svn/!svn/ver/4214/trunk/app/views/news/_news.rhtml END show.rhtml K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/4172/trunk/app/views/news/show.rhtml +/svn/!svn/ver/4214/trunk/app/views/news/show.rhtml END _form.rhtml K 25 @@ -25,17 +25,17 @@ K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/4168/trunk/app/views/news/edit.rhtml +/svn/!svn/ver/4214/trunk/app/views/news/edit.rhtml END index.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/4163/trunk/app/views/news/index.rhtml +/svn/!svn/ver/4267/trunk/app/views/news/index.rhtml END new.rhtml K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4163/trunk/app/views/news/new.rhtml +/svn/!svn/ver/4214/trunk/app/views/news/new.rhtml END
--- a/app/views/news/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/news http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-10-22T14:42:38.351679Z +4267 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.627781Z -8a95983c16121228642f685334a98b43 -2010-08-08T07:07:20.961363Z -3924 -jbbarth +2010-11-19T13:04:49.428894Z +2501c1cef884fd4a56abb3a4e736825f +2010-09-27T16:51:12.033537Z +4214 +edavis10 has-props @@ -58,7 +58,7 @@ -422 +384 show.rhtml file @@ -66,10 +66,10 @@ -2010-09-24T12:48:28.335892Z -fb4ed9638d6d3f708b140d2ccbc013de -2010-09-23T15:20:19.085385Z -4172 +2010-11-19T13:04:49.428894Z +c21730c749ee8533fadff9abbea6ffd8 +2010-09-27T16:51:12.033537Z +4214 edavis10 has-props @@ -92,7 +92,7 @@ -3025 +2897 _form.rhtml file @@ -134,10 +134,10 @@ -2010-09-24T12:48:28.335892Z -03cd635f1021f3f088155b7106062d98 -2010-09-21T15:20:37.706826Z -4168 +2010-11-19T13:04:49.432892Z +dd2c968c6b42916bff9b9e5de055e007 +2010-09-27T16:51:12.033537Z +4214 edavis10 has-props @@ -160,7 +160,7 @@ -771 +733 index.rhtml file @@ -168,11 +168,11 @@ -2010-09-24T12:48:28.335892Z -22895814fee421f0a7e4654059ede065 -2010-09-20T15:13:48.212792Z -4163 -edavis10 +2010-11-19T13:04:49.432892Z +764ec3719917039d0cac3d375ec819c4 +2010-10-22T14:42:38.351679Z +4267 +jplang has-props @@ -194,7 +194,7 @@ -2260 +2114 new.rhtml file @@ -202,10 +202,10 @@ -2010-09-24T12:48:28.335892Z -834dc30ca0d2f96a37f2ef2a60d9aaf9 -2010-09-20T15:13:48.212792Z -4163 +2010-11-19T13:04:49.432892Z +1e7f24dd1dc6a117b245a76174e4c8ae +2010-09-27T16:51:12.033537Z +4214 edavis10 has-props @@ -228,5 +228,5 @@ -733 +664
--- a/app/views/news/.svn/text-base/_news.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/text-base/_news.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <p><%= link_to_project(news.project) + ': ' unless @project %> -<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> +<%= link_to h(news.title), news_path(news) %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %> <br /> <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
--- a/app/views/news/.svn/text-base/edit.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/text-base/edit.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <h2><%=l(:label_news)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :action => "update" }, +<% labelled_tabular_form_for :news, @news, :url => news_path(@news), :html => { :id => 'news-form', :method => :put } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/.svn/text-base/index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/text-base/index.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,19 +1,19 @@ <div class="contextual"> -<%= link_to_if_authorized(l(:label_news_new), - {:controller => 'news', :action => 'new', :project_id => @project}, - :class => 'icon icon-add', - :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %> +<%= link_to(l(:label_news_new), + new_project_news_path(@project), + :class => 'icon icon-add', + :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %> </div> <div id="add-news" style="display:none;"> <h2><%=l(:label_news_new)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project }, +<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project), :html => { :id => 'news-form' } do |f| %> <%= render :partial => 'news/form', :locals => { :f => f } %> <%= submit_tag l(:button_create) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %> | @@ -29,7 +29,7 @@ <% else %> <% @newss.each do |news| %> <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %> - <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> + <%= link_to h(news.title), news_path(news) %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3> <p class="author"><%= authoring news.created_on, news.author %></p> <div class="wiki">
--- a/app/views/news/.svn/text-base/new.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/text-base/new.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <h2><%=l(:label_news_new)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project }, +<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project), :html => { :id => 'news-form' } do |f| %> <%= render :partial => 'news/form', :locals => { :f => f } %> <%= submit_tag l(:button_create) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,23 +1,23 @@ <div class="contextual"> <%= link_to_if_authorized l(:button_edit), - {:controller => 'news', :action => 'edit', :id => @news}, + edit_news_path(@news), :class => 'icon icon-edit', :accesskey => accesskey(:edit), :onclick => 'Element.show("edit-news"); return false;' %> -<%= link_to_if_authorized l(:button_delete), {:controller => 'news', :action => 'destroy', :id => @news}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> +<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %> </div> <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2> <% if authorize_for('news', 'edit') %> <div id="edit-news" style="display:none;"> -<% labelled_tabular_form_for :news, @news, :url => { :action => "update", :id => @news }, +<% labelled_tabular_form_for :news, @news, :url => news_path(@news), :html => { :id => 'news-form', :method => :put } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %> |
--- a/app/views/news/_news.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/_news.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <p><%= link_to_project(news.project) + ': ' unless @project %> -<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> +<%= link_to h(news.title), news_path(news) %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %> <br /> <% unless news.summary.blank? %><span class="summary"><%=h news.summary %></span><br /><% end %>
--- a/app/views/news/edit.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/edit.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <h2><%=l(:label_news)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :action => "update" }, +<% labelled_tabular_form_for :news, @news, :url => news_path(@news), :html => { :id => 'news-form', :method => :put } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/index.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/index.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,19 +1,19 @@ <div class="contextual"> -<%= link_to_if_authorized(l(:label_news_new), - {:controller => 'news', :action => 'new', :project_id => @project}, - :class => 'icon icon-add', - :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project %> +<%= link_to(l(:label_news_new), + new_project_news_path(@project), + :class => 'icon icon-add', + :onclick => 'Element.show("add-news"); Form.Element.focus("news_title"); return false;') if @project && User.current.allowed_to?(:manage_news, @project) %> </div> <div id="add-news" style="display:none;"> <h2><%=l(:label_news_new)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project }, +<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project), :html => { :id => 'news-form' } do |f| %> <%= render :partial => 'news/form', :locals => { :f => f } %> <%= submit_tag l(:button_create) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %> | @@ -29,7 +29,7 @@ <% else %> <% @newss.each do |news| %> <h3><%= link_to_project(news.project) + ': ' unless news.project == @project %> - <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> + <%= link_to h(news.title), news_path(news) %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %></h3> <p class="author"><%= authoring news.created_on, news.author %></p> <div class="wiki">
--- a/app/views/news/new.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/new.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <h2><%=l(:label_news_new)%></h2> -<% labelled_tabular_form_for :news, @news, :url => { :controller => 'news', :action => 'create', :project_id => @project }, +<% labelled_tabular_form_for :news, @news, :url => project_news_index_path(@project), :html => { :id => 'news-form' } do |f| %> <%= render :partial => 'news/form', :locals => { :f => f } %> <%= submit_tag l(:button_create) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %>
--- a/app/views/news/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/news/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,23 +1,23 @@ <div class="contextual"> <%= link_to_if_authorized l(:button_edit), - {:controller => 'news', :action => 'edit', :id => @news}, + edit_news_path(@news), :class => 'icon icon-edit', :accesskey => accesskey(:edit), :onclick => 'Element.show("edit-news"); return false;' %> -<%= link_to_if_authorized l(:button_delete), {:controller => 'news', :action => 'destroy', :id => @news}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> +<%= link_to_if_authorized l(:button_delete), news_path(@news), :confirm => l(:text_are_you_sure), :method => :delete, :class => 'icon icon-del' %> </div> <h2><%= avatar(@news.author, :size => "24") %><%=h @news.title %></h2> <% if authorize_for('news', 'edit') %> <div id="edit-news" style="display:none;"> -<% labelled_tabular_form_for :news, @news, :url => { :action => "update", :id => @news }, +<% labelled_tabular_form_for :news, @news, :url => news_path(@news), :html => { :id => 'news-form', :method => :put } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'news', :action => 'preview', :project_id => @project }, - :method => 'post', + { :url => preview_news_path(:project_id => @project), + :method => 'get', :update => 'preview', :with => "Form.serialize('news-form')" }, :accesskey => accesskey(:preview) %> |
--- a/app/views/previews/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/previews/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/previews http://redmine.rubyforge.org/svn
--- a/app/views/projects/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,31 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/4097/trunk/app/views/projects -END -settings.rhtml -K 25 -svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml -END -_form.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3910/trunk/app/views/projects/_form.rhtml -END -index.xml.builder -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3731/trunk/app/views/projects/index.xml.builder -END -index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml +/svn/!svn/ver/4402/trunk/app/views/projects END copy.rhtml K 25 @@ -43,13 +19,25 @@ K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/3730/trunk/app/views/projects/show.xml.builder +/svn/!svn/ver/4382/trunk/app/views/projects/show.xml.builder +END +settings.rhtml +K 25 +svn:wc:ra_dav:version-url +V 58 +/svn/!svn/ver/2871/trunk/app/views/projects/settings.rhtml END show.rhtml K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/4095/trunk/app/views/projects/show.rhtml +/svn/!svn/ver/4382/trunk/app/views/projects/show.rhtml +END +_form.rhtml +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/!svn/ver/4402/trunk/app/views/projects/_form.rhtml END _edit.rhtml K 25 @@ -63,12 +51,24 @@ V 62 /svn/!svn/ver/2990/trunk/app/views/projects/list_members.rhtml END +index.xml.builder +K 25 +svn:wc:ra_dav:version-url +V 61 +/svn/!svn/ver/4382/trunk/app/views/projects/index.xml.builder +END _members_box.html.erb K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/4009/trunk/app/views/projects/_members_box.html.erb END +index.rhtml +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/!svn/ver/4069/trunk/app/views/projects/index.rhtml +END destroy.rhtml K 25 svn:wc:ra_dav:version-url
--- a/app/views/projects/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/projects http://redmine.rubyforge.org/svn -2010-09-17T15:55:08.377083Z -4097 -edavis10 +2010-11-14T12:33:14.198318Z +4402 +jplang @@ -26,142 +26,6 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 -settings.rhtml -file - - - - -2010-09-23T14:37:44.643780Z -66d45b68c4615d2b502b2c6d06cf0951 -2009-09-12T09:13:13.676884Z -2871 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -114 - -_form.rhtml -file - - - - -2010-09-23T14:37:44.639741Z -d332741d76f19cf9b39b22e0394caaa4 -2010-08-04T00:59:15.949103Z -3910 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1978 - -index.xml.builder -file - - - - -2010-09-23T14:37:44.643780Z -1d385c279ed6afca9347a892c07c4ffb -2010-05-01T14:21:59.060695Z -3731 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -721 - -index.rhtml -file - - - - -2010-09-24T12:48:28.959844Z -cb60b85b211b8c78058e4ccc5cdefc82 -2010-09-07T15:00:27.481481Z -4069 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1155 - copy.rhtml file @@ -239,10 +103,10 @@ -2010-09-23T14:37:44.651752Z -d929d078c5f7b1c69f90434ce06f9629 -2010-05-01T14:21:41.568021Z -3730 +2010-11-19T13:04:49.468916Z +2c71cdd8d404107942ca25fbd76f7099 +2010-11-07T14:15:01.891476Z +4382 jplang has-props @@ -265,7 +129,41 @@ -679 +687 + +settings.rhtml +file + + + + +2010-09-23T14:37:44.643780Z +66d45b68c4615d2b502b2c6d06cf0951 +2009-09-12T09:13:13.676884Z +2871 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +114 show.rhtml file @@ -273,11 +171,11 @@ -2010-09-24T12:48:28.959844Z -a05a461d7466e582d0fc7d4c1fc286e7 -2010-09-17T04:22:46.020207Z -4095 -edavis10 +2010-11-19T13:04:49.468916Z +bbcdfa64f2a80d809b80b00c26fd0c8c +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -299,7 +197,41 @@ -3476 +3499 + +_form.rhtml +file + + + + +2010-11-19T13:04:49.468916Z +a7153b3d30bc50efcce516bb73b04f3b +2010-11-14T12:33:14.198318Z +4402 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1944 _edit.rhtml file @@ -369,6 +301,40 @@ 391 +index.xml.builder +file + + + + +2010-11-19T13:04:49.472856Z +0a17e1dac1d3e2ac43c08f0039802b8c +2010-11-07T14:15:01.891476Z +4382 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +729 + _members_box.html.erb file @@ -403,6 +369,40 @@ 279 +index.rhtml +file + + + + +2010-09-24T12:48:28.959844Z +cb60b85b211b8c78058e4ccc5cdefc82 +2010-09-07T15:00:27.481481Z +4069 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +1155 + destroy.rhtml file
--- a/app/views/projects/.svn/text-base/_form.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/text-base/_form.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -2,16 +2,16 @@ <div class="box"> <!--[form:project]--> -<p><%= f.text_field :name, :required => true, :maxlength => 30 %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p> +<p><%= f.text_field :name, :required => true, :size => 60 %></p> <% unless @project.allowed_parents.compact.empty? %> <p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p> <% end %> <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p> -<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %> +<p><%= f.text_field :identifier, :required => true, :size => 60, :disabled => @project.identifier_frozen? %> <% unless @project.identifier_frozen? %> -<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em> +<br /><em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em> <% end %></p> <p><%= f.text_field :homepage, :size => 60 %></p> <p><%= f.check_box :is_public %></p>
--- a/app/views/projects/.svn/text-base/index.xml.builder.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/text-base/index.xml.builder.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -8,7 +8,7 @@ xml.description project.description xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil? xml.custom_fields do - project.custom_field_values.each do |custom_value| + project.visible_custom_field_values.each do |custom_value| xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name end end unless project.custom_field_values.empty?
--- a/app/views/projects/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,7 +16,7 @@ <li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li> <% end %> - <% @project.custom_values.each do |custom_value| %> + <% @project.visible_custom_field_values.each do |custom_value| %> <% if !custom_value.value.blank? %> <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> <% end %> @@ -67,8 +67,8 @@ <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> <h3><%= l(:label_spent_time) %></h3> <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p> - <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | - <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %></p> + <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> | + <%= link_to(l(:label_report), {:controller => 'time_entry_reports', :action => 'report', :project_id => @project}) %></p> <% end %> <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %> <% end %>
--- a/app/views/projects/.svn/text-base/show.xml.builder.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/.svn/text-base/show.xml.builder.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -7,7 +7,7 @@ xml.homepage @project.homepage xml.custom_fields do - @project.custom_field_values.each do |custom_value| + @project.visible_custom_field_values.each do |custom_value| xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name end end unless @project.custom_field_values.empty?
--- a/app/views/projects/_form.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/_form.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -2,16 +2,16 @@ <div class="box"> <!--[form:project]--> -<p><%= f.text_field :name, :required => true, :maxlength => 30 %><br /><em><%= l(:text_caracters_maximum, 30) %></em></p> +<p><%= f.text_field :name, :required => true, :size => 60 %></p> <% unless @project.allowed_parents.compact.empty? %> <p><%= label(:project, :parent_id, l(:field_parent)) %><%= parent_project_select_tag(@project) %></p> <% end %> <p><%= f.text_area :description, :rows => 5, :class => 'wiki-edit' %></p> -<p><%= f.text_field :identifier, :required => true, :disabled => @project.identifier_frozen?, :maxlength => 20 %> +<p><%= f.text_field :identifier, :required => true, :size => 60, :disabled => @project.identifier_frozen? %> <% unless @project.identifier_frozen? %> -<br /><em><%= l(:text_length_between, :min => 1, :max => 20) %> <%= l(:text_project_identifier_info) %></em> +<br /><em><%= l(:text_length_between, :min => 1, :max => Project::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_project_identifier_info) %></em> <% end %></p> <p><%= f.text_field :homepage, :size => 60 %></p> <p><%= f.check_box :is_public %></p>
--- a/app/views/projects/index.xml.builder Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/index.xml.builder Fri Nov 19 13:24:41 2010 +0000 @@ -8,7 +8,7 @@ xml.description project.description xml.parent(:id => project.parent_id, :name => project.parent.name) unless project.parent.nil? xml.custom_fields do - project.custom_field_values.each do |custom_value| + project.visible_custom_field_values.each do |custom_value| xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name end end unless project.custom_field_values.empty?
--- a/app/views/projects/settings/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/4097/trunk/app/views/projects/settings +/svn/!svn/ver/4371/trunk/app/views/projects/settings END _issue_categories.rhtml K 25 @@ -37,7 +37,7 @@ K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/4097/trunk/app/views/projects/settings/_versions.rhtml +/svn/!svn/ver/4307/trunk/app/views/projects/settings/_versions.rhtml END _boards.rhtml K 25 @@ -49,5 +49,5 @@ K 25 svn:wc:ra_dav:version-url V 67 -/svn/!svn/ver/3748/trunk/app/views/projects/settings/_members.rhtml +/svn/!svn/ver/4371/trunk/app/views/projects/settings/_members.rhtml END
--- a/app/views/projects/settings/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/projects/settings http://redmine.rubyforge.org/svn -2010-09-17T15:55:08.377083Z -4097 -edavis10 +2010-11-06T12:04:24.600306Z +4371 +jplang @@ -202,11 +202,11 @@ -2010-09-24T12:48:28.400004Z -968f7fd3c259f3f7d4b173c4e6096cb6 -2010-09-17T15:55:08.377083Z -4097 -edavis10 +2010-11-19T13:04:49.460909Z +4f26d985da6ada4c0d724095490050c5 +2010-10-29T22:40:02.439890Z +4307 +jbbarth has-props @@ -228,7 +228,7 @@ -1979 +2055 _boards.rhtml file @@ -270,11 +270,11 @@ -2010-09-23T14:37:44.651752Z -0f929da546db6f63f0ecbf2b3647fa6d -2010-05-24T20:21:08.426768Z -3748 -edavis10 +2010-11-19T13:04:49.460909Z +ed4707b71316abb3bdcba3d525f83c9e +2010-11-06T12:04:24.600306Z +4371 +jplang has-props @@ -296,5 +296,5 @@ -3909 +4120
--- a/app/views/projects/settings/.svn/text-base/_members.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/.svn/text-base/_members.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -55,10 +55,12 @@ <div class="splitcontentright"> <% if roles.any? && principals.any? %> - <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %> + <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post, + :loading => "$('member-add-submit').disable()", + :complete => "$('member-add-submit').enable()") do |f| %> <fieldset><legend><%=l(:label_member_new)%></legend> - <p><%= text_field_tag 'principal_search', nil %></p> + <p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p> <%= observe_field(:principal_search, :frequency => 0.5, :update => :principals, @@ -75,7 +77,7 @@ <label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %></label> <% end %></p> - <p><%= submit_tag l(:button_add) %></p> + <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p> </fieldset> <% end %> <% end %>
--- a/app/views/projects/settings/.svn/text-base/_versions.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/.svn/text-base/_versions.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -6,7 +6,7 @@ <th><%= l(:field_description) %></th> <th><%= l(:field_status) %></th> <th><%= l(:field_sharing) %></th> - <th><%= l(:label_wiki_page) unless @project.wiki.nil? %></th> + <th><%= l(:label_wiki_page) %></th> <th style="width:15%"></th> </tr></thead> <tbody> @@ -17,7 +17,7 @@ <td class="description"><%=h version.description %></td> <td class="status"><%= l("version_status_#{version.status}") %></td> <td class="sharing"><%=h format_version_sharing(version.sharing) %></td> - <td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td> + <td><%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td> <td class="buttons"> <% if version.project == @project %> <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %>
--- a/app/views/projects/settings/_members.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/_members.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -55,10 +55,12 @@ <div class="splitcontentright"> <% if roles.any? && principals.any? %> - <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post) do |f| %> + <% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post, + :loading => "$('member-add-submit').disable()", + :complete => "$('member-add-submit').enable()") do |f| %> <fieldset><legend><%=l(:label_member_new)%></legend> - <p><%= text_field_tag 'principal_search', nil %></p> + <p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p> <%= observe_field(:principal_search, :frequency => 0.5, :update => :principals, @@ -75,7 +77,7 @@ <label><%= check_box_tag 'member[role_ids][]', role.id %> <%=h role %></label> <% end %></p> - <p><%= submit_tag l(:button_add) %></p> + <p><%= submit_tag l(:button_add), :id => 'member-add-submit' %></p> </fieldset> <% end %> <% end %>
--- a/app/views/projects/settings/_versions.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/settings/_versions.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -6,7 +6,7 @@ <th><%= l(:field_description) %></th> <th><%= l(:field_status) %></th> <th><%= l(:field_sharing) %></th> - <th><%= l(:label_wiki_page) unless @project.wiki.nil? %></th> + <th><%= l(:label_wiki_page) %></th> <th style="width:15%"></th> </tr></thead> <tbody> @@ -17,7 +17,7 @@ <td class="description"><%=h version.description %></td> <td class="status"><%= l("version_status_#{version.status}") %></td> <td class="sharing"><%=h format_version_sharing(version.sharing) %></td> - <td><%= link_to(h(version.wiki_page_title), :controller => 'wiki', :page => Wiki.titleize(version.wiki_page_title)) unless version.wiki_page_title.blank? || @project.wiki.nil? %></td> + <td><%= link_to_if_authorized(h(version.wiki_page_title), {:controller => 'wiki', :action => 'show', :project_id => version.project, :id => Wiki.titleize(version.wiki_page_title)}) || h(version.wiki_page_title) unless version.wiki_page_title.blank? || version.project.wiki.nil? %></td> <td class="buttons"> <% if version.project == @project %> <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => version }, :class => 'icon icon-edit' %>
--- a/app/views/projects/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -16,7 +16,7 @@ <li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li> <% end %> - <% @project.custom_values.each do |custom_value| %> + <% @project.visible_custom_field_values.each do |custom_value| %> <% if !custom_value.value.blank? %> <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> <% end %> @@ -67,8 +67,8 @@ <% if @total_hours && User.current.allowed_to?(:view_time_entries, @project) %> <h3><%= l(:label_spent_time) %></h3> <p><span class="icon icon-time"><%= l_hours(@total_hours) %></span></p> - <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'details', :project_id => @project}) %> | - <%= link_to(l(:label_report), {:controller => 'timelog', :action => 'report', :project_id => @project}) %></p> + <p><%= link_to(l(:label_details), {:controller => 'timelog', :action => 'index', :project_id => @project}) %> | + <%= link_to(l(:label_report), {:controller => 'time_entry_reports', :action => 'report', :project_id => @project}) %></p> <% end %> <%= call_hook(:view_projects_show_sidebar_bottom, :project => @project) %> <% end %>
--- a/app/views/projects/show.xml.builder Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/projects/show.xml.builder Fri Nov 19 13:24:41 2010 +0000 @@ -7,7 +7,7 @@ xml.homepage @project.homepage xml.custom_fields do - @project.custom_field_values.each do |custom_value| + @project.visible_custom_field_values.each do |custom_value| xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name end end unless @project.custom_field_values.empty?
--- a/app/views/queries/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/queries/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/4093/trunk/app/views/queries +/svn/!svn/ver/4387/trunk/app/views/queries END _columns.rhtml K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/4093/trunk/app/views/queries/_filters.rhtml +/svn/!svn/ver/4387/trunk/app/views/queries/_filters.rhtml END index.rhtml K 25
--- a/app/views/queries/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/queries/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/queries http://redmine.rubyforge.org/svn -2010-09-16T21:33:49.399868Z -4093 -jbbarth +2010-11-07T15:38:51.908839Z +4387 +jplang @@ -134,11 +134,11 @@ -2010-09-24T12:48:29.616044Z -d479118259de825ac50b66801909c8f4 -2010-09-16T21:33:49.399868Z -4093 -jbbarth +2010-11-19T13:04:50.836916Z +e57491c4634e00f0ef53c44959c58d46 +2010-11-07T15:38:51.908839Z +4387 +jplang has-props @@ -160,7 +160,7 @@ -4456 +4495 index.rhtml file
--- a/app/views/queries/.svn/text-base/_filters.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/queries/.svn/text-base/_filters.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -114,3 +114,4 @@ </td> </tr> </table> +<%= hidden_field_tag 'fields[]', '' %>
--- a/app/views/queries/_filters.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/queries/_filters.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -114,3 +114,4 @@ </td> </tr> </table> +<%= hidden_field_tag 'fields[]', '' %>
--- a/app/views/reports/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/reports/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/reports http://redmine.rubyforge.org/svn
--- a/app/views/repositories/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/repositories/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/repositories http://redmine.rubyforge.org/svn @@ -26,6 +26,74 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +_navigation.rhtml +file + + + + +2010-09-23T14:37:44.671737Z +59dbb643c447518053d9cdb1a86cb5ef +2009-11-24T17:55:45.336708Z +3086 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +910 + +revision.rhtml +file + + + + +2010-09-24T11:56:52.963971Z +bd525284ca2c21084be84d21823b552a +2009-12-22T23:23:54.920563Z +3216 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +1953 + stats.rhtml file @@ -60,74 +128,6 @@ 581 -revision.rhtml -file - - - - -2010-09-24T11:56:52.963971Z -bd525284ca2c21084be84d21823b552a -2009-12-22T23:23:54.920563Z -3216 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1953 - -_navigation.rhtml -file - - - - -2010-09-23T14:37:44.671737Z -59dbb643c447518053d9cdb1a86cb5ef -2009-11-24T17:55:45.336708Z -3086 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -910 - entry.rhtml file @@ -196,6 +196,74 @@ 1724 +_dir_list.rhtml +file + + + + +2010-09-23T14:37:44.667779Z +8c004b6e433ac1a6ca64c97a35512f28 +2008-01-02T22:41:53.166620Z +1032 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +350 + +changes.rhtml +file + + + + +2010-09-23T14:37:44.671737Z +cde7a86a5ec0cf9915b0540c9acbb820 +2009-08-15T22:41:40.505056Z +2840 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +636 + diff.rhtml file @@ -230,74 +298,6 @@ 991 -changes.rhtml -file - - - - -2010-09-23T14:37:44.671737Z -cde7a86a5ec0cf9915b0540c9acbb820 -2009-08-15T22:41:40.505056Z -2840 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -636 - -_dir_list.rhtml -file - - - - -2010-09-23T14:37:44.667779Z -8c004b6e433ac1a6ca64c97a35512f28 -2008-01-02T22:41:53.166620Z -1032 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -350 - annotate.rhtml file @@ -332,6 +332,40 @@ 1420 +_revisions.rhtml +file + + + + +2010-09-24T11:56:52.952009Z +e7a6bdebdc02cae051102093180af71e +2009-12-22T23:23:54.920563Z +3216 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +1346 + show.rhtml file @@ -366,40 +400,6 @@ 1461 -_revisions.rhtml -file - - - - -2010-09-24T11:56:52.952009Z -e7a6bdebdc02cae051102093180af71e -2009-12-22T23:23:54.920563Z -3216 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1346 - revisions.rhtml file @@ -434,6 +434,40 @@ 810 +_link_to_functions.rhtml +file + + + + +2010-09-23T14:37:44.667779Z +a86ac8a045315f57fa32acb29c08f19f +2009-09-01T12:13:17.386587Z +2849 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +847 + committers.rhtml file @@ -468,40 +502,6 @@ 857 -_link_to_functions.rhtml -file - - - - -2010-09-23T14:37:44.667779Z -a86ac8a045315f57fa32acb29c08f19f -2009-09-01T12:13:17.386587Z -2849 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -847 - _breadcrumbs.rhtml file
--- a/app/views/roles/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/roles/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/roles http://redmine.rubyforge.org/svn
--- a/app/views/search/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/search/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/search http://redmine.rubyforge.org/svn
--- a/app/views/settings/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/3859/trunk/app/views/settings +/svn/!svn/ver/4362/trunk/app/views/settings END _issues.rhtml K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 65 -/svn/!svn/ver/3859/trunk/app/views/settings/_authentication.rhtml +/svn/!svn/ver/4306/trunk/app/views/settings/_authentication.rhtml END _mail_handler.rhtml K 25 @@ -55,7 +55,7 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/3198/trunk/app/views/settings/_notifications.rhtml +/svn/!svn/ver/4362/trunk/app/views/settings/_notifications.rhtml END _projects.rhtml K 25
--- a/app/views/settings/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/settings http://redmine.rubyforge.org/svn -2010-07-20T23:50:15.173990Z -3859 +2010-11-02T19:00:36.834304Z +4362 edavis10 @@ -100,11 +100,11 @@ -2010-09-23T14:37:44.683778Z -2de580f7dfb3779ee4f31dc76e717482 -2010-07-20T23:50:15.173990Z -3859 -edavis10 +2010-11-19T13:04:48.200851Z +8005b162966a27cd4e7c30022320b47e +2010-10-29T22:28:24.886659Z +4306 +jbbarth has-props @@ -126,7 +126,7 @@ -1180 +1181 _mail_handler.rhtml file @@ -304,11 +304,11 @@ -2010-09-23T14:37:44.683778Z -92e1b26a91b51f283320507abecc8871 -2009-12-19T20:07:09.039389Z -3198 -jplang +2010-11-19T13:04:48.200851Z +3d9920b9875183abe7932cdfd335d36a +2010-11-02T19:00:36.834304Z +4362 +edavis10 has-props @@ -330,7 +330,7 @@ -1084 +1366 _projects.rhtml file
--- a/app/views/settings/.svn/text-base/_authentication.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/.svn/text-base/_authentication.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -3,7 +3,7 @@ <div class="box tabular settings"> <p><%= setting_check_box :login_required %></p> -<p><%= setting_select :autologin, [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, :blank => :label_disabled %></p> +<p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p> <p><%= setting_select :self_registration, [[l(:label_disabled), "0"], [l(:label_registration_activation_by_email), "1"],
--- a/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/.svn/text-base/_notifications.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -7,13 +7,22 @@ <p><%= setting_check_box :bcc_recipients %></p> <p><%= setting_check_box :plain_text_mail %></p> + +<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p> + </div> -<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend> - <%= setting_multiselect(:notified_events, - @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %> +<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend> +<%= hidden_field_tag 'settings[notified_events][]', '' %> +<% @notifiables.each do |notifiable| %> +<%= notification_field notifiable %> +<br /> +<% end %> +<p><%= check_all_links('notified_events') %></p> +</fieldset> - <p><%= check_all_links('notified_events') %></p> +<fieldset class="box"><legend><%= l(:setting_emails_header) %></legend> +<%= setting_text_area :emails_header, :label => false, :class => 'wiki-edit', :rows => 5 %> </fieldset> <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
--- a/app/views/settings/_authentication.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/_authentication.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -3,7 +3,7 @@ <div class="box tabular settings"> <p><%= setting_check_box :login_required %></p> -<p><%= setting_select :autologin, [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, :blank => :label_disabled %></p> +<p><%= setting_select :autologin, [[l(:label_disabled), 0]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %></p> <p><%= setting_select :self_registration, [[l(:label_disabled), "0"], [l(:label_registration_activation_by_email), "1"],
--- a/app/views/settings/_notifications.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/settings/_notifications.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -7,13 +7,22 @@ <p><%= setting_check_box :bcc_recipients %></p> <p><%= setting_check_box :plain_text_mail %></p> + +<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p> + </div> -<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend> - <%= setting_multiselect(:notified_events, - @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %> +<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend> +<%= hidden_field_tag 'settings[notified_events][]', '' %> +<% @notifiables.each do |notifiable| %> +<%= notification_field notifiable %> +<br /> +<% end %> +<p><%= check_all_links('notified_events') %></p> +</fieldset> - <p><%= check_all_links('notified_events') %></p> +<fieldset class="box"><legend><%= l(:setting_emails_header) %></legend> +<%= setting_text_area :emails_header, :label => false, :class => 'wiki-edit', :rows => 5 %> </fieldset> <fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,17 @@ +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/4239/trunk/app/views/time_entry_reports +END +report.rhtml +K 25 +svn:wc:ra_dav:version-url +V 66 +/svn/!svn/ver/4239/trunk/app/views/time_entry_reports/report.rhtml +END +_report_criteria.rhtml +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/!svn/ver/4232/trunk/app/views/time_entry_reports/_report_criteria.rhtml +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,96 @@ +10 + +dir +4411 +http://redmine.rubyforge.org/svn/trunk/app/views/time_entry_reports +http://redmine.rubyforge.org/svn + + + +2010-10-07T15:51:09.349542Z +4239 +edavis10 + + + + + + + + + + + + + + +e93f8b46-1217-0410-a6f0-8f06a7374b81 + +report.rhtml +file + + + + +2010-11-19T13:04:48.181514Z +d896f5cf56b2a3cd64887f239e584fdc +2010-10-07T15:51:09.349542Z +4239 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +3569 + +_report_criteria.rhtml +file + + + + +2010-11-19T13:04:48.181514Z +5fa73daf0a67b2a39fd10320bcd7ab45 +2010-10-05T16:07:17.015270Z +4232 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +926 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/prop-base/_report_criteria.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/prop-base/report.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/text-base/_report_criteria.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,19 @@ +<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %> +<% hours_for_value = select_hours(hours, criterias[level], value) -%> +<% next if hours_for_value.empty? -%> +<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>"> +<%= '<td></td>' * level %> +<td><%= h(format_criteria_value(criterias[level], value)) %></td> +<%= '<td></td>' * (criterias.length - level - 1) -%> + <% total = 0 -%> + <% @periods.each do |period| -%> + <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%> + <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> + <% end -%> + <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> +</tr> +<% if criterias.length > level+1 -%> + <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %> +<% end -%> + +<% end %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/.svn/text-base/report.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,76 @@ +<div class="contextual"> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> +</div> + +<%= render_timelog_breadcrumb %> + +<h2><%= l(:label_spent_time) %></h2> + +<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> + <% @criterias.each do |criteria| %> + <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> + <% end %> + <%# TODO: get rid of the project_id field, that should already be in the URL %> + <%= hidden_field_tag('project_id', params[:project_id]) if @project %> + <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> + <%= render :partial => 'timelog/date_range' %> + + <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], + [l(:label_month), 'month'], + [l(:label_week), 'week'], + [l(:label_day_plural).titleize, 'day']], @columns), + :onchange => "this.form.onsubmit();" %> + + <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), + :onchange => "this.form.onsubmit();", + :style => 'width: 200px', + :id => nil, + :disabled => (@criterias.length >= 3)) %> + <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, + :method => :get, + :update => 'content' + }, :class => 'icon icon-reload' %></p> +<% end %> + +<% unless @criterias.empty? %> +<div class="total-hours"> +<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> +</div> + +<% unless @hours.empty? %> +<table class="list" id="time-report"> +<thead> +<tr> +<% @criterias.each do |criteria| %> + <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th> +<% end %> +<% columns_width = (40 / (@periods.length+1)).to_i %> +<% @periods.each do |period| %> + <th class="period" width="<%= columns_width %>%"><%= period %></th> +<% end %> + <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th> +</tr> +</thead> +<tbody> +<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %> + <tr class="total"> + <td><%= l(:label_total) %></td> + <%= '<td></td>' * (@criterias.size - 1) %> + <% total = 0 -%> + <% @periods.each do |period| -%> + <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%> + <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> + <% end -%> + <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> + </tr> +</tbody> +</table> + +<% other_formats_links do |f| %> + <%= f.link_to 'CSV', :url => params %> +<% end %> +<% end %> +<% end %> + +<% html_title l(:label_spent_time), l(:label_report) %> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/_report_criteria.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,19 @@ +<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %> +<% hours_for_value = select_hours(hours, criterias[level], value) -%> +<% next if hours_for_value.empty? -%> +<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>"> +<%= '<td></td>' * level %> +<td><%= h(format_criteria_value(criterias[level], value)) %></td> +<%= '<td></td>' * (criterias.length - level - 1) -%> + <% total = 0 -%> + <% @periods.each do |period| -%> + <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%> + <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> + <% end -%> + <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> +</tr> +<% if criterias.length > level+1 -%> + <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %> +<% end -%> + +<% end %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/time_entry_reports/report.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,76 @@ +<div class="contextual"> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> +</div> + +<%= render_timelog_breadcrumb %> + +<h2><%= l(:label_spent_time) %></h2> + +<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> + <% @criterias.each do |criteria| %> + <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> + <% end %> + <%# TODO: get rid of the project_id field, that should already be in the URL %> + <%= hidden_field_tag('project_id', params[:project_id]) if @project %> + <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> + <%= render :partial => 'timelog/date_range' %> + + <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], + [l(:label_month), 'month'], + [l(:label_week), 'week'], + [l(:label_day_plural).titleize, 'day']], @columns), + :onchange => "this.form.onsubmit();" %> + + <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), + :onchange => "this.form.onsubmit();", + :style => 'width: 200px', + :id => nil, + :disabled => (@criterias.length >= 3)) %> + <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, + :method => :get, + :update => 'content' + }, :class => 'icon icon-reload' %></p> +<% end %> + +<% unless @criterias.empty? %> +<div class="total-hours"> +<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> +</div> + +<% unless @hours.empty? %> +<table class="list" id="time-report"> +<thead> +<tr> +<% @criterias.each do |criteria| %> + <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th> +<% end %> +<% columns_width = (40 / (@periods.length+1)).to_i %> +<% @periods.each do |period| %> + <th class="period" width="<%= columns_width %>%"><%= period %></th> +<% end %> + <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th> +</tr> +</thead> +<tbody> +<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %> + <tr class="total"> + <td><%= l(:label_total) %></td> + <%= '<td></td>' * (@criterias.size - 1) %> + <% total = 0 -%> + <% @periods.each do |period| -%> + <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%> + <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> + <% end -%> + <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> + </tr> +</tbody> +</table> + +<% other_formats_links do |f| %> + <%= f.link_to 'CSV', :url => params %> +<% end %> +<% end %> +<% end %> + +<% html_title l(:label_spent_time), l(:label_report) %> +
--- a/app/views/timelog/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,41 +1,29 @@ K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/3043/trunk/app/views/timelog +/svn/!svn/ver/4250/trunk/app/views/timelog END _list.rhtml K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/3043/trunk/app/views/timelog/_list.rhtml +/svn/!svn/ver/4250/trunk/app/views/timelog/_list.rhtml END -report.rhtml +index.html.erb K 25 svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2893/trunk/app/views/timelog/report.rhtml -END -_report_criteria.rhtml -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/1503/trunk/app/views/timelog/_report_criteria.rhtml -END -details.rhtml -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2895/trunk/app/views/timelog/details.rhtml +V 57 +/svn/!svn/ver/4239/trunk/app/views/timelog/index.html.erb END edit.rhtml K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/2946/trunk/app/views/timelog/edit.rhtml +/svn/!svn/ver/4248/trunk/app/views/timelog/edit.rhtml END _date_range.rhtml K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/2902/trunk/app/views/timelog/_date_range.rhtml +/svn/!svn/ver/4235/trunk/app/views/timelog/_date_range.rhtml END
--- a/app/views/timelog/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/timelog http://redmine.rubyforge.org/svn -2009-11-14T14:10:09.589573Z -3043 -jplang +2010-10-12T15:55:21.984670Z +4250 +edavis10 @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.691790Z -4ccce502c5846d291cb6f447a270088c -2009-11-14T14:10:09.589573Z -3043 -jplang +2010-11-19T13:04:48.784870Z +128d8975cacb0db79fc14a461544db09 +2010-10-12T15:55:21.984670Z +4250 +edavis10 has-props @@ -58,19 +58,19 @@ -1731 +1733 -report.rhtml +index.html.erb file -2010-09-23T14:37:44.691790Z -d4d7e674e383ee8ff3ec998c7f79c0e3 -2009-09-20T09:30:41.402075Z -2893 -jplang +2010-11-19T13:04:48.784870Z +404d6b75c96def01a9a6bf86a6f58697 +2010-10-07T15:51:09.349542Z +4239 +edavis10 has-props @@ -92,75 +92,7 @@ -3562 - -_report_criteria.rhtml -file - - - - -2010-09-23T14:37:44.691790Z -5fa73daf0a67b2a39fd10320bcd7ab45 -2008-06-07T15:08:59.933638Z -1503 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -926 - -details.rhtml -file - - - - -2010-09-23T14:37:44.691790Z -dd63fc253dacd5a2276337c08eef6ff5 -2009-09-20T14:06:57.257282Z -2895 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1422 +1421 edit.rhtml file @@ -168,10 +100,10 @@ -2010-09-23T14:37:44.691790Z -8a0ba6a20c98dd2462e40f684f623874 -2009-10-21T22:34:28.905707Z -2946 +2010-11-19T13:04:48.784870Z +3bb82a2517a120b7a44add17f3369082 +2010-10-11T15:31:42.953914Z +4248 edavis10 has-props @@ -194,7 +126,7 @@ -1065 +1322 _date_range.rhtml file @@ -202,10 +134,10 @@ -2010-09-23T14:37:44.691790Z -2b0b5861c9909cd61032b34b2c224052 -2009-09-25T00:39:02.685664Z -2902 +2010-11-19T13:04:48.784870Z +43628f95cde9503c20744c3b9fe9dfcd +2010-10-06T18:23:45.014848Z +4235 edavis10 has-props @@ -228,5 +160,5 @@ -1729 +1736
--- a/app/views/timelog/.svn/prop-base/_report_criteria.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/timelog/.svn/prop-base/details.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/prop-base/index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- a/app/views/timelog/.svn/prop-base/report.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/.svn/text-base/_date_range.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -28,9 +28,9 @@ <div class="tabs"> <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %> <ul> - <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue }), - :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li> - <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project, :issue_id => @issue}), + <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue }), + :class => (@controller.action_name == 'index' ? 'selected' : nil)) %></li> + <li><%= link_to(l(:label_report), url_params.merge({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}), :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li> </ul> </div>
--- a/app/views/timelog/.svn/text-base/_list.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/.svn/text-base/_list.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -31,7 +31,7 @@ :title => l(:button_edit) %> <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry, :project_id => nil}, :confirm => l(:text_are_you_sure), - :method => :post, + :method => :delete, :title => l(:button_delete) %> <% end -%> </td>
--- a/app/views/timelog/.svn/text-base/_report_criteria.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %> -<% hours_for_value = select_hours(hours, criterias[level], value) -%> -<% next if hours_for_value.empty? -%> -<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>"> -<%= '<td></td>' * level %> -<td><%= h(format_criteria_value(criterias[level], value)) %></td> -<%= '<td></td>' * (criterias.length - level - 1) -%> - <% total = 0 -%> - <% @periods.each do |period| -%> - <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%> - <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> - <% end -%> - <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> -</tr> -<% if criterias.length > level+1 -%> - <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %> -<% end -%> - -<% end %>
--- a/app/views/timelog/.svn/text-base/details.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -<div class="contextual"> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> -</div> - -<%= render_timelog_breadcrumb %> - -<h2><%= l(:label_spent_time) %></h2> - -<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> -<%# TOOD: remove the project_id and issue_id hidden fields, that information is -already in the URI %> -<%= hidden_field_tag('project_id', params[:project_id]) if @project %> -<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> -<%= render :partial => 'date_range' %> -<% end %> - -<div class="total-hours"> -<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> -</div> - -<% unless @entries.empty? %> -<%= render :partial => 'list', :locals => { :entries => @entries }%> -<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p> - -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %> - <%= f.link_to 'CSV', :url => params %> -<% end %> -<% end %> - -<% html_title l(:label_spent_time), l(:label_details) %> - -<% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %> -<% end %>
--- a/app/views/timelog/.svn/text-base/edit.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/.svn/text-base/edit.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,11 @@ <h2><%= l(:label_spent_time) %></h2> -<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %> +<% labelled_tabular_form_for(:time_entry, @time_entry, :url => { + :action => (@time_entry.new_record? ? 'create' : 'update'), + :id => @time_entry, + :project_id => @time_entry.project + }, + :html => {:method => @time_entry.new_record? ? :post : :put}) do |f| %> <%= error_messages_for 'time_entry' %> <%= back_url_hidden_field_tag %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/.svn/text-base/index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,35 @@ +<div class="contextual"> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> +</div> + +<%= render_timelog_breadcrumb %> + +<h2><%= l(:label_spent_time) %></h2> + +<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> +<%# TOOD: remove the project_id and issue_id hidden fields, that information is +already in the URI %> +<%= hidden_field_tag('project_id', params[:project_id]) if @project %> +<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> +<%= render :partial => 'date_range' %> +<% end %> + +<div class="total-hours"> +<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> +</div> + +<% unless @entries.empty? %> +<%= render :partial => 'list', :locals => { :entries => @entries }%> +<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p> + +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %> + <%= f.link_to 'CSV', :url => params %> +<% end %> +<% end %> + +<% html_title l(:label_spent_time), l(:label_details) %> + +<% content_for :header_tags do %> + <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %> +<% end %>
--- a/app/views/timelog/.svn/text-base/report.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -<div class="contextual"> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> -</div> - -<%= render_timelog_breadcrumb %> - -<h2><%= l(:label_spent_time) %></h2> - -<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> - <% @criterias.each do |criteria| %> - <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> - <% end %> - <%# TODO: get rid of the project_id field, that should already be in the URL %> - <%= hidden_field_tag('project_id', params[:project_id]) if @project %> - <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> - <%= render :partial => 'date_range' %> - - <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], - [l(:label_month), 'month'], - [l(:label_week), 'week'], - [l(:label_day_plural).titleize, 'day']], @columns), - :onchange => "this.form.onsubmit();" %> - - <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), - :onchange => "this.form.onsubmit();", - :style => 'width: 200px', - :id => nil, - :disabled => (@criterias.length >= 3)) %> - <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, - :method => :get, - :update => 'content' - }, :class => 'icon icon-reload' %></p> -<% end %> - -<% unless @criterias.empty? %> -<div class="total-hours"> -<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> -</div> - -<% unless @hours.empty? %> -<table class="list" id="time-report"> -<thead> -<tr> -<% @criterias.each do |criteria| %> - <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th> -<% end %> -<% columns_width = (40 / (@periods.length+1)).to_i %> -<% @periods.each do |period| %> - <th class="period" width="<%= columns_width %>%"><%= period %></th> -<% end %> - <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th> -</tr> -</thead> -<tbody> -<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %> - <tr class="total"> - <td><%= l(:label_total) %></td> - <%= '<td></td>' * (@criterias.size - 1) %> - <% total = 0 -%> - <% @periods.each do |period| -%> - <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%> - <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> - <% end -%> - <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> - </tr> -</tbody> -</table> - -<% other_formats_links do |f| %> - <%= f.link_to 'CSV', :url => params %> -<% end %> -<% end %> -<% end %> - -<% html_title l(:label_spent_time), l(:label_report) %> -
--- a/app/views/timelog/_date_range.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/_date_range.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -28,9 +28,9 @@ <div class="tabs"> <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %> <ul> - <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue }), - :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li> - <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project, :issue_id => @issue}), + <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'index', :project_id => @project, :issue_id => @issue }), + :class => (@controller.action_name == 'index' ? 'selected' : nil)) %></li> + <li><%= link_to(l(:label_report), url_params.merge({:controller => 'time_entry_reports', :action => 'report', :project_id => @project, :issue_id => @issue}), :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li> </ul> </div>
--- a/app/views/timelog/_list.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/_list.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -31,7 +31,7 @@ :title => l(:button_edit) %> <%= link_to image_tag('delete.png'), {:controller => 'timelog', :action => 'destroy', :id => entry, :project_id => nil}, :confirm => l(:text_are_you_sure), - :method => :post, + :method => :delete, :title => l(:button_delete) %> <% end -%> </td>
--- a/app/views/timelog/_report_criteria.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -<% @hours.collect {|h| h[criterias[level]].to_s}.uniq.each do |value| %> -<% hours_for_value = select_hours(hours, criterias[level], value) -%> -<% next if hours_for_value.empty? -%> -<tr class="<%= cycle('odd', 'even') %> <%= 'last-level' unless criterias.length > level+1 %>"> -<%= '<td></td>' * level %> -<td><%= h(format_criteria_value(criterias[level], value)) %></td> -<%= '<td></td>' * (criterias.length - level - 1) -%> - <% total = 0 -%> - <% @periods.each do |period| -%> - <% sum = sum_hours(select_hours(hours_for_value, @columns, period.to_s)); total += sum -%> - <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> - <% end -%> - <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> -</tr> -<% if criterias.length > level+1 -%> - <%= render(:partial => 'report_criteria', :locals => {:criterias => criterias, :hours => hours_for_value, :level => (level + 1)}) %> -<% end -%> - -<% end %>
--- a/app/views/timelog/details.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -<div class="contextual"> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> -</div> - -<%= render_timelog_breadcrumb %> - -<h2><%= l(:label_spent_time) %></h2> - -<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> -<%# TOOD: remove the project_id and issue_id hidden fields, that information is -already in the URI %> -<%= hidden_field_tag('project_id', params[:project_id]) if @project %> -<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> -<%= render :partial => 'date_range' %> -<% end %> - -<div class="total-hours"> -<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> -</div> - -<% unless @entries.empty? %> -<%= render :partial => 'list', :locals => { :entries => @entries }%> -<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p> - -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %> - <%= f.link_to 'CSV', :url => params %> -<% end %> -<% end %> - -<% html_title l(:label_spent_time), l(:label_details) %> - -<% content_for :header_tags do %> - <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %> -<% end %>
--- a/app/views/timelog/edit.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/timelog/edit.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,11 @@ <h2><%= l(:label_spent_time) %></h2> -<% labelled_tabular_form_for :time_entry, @time_entry, :url => {:action => 'edit', :id => @time_entry, :project_id => @time_entry.project} do |f| %> +<% labelled_tabular_form_for(:time_entry, @time_entry, :url => { + :action => (@time_entry.new_record? ? 'create' : 'update'), + :id => @time_entry, + :project_id => @time_entry.project + }, + :html => {:method => @time_entry.new_record? ? :post : :put}) do |f| %> <%= error_messages_for 'time_entry' %> <%= back_url_hidden_field_tag %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/timelog/index.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,35 @@ +<div class="contextual"> +<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'new', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> +</div> + +<%= render_timelog_breadcrumb %> + +<h2><%= l(:label_spent_time) %></h2> + +<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %> +<%# TOOD: remove the project_id and issue_id hidden fields, that information is +already in the URI %> +<%= hidden_field_tag('project_id', params[:project_id]) if @project %> +<%= hidden_field_tag 'issue_id', params[:issue_id] if @issue %> +<%= render :partial => 'date_range' %> +<% end %> + +<div class="total-hours"> +<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> +</div> + +<% unless @entries.empty? %> +<%= render :partial => 'list', :locals => { :entries => @entries }%> +<p class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></p> + +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => params.merge({:issue_id => @issue, :key => User.current.rss_key}) %> + <%= f.link_to 'CSV', :url => params %> +<% end %> +<% end %> + +<% html_title l(:label_spent_time), l(:label_details) %> + +<% content_for :header_tags do %> + <%= auto_discovery_link_tag(:atom, {:issue_id => @issue, :format => 'atom', :key => User.current.rss_key}, :title => l(:label_spent_time)) %> +<% end %>
--- a/app/views/timelog/report.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -<div class="contextual"> -<%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :project_id => @project, :issue_id => @issue}, :class => 'icon icon-time-add' %> -</div> - -<%= render_timelog_breadcrumb %> - -<h2><%= l(:label_spent_time) %></h2> - -<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %> - <% @criterias.each do |criteria| %> - <%= hidden_field_tag 'criterias[]', criteria, :id => nil %> - <% end %> - <%# TODO: get rid of the project_id field, that should already be in the URL %> - <%= hidden_field_tag('project_id', params[:project_id]) if @project %> - <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %> - <%= render :partial => 'date_range' %> - - <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'], - [l(:label_month), 'month'], - [l(:label_week), 'week'], - [l(:label_day_plural).titleize, 'day']], @columns), - :onchange => "this.form.onsubmit();" %> - - <%= l(:button_add) %>: <%= select_tag('criterias[]', options_for_select([[]] + (@available_criterias.keys - @criterias).collect{|k| [l_or_humanize(@available_criterias[k][:label]), k]}), - :onchange => "this.form.onsubmit();", - :style => 'width: 200px', - :id => nil, - :disabled => (@criterias.length >= 3)) %> - <%= link_to_remote l(:button_clear), {:url => {:project_id => @project, :period_type => params[:period_type], :period => params[:period], :from => @from, :to => @to, :columns => @columns}, - :method => :get, - :update => 'content' - }, :class => 'icon icon-reload' %></p> -<% end %> - -<% unless @criterias.empty? %> -<div class="total-hours"> -<p><%= l(:label_total) %>: <%= html_hours(l_hours(@total_hours)) %></p> -</div> - -<% unless @hours.empty? %> -<table class="list" id="time-report"> -<thead> -<tr> -<% @criterias.each do |criteria| %> - <th><%= l_or_humanize(@available_criterias[criteria][:label]) %></th> -<% end %> -<% columns_width = (40 / (@periods.length+1)).to_i %> -<% @periods.each do |period| %> - <th class="period" width="<%= columns_width %>%"><%= period %></th> -<% end %> - <th class="total" width="<%= columns_width %>%"><%= l(:label_total) %></th> -</tr> -</thead> -<tbody> -<%= render :partial => 'report_criteria', :locals => {:criterias => @criterias, :hours => @hours, :level => 0} %> - <tr class="total"> - <td><%= l(:label_total) %></td> - <%= '<td></td>' * (@criterias.size - 1) %> - <% total = 0 -%> - <% @periods.each do |period| -%> - <% sum = sum_hours(select_hours(@hours, @columns, period.to_s)); total += sum -%> - <td class="hours"><%= html_hours("%.2f" % sum) if sum > 0 %></td> - <% end -%> - <td class="hours"><%= html_hours("%.2f" % total) if total > 0 %></td> - </tr> -</tbody> -</table> - -<% other_formats_links do |f| %> - <%= f.link_to 'CSV', :url => params %> -<% end %> -<% end %> -<% end %> - -<% html_title l(:label_spent_time), l(:label_report) %> -
--- a/app/views/trackers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/trackers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/trackers http://redmine.rubyforge.org/svn
--- a/app/views/users/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/4047/trunk/app/views/users +/svn/!svn/ver/4382/trunk/app/views/users END _general.rhtml K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/3037/trunk/app/views/users/_general.rhtml +/svn/!svn/ver/4249/trunk/app/views/users/_general.rhtml END _memberships.rhtml K 25 @@ -19,35 +19,47 @@ K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/3160/trunk/app/views/users/_groups.rhtml +/svn/!svn/ver/4230/trunk/app/views/users/_groups.rhtml +END +new.html.erb +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/4229/trunk/app/views/users/new.html.erb +END +_mail_notifications.html.erb +K 25 +svn:wc:ra_dav:version-url +V 69 +/svn/!svn/ver/4223/trunk/app/views/users/_mail_notifications.html.erb END show.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/4047/trunk/app/views/users/show.rhtml +/svn/!svn/ver/4382/trunk/app/views/users/show.rhtml END _form.rhtml K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/3037/trunk/app/views/users/_form.rhtml +/svn/!svn/ver/4223/trunk/app/views/users/_form.rhtml END edit.rhtml K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3495/trunk/app/views/users/edit.rhtml +/svn/!svn/ver/4231/trunk/app/views/users/edit.rhtml +END +_preferences.html.erb +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/!svn/ver/4223/trunk/app/views/users/_preferences.html.erb END index.rhtml K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/3600/trunk/app/views/users/index.rhtml +/svn/!svn/ver/4231/trunk/app/views/users/index.rhtml END -add.rhtml -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/3204/trunk/app/views/users/add.rhtml -END
--- a/app/views/users/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/users http://redmine.rubyforge.org/svn -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2010-11-07T14:15:01.891476Z +4382 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.699769Z -1ab6a8599eeede034b90f463a85d1042 -2009-11-13T18:11:10.447527Z -3037 -jplang +2010-11-19T13:04:49.388892Z +27e27971f72ee72e276157b29606a4f8 +2010-10-11T20:34:33.692909Z +4249 +jbbarth has-props @@ -58,7 +58,7 @@ -398 +421 _memberships.rhtml file @@ -100,11 +100,11 @@ -2010-09-23T14:37:44.699769Z -fd7d948f1de9d087496cfb8f01ff76db -2009-12-12T11:05:06.206786Z -3160 -jplang +2010-11-19T13:04:49.388892Z +f19cc195f524459954b4b4be5bfdcff5 +2010-09-30T18:22:46.611444Z +4230 +edavis10 has-props @@ -126,7 +126,75 @@ -336 +366 + +new.html.erb +file + + + + +2010-11-19T13:04:49.388892Z +488647d93840c1ffa5834cc45817c1c3 +2010-09-29T16:00:45.891709Z +4229 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +530 + +_mail_notifications.html.erb +file + + + + +2010-11-19T13:04:49.388892Z +9617ce493c6f68e4a861de49a13fc0b1 +2010-09-28T22:13:06.534232Z +4223 +edavis10 + + + + + + + + + + + + + + + + + + + + + +872 show.rhtml file @@ -134,11 +202,11 @@ -2010-09-24T12:48:26.319756Z -a56205296f0730d3ca46c249abcab568 -2010-08-27T14:05:54.014502Z -4047 -edavis10 +2010-11-19T13:04:49.388892Z +1914aa4c363a1dab0cdba1e49ccc13ff +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -160,7 +228,7 @@ -2598 +2584 _form.rhtml file @@ -168,11 +236,11 @@ -2010-09-23T14:37:44.699769Z -e0a6a33bb1cfe7131245520d553108e4 -2009-11-13T18:11:10.447527Z -3037 -jplang +2010-11-19T13:04:49.388892Z +ac91549a6b11efcad3478c0c17248508 +2010-09-28T22:13:06.534232Z +4223 +edavis10 has-props @@ -194,7 +262,7 @@ -1583 +1820 edit.rhtml file @@ -202,11 +270,11 @@ -2010-09-23T14:37:44.703792Z -029f53d8ee91ea4b11874008ee6f3a71 -2010-02-26T16:01:04.817813Z -3495 -jplang +2010-11-19T13:04:49.392852Z +25485f87d56ef17bf204588edb4a0bed +2010-10-04T15:36:16.880272Z +4231 +edavis10 has-props @@ -228,7 +296,41 @@ -416 +375 + +_preferences.html.erb +file + + + + +2010-11-19T13:04:49.392852Z +ebc1d625f2d6809ea491e7303f758e7a +2010-09-28T22:13:06.534232Z +4223 +edavis10 + + + + + + + + + + + + + + + + + + + + + +441 index.rhtml file @@ -236,11 +338,11 @@ -2010-09-23T14:37:44.703792Z -16c60ad979f898ab6bfce6739979836c -2010-03-17T20:46:22.413470Z -3600 -jplang +2010-11-19T13:04:49.392852Z +ef23d8be0fbbefff33820156bb8f422a +2010-10-04T15:36:16.880272Z +4231 +edavis10 has-props @@ -262,39 +364,5 @@ -2162 +2152 -add.rhtml -file - - - - -2010-09-23T14:37:44.703792Z -bcadf1f2d1761aa7cdd622920597f4bb -2009-12-20T10:51:33.049429Z -3204 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -527 -
--- a/app/views/users/.svn/prop-base/add.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/prop-base/new.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- a/app/views/users/.svn/text-base/_form.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/_form.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -32,4 +32,14 @@ <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p> </div> </div> + +<div class="box"> +<h3><%=l(:field_mail_notification)%></h3> +<%= render :partial => 'users/mail_notifications' %> +</div> + +<div class="box tabular"> +<h3><%=l(:label_preferences)%></h3> +<%= render :partial => 'users/preferences' %> +</div> <!--[eoform:user]-->
--- a/app/views/users/.svn/text-base/_general.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/_general.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ -<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "edit", :tab => nil }, :html => { :class => nil } do |f| %> +<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "update", :tab => nil }, :html => { :method => :put, :class => nil } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <% if @user.active? -%> - <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label> + <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> <% end -%> <p><%= submit_tag l(:button_save) %></p> <% end %>
--- a/app/views/users/.svn/text-base/_groups.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/_groups.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<% form_for(:user, :url => { :action => 'edit' }) do %> +<% form_for(:user, :url => { :action => 'update' }, :html => {:method => :put}) do %> <div class="box"> <% Group.all.sort.each do |group| %> <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br />
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/text-base/_mail_notifications.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,12 @@ +<p> +<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), + :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> +</p> +<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> +<p><% @user.projects.each do |project| %> + <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> +<% end %></p> +<p><em><%= l(:text_user_mail_option) %></em></p> +<% end %> +<p><label><%= l(:label_user_mail_no_self_notified) %></label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %></p> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/text-base/_preferences.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,6 @@ +<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> +<p><%= pref_fields.check_box :hide_mail %></p> +<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> +<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> +<% end %> +
--- a/app/views/users/.svn/text-base/add.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%></h2> - -<% labelled_tabular_form_for :user, @user, :url => { :action => "add" }, :html => { :class => nil } do |f| %> - <%= render :partial => 'form', :locals => { :f => f } %> - <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> - <p> - <%= submit_tag l(:button_create) %> - <%= submit_tag l(:button_create_and_continue), :name => 'continue' %> - </p> -<% end %>
--- a/app/views/users/.svn/text-base/edit.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/edit.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %> +<%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> <%= change_status_link(@user) %> </div>
--- a/app/views/users/.svn/text-base/index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/index.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %> +<%= link_to l(:label_user_new), {:action => 'new'}, :class => 'icon icon-add' %> </div> <h2><%=l(:label_user_plural)%></h2> @@ -30,7 +30,7 @@ <tbody> <% for user in @users -%> <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>"> - <td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), :action => 'edit', :id => user %></td> + <td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %></td> <td class="firstname"><%= h(user.firstname) %></td> <td class="lastname"><%= h(user.lastname) %></td> <td class="email"><%= mail_to(h(user.mail)) %></td>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/.svn/text-base/new.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,10 @@ +<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%></h2> + +<% labelled_tabular_form_for :user, @user, :url => { :action => "create" }, :html => { :class => nil } do |f| %> + <%= render :partial => 'form', :locals => { :f => f } %> + <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> + <p> + <%= submit_tag l(:button_create) %> + <%= submit_tag l(:button_create_and_continue), :name => 'continue' %> + </p> +<% end %>
--- a/app/views/users/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %> +<%= link_to(l(:button_edit), edit_user_path(@user), :class => 'icon icon-edit') if User.current.admin? %> </div> <h2><%= avatar @user, :size => "50" %> <%=h @user.name %></h2> @@ -9,7 +9,7 @@ <% unless @user.pref.hide_mail %> <li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li> <% end %> - <% for custom_value in @custom_values %> + <% @user.visible_custom_field_values.each do |custom_value| %> <% if !custom_value.value.blank? %> <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> <% end %>
--- a/app/views/users/_form.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/_form.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -32,4 +32,14 @@ <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p> </div> </div> + +<div class="box"> +<h3><%=l(:field_mail_notification)%></h3> +<%= render :partial => 'users/mail_notifications' %> +</div> + +<div class="box tabular"> +<h3><%=l(:label_preferences)%></h3> +<%= render :partial => 'users/preferences' %> +</div> <!--[eoform:user]-->
--- a/app/views/users/_general.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/_general.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ -<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "edit", :tab => nil }, :html => { :class => nil } do |f| %> +<% labelled_tabular_form_for :user, @user, :url => { :controller => 'users', :action => "update", :tab => nil }, :html => { :method => :put, :class => nil } do |f| %> <%= render :partial => 'form', :locals => { :f => f } %> <% if @user.active? -%> - <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label> + <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> <% end -%> <p><%= submit_tag l(:button_save) %></p> <% end %>
--- a/app/views/users/_groups.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/_groups.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,4 +1,4 @@ -<% form_for(:user, :url => { :action => 'edit' }) do %> +<% form_for(:user, :url => { :action => 'update' }, :html => {:method => :put}) do %> <div class="box"> <% Group.all.sort.each do |group| %> <label><%= check_box_tag 'user[group_ids][]', group.id, @user.groups.include?(group) %> <%=h group %></label><br />
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/_mail_notifications.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,12 @@ +<p> +<%= select_tag 'notification_option', options_for_select(@notification_options.collect {|o| [l(o.last), o.first]}, @notification_option.to_sym), + :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %> +</p> +<% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %> +<p><% @user.projects.each do |project| %> + <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br /> +<% end %></p> +<p><em><%= l(:text_user_mail_option) %></em></p> +<% end %> +<p><label><%= l(:label_user_mail_no_self_notified) %></label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %></p> +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/_preferences.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,6 @@ +<% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %> +<p><%= pref_fields.check_box :hide_mail %></p> +<p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p> +<p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p> +<% end %> +
--- a/app/views/users/add.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%></h2> - -<% labelled_tabular_form_for :user, @user, :url => { :action => "add" }, :html => { :class => nil } do |f| %> - <%= render :partial => 'form', :locals => { :f => f } %> - <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> - <p> - <%= submit_tag l(:button_create) %> - <%= submit_tag l(:button_create_and_continue), :name => 'continue' %> - </p> -<% end %>
--- a/app/views/users/edit.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/edit.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to l(:label_profile), {:controller => 'users', :action => 'show', :id => @user}, :class => 'icon icon-user' %> +<%= link_to l(:label_profile), user_path(@user), :class => 'icon icon-user' %> <%= change_status_link(@user) %> </div>
--- a/app/views/users/index.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/index.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %> +<%= link_to l(:label_user_new), {:action => 'new'}, :class => 'icon icon-add' %> </div> <h2><%=l(:label_user_plural)%></h2> @@ -30,7 +30,7 @@ <tbody> <% for user in @users -%> <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>"> - <td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), :action => 'edit', :id => user %></td> + <td class="username"><%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %></td> <td class="firstname"><%= h(user.firstname) %></td> <td class="lastname"><%= h(user.lastname) %></td> <td class="email"><%= mail_to(h(user.mail)) %></td>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/users/new.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,10 @@ +<h2><%= link_to l(:label_user_plural), :controller => 'users', :action => 'index' %> » <%=l(:label_user_new)%></h2> + +<% labelled_tabular_form_for :user, @user, :url => { :action => "create" }, :html => { :class => nil } do |f| %> + <%= render :partial => 'form', :locals => { :f => f } %> + <p><label><%= check_box_tag 'send_information', 1, true %> <%= l(:label_send_information) %></label></p> + <p> + <%= submit_tag l(:button_create) %> + <%= submit_tag l(:button_create_and_continue), :name => 'continue' %> + </p> +<% end %>
--- a/app/views/users/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/users/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ <div class="contextual"> -<%= link_to(l(:button_edit), {:controller => 'users', :action => 'edit', :id => @user}, :class => 'icon icon-edit') if User.current.admin? %> +<%= link_to(l(:button_edit), edit_user_path(@user), :class => 'icon icon-edit') if User.current.admin? %> </div> <h2><%= avatar @user, :size => "50" %> <%=h @user.name %></h2> @@ -9,7 +9,7 @@ <% unless @user.pref.hide_mail %> <li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li> <% end %> - <% for custom_value in @custom_values %> + <% @user.visible_custom_field_values.each do |custom_value| %> <% if !custom_value.value.blank? %> <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> <% end %>
--- a/app/views/versions/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/versions/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/4101/trunk/app/views/versions +/svn/!svn/ver/4307/trunk/app/views/versions END index.html.erb K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/4101/trunk/app/views/versions/show.rhtml +/svn/!svn/ver/4307/trunk/app/views/versions/show.rhtml END _form.rhtml K 25
--- a/app/views/versions/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/versions/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/versions http://redmine.rubyforge.org/svn -2010-09-18T17:30:22.509570Z -4101 +2010-10-29T22:40:02.439890Z +4307 jbbarth @@ -100,10 +100,10 @@ -2010-09-24T12:48:28.303878Z -ead91e611c5c576ba9128ca9bd97277f -2010-09-18T17:30:22.509570Z -4101 +2010-11-19T13:04:49.396842Z +ae897448ea943e1856633a3683c17a79 +2010-10-29T22:40:02.439890Z +4307 jbbarth has-props @@ -126,7 +126,7 @@ -1954 +1993 _form.rhtml file
--- a/app/views/versions/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/versions/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <div class="contextual"> <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => @version}, :class => 'icon icon-edit' %> -<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :page => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @project.wiki.nil? %> +<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :project_id => @version.project, :id => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @version.project.wiki.nil? %> <%= call_hook(:view_versions_show_contextual, { :version => @version, :project => @project }) %> </div>
--- a/app/views/versions/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/versions/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <div class="contextual"> <%= link_to_if_authorized l(:button_edit), {:controller => 'versions', :action => 'edit', :id => @version}, :class => 'icon icon-edit' %> -<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :page => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @project.wiki.nil? %> +<%= link_to_if_authorized(l(:button_edit_associated_wikipage, :page_title => @version.wiki_page_title), {:controller => 'wiki', :action => 'edit', :project_id => @version.project, :id => Wiki.titleize(@version.wiki_page_title)}, :class => 'icon icon-edit') unless @version.wiki_page_title.blank? || @version.project.wiki.nil? %> <%= call_hook(:view_versions_show_contextual, { :version => @version, :project => @project }) %> </div>
--- a/app/views/watchers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/watchers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/watchers http://redmine.rubyforge.org/svn
--- a/app/views/welcome/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/welcome/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/welcome http://redmine.rubyforge.org/svn
--- a/app/views/wiki/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4092/trunk/app/views/wiki +/svn/!svn/ver/4375/trunk/app/views/wiki END export_multiple.rhtml K 25 @@ -9,11 +9,17 @@ V 61 /svn/!svn/ver/3026/trunk/app/views/wiki/export_multiple.rhtml END +index.html.erb +K 25 +svn:wc:ra_dav:version-url +V 54 +/svn/!svn/ver/4290/trunk/app/views/wiki/index.html.erb +END show.rhtml K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/3371/trunk/app/views/wiki/show.rhtml +/svn/!svn/ver/4303/trunk/app/views/wiki/show.rhtml END export.rhtml K 25 @@ -25,43 +31,31 @@ K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/3559/trunk/app/views/wiki/history.rhtml -END -special_page_index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4092/trunk/app/views/wiki/special_page_index.rhtml -END -special_date_index.rhtml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/4047/trunk/app/views/wiki/special_date_index.rhtml +/svn/!svn/ver/4303/trunk/app/views/wiki/history.rhtml END edit.rhtml K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/3500/trunk/app/views/wiki/edit.rhtml +/svn/!svn/ver/4303/trunk/app/views/wiki/edit.rhtml END rename.rhtml K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/1698/trunk/app/views/wiki/rename.rhtml +/svn/!svn/ver/4375/trunk/app/views/wiki/rename.rhtml END _sidebar.rhtml K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/3632/trunk/app/views/wiki/_sidebar.rhtml +/svn/!svn/ver/4296/trunk/app/views/wiki/_sidebar.rhtml END diff.rhtml K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/3128/trunk/app/views/wiki/diff.rhtml +/svn/!svn/ver/4296/trunk/app/views/wiki/diff.rhtml END _content.rhtml K 25 @@ -73,11 +67,17 @@ K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/3585/trunk/app/views/wiki/annotate.rhtml +/svn/!svn/ver/4296/trunk/app/views/wiki/annotate.rhtml END destroy.rhtml K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/2676/trunk/app/views/wiki/destroy.rhtml +/svn/!svn/ver/4296/trunk/app/views/wiki/destroy.rhtml END +date_index.html.erb +K 25 +svn:wc:ra_dav:version-url +V 59 +/svn/!svn/ver/4303/trunk/app/views/wiki/date_index.html.erb +END
--- a/app/views/wiki/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/wiki http://redmine.rubyforge.org/svn -2010-09-16T21:26:30.564728Z -4092 -jbbarth +2010-11-06T14:30:32.528294Z +4375 +jplang @@ -60,17 +60,51 @@ 1176 +index.html.erb +file + + + + +2010-11-19T13:04:50.809800Z +d47125b655bae6af3af29514ca23ec15 +2010-10-25T16:16:46.309025Z +4290 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +894 + show.rhtml file -2010-09-23T14:37:44.719778Z -cd34ce34ba4d75de58ad8c2643dd1858 -2010-02-06T09:30:53.659842Z -3371 -jplang +2010-11-19T13:04:50.809800Z +1ebc19864533a067dc46a3bc6f3e9b22 +2010-10-28T21:25:38.778234Z +4303 +edavis10 has-props @@ -92,7 +126,7 @@ -3737 +3882 export.rhtml file @@ -134,78 +168,10 @@ -2010-09-23T14:37:44.719778Z -00384fcdff6734983e2d36ed71f666bf -2010-03-10T19:16:03.577089Z -3559 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1495 - -special_page_index.rhtml -file - - - - -2010-09-24T12:48:29.015971Z -7c00c56b3b3fb34c4ebdc4d7f20c5e01 -2010-09-16T21:26:30.564728Z -4092 -jbbarth -has-props - - - - - - - - - - - - - - - - - - - - -916 - -special_date_index.rhtml -file - - - - -2010-09-24T12:48:29.015971Z -a2538a8dea3592d9592ce74b95c88184 -2010-08-27T14:05:54.014502Z -4047 +2010-11-19T13:04:50.812967Z +d489789686b9d26149c0583f775ba238 +2010-10-28T21:25:38.778234Z +4303 edavis10 has-props @@ -228,7 +194,7 @@ -1113 +1582 edit.rhtml file @@ -236,11 +202,11 @@ -2010-09-23T14:37:44.719778Z -f53404549c5ad3730761d4afd025c3bc -2010-02-28T09:43:13.073123Z -3500 -jplang +2010-11-19T13:04:50.812967Z +cc9828c34998619dbd4b4925bf511be8 +2010-10-28T21:25:38.778234Z +4303 +edavis10 has-props @@ -262,7 +228,7 @@ -1260 +1282 rename.rhtml file @@ -270,10 +236,10 @@ -2010-09-23T14:37:44.719778Z -9231847b74349b93a946c5046daa4bcb -2008-07-26T11:46:24.917066Z -1698 +2010-11-19T13:04:50.812967Z +b45d32467f7beb06dbe055ecf7fdb247 +2010-11-06T14:30:32.528294Z +4375 jplang has-props @@ -296,7 +262,7 @@ -429 +580 _sidebar.rhtml file @@ -304,11 +270,11 @@ -2010-09-23T14:37:44.719778Z -baf90328359ee59f0123edd67897d66e -2010-04-11T12:56:18.077630Z -3632 -jplang +2010-11-19T13:04:50.812967Z +619db9d2a58a28c4b5c4baeaee88cc41 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -330,7 +296,7 @@ -391 +343 diff.rhtml file @@ -338,11 +304,11 @@ -2010-09-23T14:37:44.719778Z -a50fef8895fe6a7bf414f919d7dbec8b -2009-12-06T17:04:33.026531Z -3128 -jplang +2010-11-19T13:04:50.812967Z +0379bb47f37911b04eb8391f397ac4ec +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -364,7 +330,7 @@ -827 +819 _content.rhtml file @@ -406,11 +372,11 @@ -2010-09-23T14:37:44.719778Z -ea9a5c54a16a716cdc40736caac6d954 -2010-03-14T13:22:50.317701Z -3585 -jplang +2010-11-19T13:04:50.812967Z +36a354ea1a705ec4843972e520ce2bd6 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -432,7 +398,7 @@ -1214 +1212 destroy.rhtml file @@ -440,11 +406,11 @@ -2010-09-23T14:37:44.719778Z -c4faab8bee0cd06ba2460db5f9333a32 -2009-04-21T12:19:56.547537Z -2676 -jplang +2010-11-19T13:04:50.812967Z +5f032c821889bfc8bf9e6eeca1023f58 +2010-10-27T16:27:06.240747Z +4296 +edavis10 has-props @@ -466,5 +432,39 @@ -883 +908 +date_index.html.erb +file + + + + +2010-11-19T13:04:50.812967Z +5edb3698546c4aad9913945d39005221 +2010-10-28T21:25:38.778234Z +4303 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +1117 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/.svn/prop-base/date_index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/.svn/prop-base/index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- a/app/views/wiki/.svn/prop-base/special_date_index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/wiki/.svn/prop-base/special_page_index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/app/views/wiki/.svn/text-base/_sidebar.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/_sidebar.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -4,6 +4,6 @@ <h3><%= l(:label_wiki) %></h3> -<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br /> -<%= link_to l(:label_index_by_title), {:action => 'special', :page => 'Page_index'} %><br /> -<%= link_to l(:label_index_by_date), {:action => 'special', :page => 'Date_index'} %><br /> +<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br /> +<%= link_to l(:label_index_by_title), {:action => 'index'} %><br /> +<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />
--- a/app/views/wiki/.svn/text-base/annotate.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/annotate.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <div class="contextual"> -<%= link_to(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit') %> -<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit') %> +<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> <h2><%= @page.pretty_title %></h2> <p> -<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'index', :page => @page.title, :version => @annotate.content.version %> +<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :id => @page.title, :version => @annotate.content.version %> <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em> </p> @@ -18,7 +18,7 @@ <% @annotate.lines.each do |line| -%> <tr class="bloc-<%= colors[line[0]] %>"> <th class="line-num"><%= line_num %></th> - <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td> + <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title, :version => line[0] %></td> <td class="author"><%= h(line[1]) %></td> <td class="line-code"><pre><%=h line[2] %></pre></td> </tr>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/.svn/text-base/date_index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,33 @@ +<div class="contextual"> +<%= watcher_tag(@wiki, User.current) %> +</div> + +<h2><%= l(:label_index_by_date) %></h2> + +<% if @pages.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + +<% @pages_by_date.keys.sort.reverse.each do |date| %> +<h3><%= format_date(date) %></h3> +<ul> +<% @pages_by_date[date].each do |page| %> + <li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li> +<% end %> +</ul> +<% end %> + +<% content_for :sidebar do %> + <%= render :partial => 'sidebar' %> +<% end %> + +<% unless @pages.empty? %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> +<% end %> +<% end %> + +<% content_for :header_tags do %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<% end %>
--- a/app/views/wiki/.svn/text-base/destroy.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/destroy.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <h2><%=h @page.pretty_title %></h2> -<% form_tag({}) do %> +<% form_tag({}, :method => :delete) do %> <div class="box"> <p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p> <p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br /> @@ -15,5 +15,5 @@ </div> <%= submit_tag l(:button_apply) %> -<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title %> +<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title %> <% end %>
--- a/app/views/wiki/.svn/text-base/diff.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/diff.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ <div class="contextual"> -<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> <h2><%= @page.pretty_title %></h2> <p> -<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'index', :page => @page.title, :version => @diff.content_from.version %> +<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %> <em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em> → -<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'index', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> +<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em> </p>
--- a/app/views/wiki/.svn/text-base/edit.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/edit.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <h2><%=h @page.pretty_title %></h2> -<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %> +<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:method => :put, :multipart => true, :id => 'wiki_form'} do |f| %> <%= f.hidden_field :version %> <%= error_messages_for 'content' %> @@ -10,8 +10,8 @@ <p><%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'wiki', :action => 'preview', :id => @project, :page => @page.title }, - :method => 'post', + { :url => { :controller => 'wiki', :action => 'preview', :project_id => @project, :id => @page.title }, + :method => :post, :update => 'preview', :with => "Form.serialize('wiki_form')", :complete => "Element.scrollTo('preview')"
--- a/app/views/wiki/.svn/text-base/history.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/history.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -3,6 +3,7 @@ <h3><%= l(:label_history) %></h3> <% form_tag({:action => "diff"}, :method => :get) do %> + <%= hidden_field_tag('project_id', h(@project.to_param)) %> <table class="list"> <thead><tr> <th>#</th> @@ -18,13 +19,13 @@ <% line_num = 1 %> <% @versions.each do |ver| %> <tr class="<%= cycle("odd", "even") %>"> - <td class="id"><%= link_to ver.version, :action => 'index', :page => @page.title, :version => ver.version %></td> + <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td> <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td> <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td> <td align="center"><%= format_time(ver.updated_on) %></td> <td><%= link_to_user ver.author %></td> <td><%=h ver.comments %></td> - <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :page => @page.title, :version => ver.version %></td> + <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td> </tr> <% line_num += 1 %> <% end %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/.svn/text-base/index.html.erb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,26 @@ +<div class="contextual"> +<%= watcher_tag(@wiki, User.current) %> +</div> + +<h2><%= l(:label_index_by_title) %></h2> + +<% if @pages.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + +<%= render_page_hierarchy(@pages_by_parent_id) %> + +<% content_for :sidebar do %> + <%= render :partial => 'sidebar' %> +<% end %> + +<% unless @pages.empty? %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> +<% end %> +<% end %> + +<% content_for :header_tags do %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<% end %>
--- a/app/views/wiki/.svn/text-base/rename.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/rename.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -6,7 +6,7 @@ <div class="box"> <p><%= f.text_field :title, :required => true, :size => 100 %></p> <p><%= f.check_box :redirect_existing_links %></p> -<p><%= f.text_field :parent_title, :size => 100 %></p> +<p><%= f.select :parent_id, "<option value=''></option>" + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent), :label => :field_parent_title %></p> </div> <%= submit_tag l(:button_rename) %> <% end %>
--- a/app/views/wiki/.svn/text-base/show.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/.svn/text-base/show.rhtml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,25 +1,25 @@ <div class="contextual"> <% if @editable %> -<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %> +<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %> <%= watcher_tag(@page, User.current) %> -<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> -<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> -<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> -<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> -<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> +<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> +<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> +<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> +<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> +<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> <% end %> -<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> -<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %> +<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %> <% if @content.version != @page.content.version %> <p> - <%= link_to(('« ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %> + <%= link_to(('« ' + l(:label_previous)), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version - 1)) + " - " if @content.version > 1 %> <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %> - <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> - - <%= link_to((l(:label_next) + ' »'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %> - <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %> + <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :project_id => @page.project, :version => @content.version) + ')' if @content.version > 1 %> - + <%= link_to((l(:label_next) + ' »'), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %> + <%= link_to(l(:label_current_version), :action => 'show', :id => @page.title, :project_id => @page.project) %> <br /> <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br /> <%=h @content.comments %> @@ -35,7 +35,7 @@ <div id="wiki_add_attachment"> <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;", :id => 'attach_files_link' %></p> -<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> +<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :project_id => @project, :id => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> <div class="box"> <p><%= render :partial => 'attachments/form' %></p> </div> @@ -46,8 +46,8 @@ <% end %> <% other_formats_links do |f| %> - <%= f.link_to 'HTML', :url => {:page => @page.title, :version => @content.version} %> - <%= f.link_to 'TXT', :url => {:page => @page.title, :version => @content.version} %> + <%= f.link_to 'HTML', :url => {:id => @page.title, :version => @content.version} %> + <%= f.link_to 'TXT', :url => {:id => @page.title, :version => @content.version} %> <% end if User.current.allowed_to?(:export_wiki_pages, @project) %> <% content_for :header_tags do %>
--- a/app/views/wiki/.svn/text-base/special_date_index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -<div class="contextual"> -<%= watcher_tag(@wiki, User.current) %> -</div> - -<h2><%= l(:label_index_by_date) %></h2> - -<% if @pages.empty? %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - -<% @pages_by_date.keys.sort.reverse.each do |date| %> -<h3><%= format_date(date) %></h3> -<ul> -<% @pages_by_date[date].each do |page| %> - <li><%= link_to page.pretty_title, :action => 'index', :page => page.title %></li> -<% end %> -</ul> -<% end %> - -<% content_for :sidebar do %> - <%= render :partial => 'sidebar' %> -<% end %> - -<% unless @pages.empty? %> -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> - <%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> -<% end %> -<% end %> - -<% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> -<% end %>
--- a/app/views/wiki/.svn/text-base/special_page_index.rhtml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -<div class="contextual"> -<%= watcher_tag(@wiki, User.current) %> -</div> - -<h2><%= l(:label_index_by_title) %></h2> - -<% if @pages.empty? %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - -<%= render_page_hierarchy(@pages_by_parent_id) %> - -<% content_for :sidebar do %> - <%= render :partial => 'sidebar' %> -<% end %> - -<% unless @pages.empty? %> -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> - <%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> -<% end %> -<% end %> - -<% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> -<% end %>
--- a/app/views/wiki/_sidebar.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/_sidebar.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -4,6 +4,6 @@ <h3><%= l(:label_wiki) %></h3> -<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br /> -<%= link_to l(:label_index_by_title), {:action => 'special', :page => 'Page_index'} %><br /> -<%= link_to l(:label_index_by_date), {:action => 'special', :page => 'Date_index'} %><br /> +<%= link_to l(:field_start_page), {:action => 'show', :id => nil} %><br /> +<%= link_to l(:label_index_by_title), {:action => 'index'} %><br /> +<%= link_to l(:label_index_by_date), {:action => 'date_index'} %><br />
--- a/app/views/wiki/annotate.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/annotate.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,12 +1,12 @@ <div class="contextual"> -<%= link_to(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit') %> -<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit') %> +<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> <h2><%= @page.pretty_title %></h2> <p> -<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'index', :page => @page.title, :version => @annotate.content.version %> +<%= l(:label_version) %> <%= link_to @annotate.content.version, :action => 'show', :id => @page.title, :version => @annotate.content.version %> <em>(<%= @annotate.content.author ? @annotate.content.author.name : "anonyme" %>, <%= format_time(@annotate.content.updated_on) %>)</em> </p> @@ -18,7 +18,7 @@ <% @annotate.lines.each do |line| -%> <tr class="bloc-<%= colors[line[0]] %>"> <th class="line-num"><%= line_num %></th> - <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title, :version => line[0] %></td> + <td class="revision"><%= link_to line[0], :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title, :version => line[0] %></td> <td class="author"><%= h(line[1]) %></td> <td class="line-code"><pre><%=h line[2] %></pre></td> </tr>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/date_index.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,33 @@ +<div class="contextual"> +<%= watcher_tag(@wiki, User.current) %> +</div> + +<h2><%= l(:label_index_by_date) %></h2> + +<% if @pages.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + +<% @pages_by_date.keys.sort.reverse.each do |date| %> +<h3><%= format_date(date) %></h3> +<ul> +<% @pages_by_date[date].each do |page| %> + <li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li> +<% end %> +</ul> +<% end %> + +<% content_for :sidebar do %> + <%= render :partial => 'sidebar' %> +<% end %> + +<% unless @pages.empty? %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> +<% end %> +<% end %> + +<% content_for :header_tags do %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<% end %>
--- a/app/views/wiki/destroy.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/destroy.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <h2><%=h @page.pretty_title %></h2> -<% form_tag({}) do %> +<% form_tag({}, :method => :delete) do %> <div class="box"> <p><strong><%= l(:text_wiki_page_destroy_question, :descendants => @descendants_count) %></strong></p> <p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_wiki_page_nullify_children) %></label><br /> @@ -15,5 +15,5 @@ </div> <%= submit_tag l(:button_apply) %> -<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'index', :id => @project, :page => @page.title %> +<%= link_to l(:button_cancel), :controller => 'wiki', :action => 'show', :project_id => @project, :id => @page.title %> <% end %>
--- a/app/views/wiki/diff.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/diff.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ <div class="contextual"> -<%= link_to(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> <h2><%= @page.pretty_title %></h2> <p> -<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'index', :page => @page.title, :version => @diff.content_from.version %> +<%= l(:label_version) %> <%= link_to @diff.content_from.version, :action => 'show', :id => @page.title, :version => @diff.content_from.version %> <em>(<%= @diff.content_from.author ? @diff.content_from.author.name : "anonyme" %>, <%= format_time(@diff.content_from.updated_on) %>)</em> → -<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'index', :page => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> +<%= l(:label_version) %> <%= link_to @diff.content_to.version, :action => 'show', :id => @page.title, :version => @diff.content_to.version %>/<%= @page.content.version %> <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em> </p>
--- a/app/views/wiki/edit.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/edit.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,6 +1,6 @@ <h2><%=h @page.pretty_title %></h2> -<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:multipart => true, :id => 'wiki_form'} do |f| %> +<% form_for :content, @content, :url => {:action => 'update', :id => @page.title}, :html => {:method => :put, :multipart => true, :id => 'wiki_form'} do |f| %> <%= f.hidden_field :version %> <%= error_messages_for 'content' %> @@ -10,8 +10,8 @@ <p><%= submit_tag l(:button_save) %> <%= link_to_remote l(:label_preview), - { :url => { :controller => 'wiki', :action => 'preview', :id => @project, :page => @page.title }, - :method => 'post', + { :url => { :controller => 'wiki', :action => 'preview', :project_id => @project, :id => @page.title }, + :method => :post, :update => 'preview', :with => "Form.serialize('wiki_form')", :complete => "Element.scrollTo('preview')"
--- a/app/views/wiki/history.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/history.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -3,6 +3,7 @@ <h3><%= l(:label_history) %></h3> <% form_tag({:action => "diff"}, :method => :get) do %> + <%= hidden_field_tag('project_id', h(@project.to_param)) %> <table class="list"> <thead><tr> <th>#</th> @@ -18,13 +19,13 @@ <% line_num = 1 %> <% @versions.each do |ver| %> <tr class="<%= cycle("odd", "even") %>"> - <td class="id"><%= link_to ver.version, :action => 'index', :page => @page.title, :version => ver.version %></td> + <td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td> <td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td> <td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td> <td align="center"><%= format_time(ver.updated_on) %></td> <td><%= link_to_user ver.author %></td> <td><%=h ver.comments %></td> - <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :page => @page.title, :version => ver.version %></td> + <td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td> </tr> <% line_num += 1 %> <% end %>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/views/wiki/index.html.erb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,26 @@ +<div class="contextual"> +<%= watcher_tag(@wiki, User.current) %> +</div> + +<h2><%= l(:label_index_by_title) %></h2> + +<% if @pages.empty? %> +<p class="nodata"><%= l(:label_no_data) %></p> +<% end %> + +<%= render_page_hierarchy(@pages_by_parent_id) %> + +<% content_for :sidebar do %> + <%= render :partial => 'sidebar' %> +<% end %> + +<% unless @pages.empty? %> +<% other_formats_links do |f| %> + <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> + <%= f.link_to('HTML', :url => {:action => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> +<% end %> +<% end %> + +<% content_for :header_tags do %> +<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'show', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> +<% end %>
--- a/app/views/wiki/rename.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/rename.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -6,7 +6,7 @@ <div class="box"> <p><%= f.text_field :title, :required => true, :size => 100 %></p> <p><%= f.check_box :redirect_existing_links %></p> -<p><%= f.text_field :parent_title, :size => 100 %></p> +<p><%= f.select :parent_id, "<option value=''></option>" + wiki_page_options_for_select(@wiki.pages.all(:include => :parent) - @page.self_and_descendants, @page.parent), :label => :field_parent_title %></p> </div> <%= submit_tag l(:button_rename) %> <% end %>
--- a/app/views/wiki/show.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wiki/show.rhtml Fri Nov 19 13:24:41 2010 +0000 @@ -1,25 +1,25 @@ <div class="contextual"> <% if @editable %> -<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :page => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %> +<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @content.version == @page.content.version %> <%= watcher_tag(@page, User.current) %> -<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :page => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> -<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :page => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> -<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :page => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> -<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :page => @page.title}, :method => :post, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> -<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :page => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> +<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %> +<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %> +<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @content.version == @page.content.version %> +<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :confirm => l(:text_are_you_sure), :class => 'icon icon-del') %> +<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @content.version < @page.content.version %> <% end %> -<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %> +<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %> </div> -<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %> +<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:id => parent.title, :project_id => parent.project}}) %> <% if @content.version != @page.content.version %> <p> - <%= link_to(('« ' + l(:label_previous)), :action => 'index', :page => @page.title, :version => (@content.version - 1)) + " - " if @content.version > 1 %> + <%= link_to(('« ' + l(:label_previous)), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version - 1)) + " - " if @content.version > 1 %> <%= "#{l(:label_version)} #{@content.version}/#{@page.content.version}" %> - <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :page => @page.title, :version => @content.version) + ')' if @content.version > 1 %> - - <%= link_to((l(:label_next) + ' »'), :action => 'index', :page => @page.title, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %> - <%= link_to(l(:label_current_version), :action => 'index', :page => @page.title) %> + <%= '(' + link_to('diff', :controller => 'wiki', :action => 'diff', :id => @page.title, :project_id => @page.project, :version => @content.version) + ')' if @content.version > 1 %> - + <%= link_to((l(:label_next) + ' »'), :action => 'show', :id => @page.title, :project_id => @page.project, :version => (@content.version + 1)) + " - " if @content.version < @page.content.version %> + <%= link_to(l(:label_current_version), :action => 'show', :id => @page.title, :project_id => @page.project) %> <br /> <em><%= @content.author ? @content.author.name : "anonyme" %>, <%= format_time(@content.updated_on) %> </em><br /> <%=h @content.comments %> @@ -35,7 +35,7 @@ <div id="wiki_add_attachment"> <p><%= link_to l(:label_attachment_new), {}, :onclick => "Element.show('add_attachment_form'); Element.hide(this); Element.scrollTo('add_attachment_form'); return false;", :id => 'attach_files_link' %></p> -<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :page => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> +<% form_tag({ :controller => 'wiki', :action => 'add_attachment', :project_id => @project, :id => @page.title }, :multipart => true, :id => "add_attachment_form", :style => "display:none;") do %> <div class="box"> <p><%= render :partial => 'attachments/form' %></p> </div> @@ -46,8 +46,8 @@ <% end %> <% other_formats_links do |f| %> - <%= f.link_to 'HTML', :url => {:page => @page.title, :version => @content.version} %> - <%= f.link_to 'TXT', :url => {:page => @page.title, :version => @content.version} %> + <%= f.link_to 'HTML', :url => {:id => @page.title, :version => @content.version} %> + <%= f.link_to 'TXT', :url => {:id => @page.title, :version => @content.version} %> <% end if User.current.allowed_to?(:export_wiki_pages, @project) %> <% content_for :header_tags do %>
--- a/app/views/wiki/special_date_index.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -<div class="contextual"> -<%= watcher_tag(@wiki, User.current) %> -</div> - -<h2><%= l(:label_index_by_date) %></h2> - -<% if @pages.empty? %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - -<% @pages_by_date.keys.sort.reverse.each do |date| %> -<h3><%= format_date(date) %></h3> -<ul> -<% @pages_by_date[date].each do |page| %> - <li><%= link_to page.pretty_title, :action => 'index', :page => page.title %></li> -<% end %> -</ul> -<% end %> - -<% content_for :sidebar do %> - <%= render :partial => 'sidebar' %> -<% end %> - -<% unless @pages.empty? %> -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> - <%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> -<% end %> -<% end %> - -<% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> -<% end %>
--- a/app/views/wiki/special_page_index.rhtml Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -<div class="contextual"> -<%= watcher_tag(@wiki, User.current) %> -</div> - -<h2><%= l(:label_index_by_title) %></h2> - -<% if @pages.empty? %> -<p class="nodata"><%= l(:label_no_data) %></p> -<% end %> - -<%= render_page_hierarchy(@pages_by_parent_id) %> - -<% content_for :sidebar do %> - <%= render :partial => 'sidebar' %> -<% end %> - -<% unless @pages.empty? %> -<% other_formats_links do |f| %> - <%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %> - <%= f.link_to('HTML', :url => {:action => 'special', :page => 'export'}) if User.current.allowed_to?(:export_wiki_pages, @project) %> -<% end %> -<% end %> - -<% content_for :header_tags do %> -<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %> -<% end %>
--- a/app/views/wikis/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/wikis/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/wikis http://redmine.rubyforge.org/svn
--- a/app/views/workflows/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/app/views/workflows/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/app/views/workflows http://redmine.rubyforge.org/svn
--- a/config/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/config/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 31 -/svn/!svn/ver/4173/trunk/config +/svn/!svn/ver/4405/trunk/config END settings.yml K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4013/trunk/config/settings.yml +/svn/!svn/ver/4362/trunk/config/settings.yml END email.yml.example K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/4172/trunk/config/routes.rb +/svn/!svn/ver/4372/trunk/config/routes.rb END boot.rb K 25
--- a/config/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/config/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/config http://redmine.rubyforge.org/svn -2010-09-23T16:23:39.070168Z -4173 -winterheart +2010-11-14T15:14:19.280754Z +4405 +jplang has-props @@ -32,10 +32,10 @@ -2010-09-23T14:37:44.815730Z -a95b266d8b929a282cfb7bcc8441227b -2010-08-22T18:42:00.112555Z -4013 +2010-11-19T13:04:51.216928Z +974e583c59b4497382d2aa08f2b2ff01 +2010-11-02T19:00:36.834304Z +4362 edavis10 has-props @@ -58,7 +58,7 @@ -4020 +4106 email.yml.example file @@ -103,11 +103,11 @@ -2010-09-24T12:48:29.787906Z -ec1a5ef5a75a55fb2b1edbbfca6725d4 -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-19T13:04:51.216928Z +3817ace6dd9dfb2fda37c5a67605b5e0 +2010-11-06T13:22:23.662480Z +4372 +jplang has-props @@ -129,7 +129,7 @@ -16319 +14427 boot.rb file
--- a/config/.svn/text-base/routes.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/.svn/text-base/routes.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -13,55 +13,20 @@ map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow' map.connect 'help/:ctrl/:page', :controller => 'help' - - map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog' - map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog' - map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog' - - map.with_options :controller => 'timelog' do |timelog| - timelog.connect 'projects/:project_id/time_entries', :action => 'details' - - timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details| - time_details.connect 'time_entries' - time_details.connect 'time_entries.:format' - time_details.connect 'issues/:issue_id/time_entries' - time_details.connect 'issues/:issue_id/time_entries.:format' - time_details.connect 'projects/:project_id/time_entries.:format' - time_details.connect 'projects/:project_id/issues/:issue_id/time_entries' - time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format' - end - timelog.connect 'projects/:project_id/time_entries/report', :action => 'report' - timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report| - time_report.connect 'time_entries/report' - time_report.connect 'time_entries/report.:format' - time_report.connect 'projects/:project_id/time_entries/report.:format' - end - timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit| - time_edit.connect 'issues/:issue_id/time_entries/new' - end - - timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post} + map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report' + map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report| + time_report.connect 'time_entries/report' + time_report.connect 'time_entries/report.:format' + time_report.connect 'projects/:project_id/time_entries/report.:format' end + + # TODO: wasteful since this is also nested under issues, projects, and projects/issues + map.resources :time_entries, :controller => 'timelog' map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post} map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get} map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post} - map.with_options :controller => 'wiki' do |wiki_routes| - wiki_routes.with_options :conditions => {:method => :get} do |wiki_views| - wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i - wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil - wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit' - wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename' - wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history' - wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff' - wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate' - end - - wiki_routes.connect 'projects/:id/wiki/:page/:action', - :action => /edit|rename|destroy|preview|protect/, - :conditions => {:method => :post} - end map.with_options :controller => 'messages' do |messages_routes| messages_routes.with_options :conditions => {:method => :get} do |messages_views| @@ -129,56 +94,46 @@ map.connect '/issues', :controller => 'issues', :action => 'index', :conditions => { :method => :post } map.connect '/issues/create', :controller => 'issues', :action => 'index', :conditions => { :method => :post } - map.resources :issues, :member => { :edit => :post }, :collection => {} - map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } + map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues| + issues.resources :time_entries, :controller => 'timelog' + end + + map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues| + issues.resources :time_entries, :controller => 'timelog' + end map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations| relations.connect 'issues/:issue_id/relations/:id', :action => 'new' relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy' end - - map.with_options :controller => 'news' do |news_routes| - news_routes.with_options :conditions => {:method => :get} do |news_views| - news_views.connect 'news', :action => 'index' - news_views.connect 'projects/:project_id/news', :action => 'index' - news_views.connect 'projects/:project_id/news.:format', :action => 'index' - news_views.connect 'news.:format', :action => 'index' - news_views.connect 'projects/:project_id/news/new', :action => 'new' - news_views.connect 'news/:id', :action => 'show' - news_views.connect 'news/:id/edit', :action => 'edit' - end - news_routes.with_options do |news_actions| - news_actions.connect 'projects/:project_id/news', :action => 'create', :conditions => {:method => :post} - news_actions.connect 'news/:id/destroy', :action => 'destroy' - end - news_routes.connect 'news/:id/edit', :action => 'update', :conditions => {:method => :put} - news_routes.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post} - news_routes.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete} - end - map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new' - + map.with_options :controller => 'users' do |users| - users.with_options :conditions => {:method => :get} do |user_views| - user_views.connect 'users', :action => 'index' - user_views.connect 'users/:id', :action => 'show', :id => /\d+/ - user_views.connect 'users/new', :action => 'add' - user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil - end + users.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil, :conditions => {:method => :get} + users.with_options :conditions => {:method => :post} do |user_actions| - user_actions.connect 'users', :action => 'add' - user_actions.connect 'users/new', :action => 'add' - user_actions.connect 'users/:id/edit', :action => 'edit' user_actions.connect 'users/:id/memberships', :action => 'edit_membership' user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership' user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership' end end + map.resources :users, :member => { + :edit_membership => :post, + :destroy_membership => :post + }, + :except => [:destroy] + # For nice "roadmap" in the url for the index action map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' + map.all_news 'news', :controller => 'news', :action => 'index' + map.formatted_all_news 'news.:format', :controller => 'news', :action => 'index' + map.preview_news '/news/preview', :controller => 'previews', :action => 'news' + map.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post} + map.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete} + map.resources :projects, :member => { :copy => [:get, :post], :settings => :get, @@ -189,6 +144,25 @@ project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy] project.resources :files, :only => [:index, :new, :create] project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post} + project.resources :news, :shallow => true + project.resources :time_entries, :controller => 'timelog', :path_prefix => 'projects/:project_id' + + project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get} + project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get} + project.wiki_diff 'wiki/:id/diff/:version', :controller => 'wiki', :action => 'diff', :version => nil + project.wiki_diff 'wiki/:id/diff/:version/vs/:version_from', :controller => 'wiki', :action => 'diff' + project.wiki_annotate 'wiki/:id/annotate/:version', :controller => 'wiki', :action => 'annotate' + project.resources :wiki, :except => [:new, :create], :member => { + :rename => [:get, :post], + :history => :get, + :preview => :any, + :protect => :post, + :add_attachment => :post + }, :collection => { + :export => :get, + :date_index => :get + } + end # Destroy uses a get request to prompt the user before the actual DELETE request
--- a/config/.svn/text-base/settings.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/.svn/text-base/settings.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -184,3 +184,7 @@ default: '' rest_api_enabled: default: 0 +default_notification_option: + default: 'only_my_events' +emails_header: + default: ''
--- a/config/environments/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4096/trunk/config/environments +/svn/!svn/ver/4405/trunk/config/environments END test.rb K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/3782/trunk/config/environments/test.rb +/svn/!svn/ver/4405/trunk/config/environments/test.rb END development.rb K 25 @@ -37,5 +37,5 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/4096/trunk/config/environments/production.rb +/svn/!svn/ver/4182/trunk/config/environments/production.rb END
--- a/config/environments/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/config/environments http://redmine.rubyforge.org/svn -2010-09-17T04:31:17.141340Z -4096 -edavis10 +2010-11-14T15:14:19.280754Z +4405 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:44.735734Z -1fa42b22c11a8e93841c995532c617ae -2010-06-19T19:01:53.900446Z -3782 -edavis10 +2010-11-19T13:04:51.212937Z +08b25fdea5e3e041116340c3c3090b18 +2010-11-14T15:14:19.280754Z +4405 +jplang has-props @@ -58,7 +58,7 @@ -1176 +1168 development.rb file @@ -202,10 +202,10 @@ -2010-09-24T12:48:29.771795Z -5446300cf963a718609cb6d37eca8bc4 -2010-09-17T04:31:17.141340Z -4096 +2010-11-19T13:04:51.212937Z +17a6fbb168f3951191541f0f5a554454 +2010-09-26T16:54:38.112012Z +4182 edavis10 has-props @@ -228,5 +228,5 @@ -1064 +1169
--- a/config/environments/.svn/text-base/production.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/.svn/text-base/production.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -11,7 +11,10 @@ # config.logger = SyslogLogger.new # # Rotate logs bigger than 1MB, keeps no more than 7 rotated logs around. +# When setting a new Logger, make sure to set it's log level too. +# # config.logger = Logger.new(config.log_path, 7, 1048576) +# config.logger.level = Logger::INFO # Full error reports are disabled and caching is turned on config.action_controller.consider_all_requests_local = false
--- a/config/environments/.svn/text-base/test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/.svn/text-base/test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,7 +17,7 @@ config.action_mailer.delivery_method = :test config.action_controller.session = { - :session_key => "_test_session", + :key => "_test_session", :secret => "some secret phrase for the tests." }
--- a/config/environments/production.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/production.rb Fri Nov 19 13:24:41 2010 +0000 @@ -11,7 +11,10 @@ # config.logger = SyslogLogger.new # # Rotate logs bigger than 1MB, keeps no more than 7 rotated logs around. +# When setting a new Logger, make sure to set it's log level too. +# # config.logger = Logger.new(config.log_path, 7, 1048576) +# config.logger.level = Logger::INFO # Full error reports are disabled and caching is turned on config.action_controller.consider_all_requests_local = false
--- a/config/environments/test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/config/environments/test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -17,7 +17,7 @@ config.action_mailer.delivery_method = :test config.action_controller.session = { - :session_key => "_test_session", + :key => "_test_session", :secret => "some secret phrase for the tests." }
--- a/config/initializers/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/config/initializers/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/3235/trunk/config/initializers +/svn/!svn/ver/4389/trunk/config/initializers END inflections.rb K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/3235/trunk/config/initializers/10-patches.rb +/svn/!svn/ver/4389/trunk/config/initializers/10-patches.rb END backtrace_silencers.rb K 25
--- a/config/initializers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/config/initializers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/config/initializers http://redmine.rubyforge.org/svn -2009-12-23T20:55:42.873227Z -3235 +2010-11-09T19:44:37.907646Z +4389 jplang has-props @@ -100,10 +100,10 @@ -2010-09-23T14:37:44.743734Z -56e489ddcf34c62aa4f7f690b747f521 -2009-12-23T20:55:42.873227Z -3235 +2010-11-19T13:04:51.204890Z +82c05bf7e87e057a6a3dd5d74a56ee7c +2010-11-09T19:44:37.907646Z +4389 jplang has-props @@ -126,7 +126,7 @@ -2448 +3061 backtrace_silencers.rb file
--- a/config/initializers/.svn/text-base/10-patches.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/initializers/.svn/text-base/10-patches.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -78,3 +78,17 @@ end ActionMailer::Base.send :include, AsynchronousMailer + +# TODO: Hack to support i18n 4.x on Rails 2.3.5. Remove post 2.3.6. +# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608 +module I18n + module Backend + module Base + def warn_syntax_deprecation!(*args) + return if @skip_syntax_deprecation + warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information." + @skip_syntax_deprecation = true + end + end + end +end
--- a/config/initializers/10-patches.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/config/initializers/10-patches.rb Fri Nov 19 13:24:41 2010 +0000 @@ -78,3 +78,17 @@ end ActionMailer::Base.send :include, AsynchronousMailer + +# TODO: Hack to support i18n 4.x on Rails 2.3.5. Remove post 2.3.6. +# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608 +module I18n + module Backend + module Base + def warn_syntax_deprecation!(*args) + return if @skip_syntax_deprecation + warn "The {{key}} interpolation syntax in I18n messages is deprecated. Please use %{key} instead.\nDowngrade your i18n gem to 0.3.7 (everything above must be deinstalled) to remove this warning, see http://www.redmine.org/issues/5608 for more information." + @skip_syntax_deprecation = true + end + end + end +end
--- a/config/locales/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,263 +1,263 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4173/trunk/config/locales +/svn/!svn/ver/4384/trunk/config/locales END lt.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/lt.yml +/svn/!svn/ver/4384/trunk/config/locales/lt.yml END sr-YU.yml K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4169/trunk/config/locales/sr-YU.yml +/svn/!svn/ver/4384/trunk/config/locales/sr-YU.yml END ro.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/ro.yml +/svn/!svn/ver/4384/trunk/config/locales/ro.yml END lv.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/lv.yml +/svn/!svn/ver/4384/trunk/config/locales/lv.yml END zh.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/zh.yml +/svn/!svn/ver/4384/trunk/config/locales/zh.yml END pt.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/pt.yml +/svn/!svn/ver/4384/trunk/config/locales/pt.yml END ca.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/ca.yml +/svn/!svn/ver/4384/trunk/config/locales/ca.yml END pt-BR.yml K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4169/trunk/config/locales/pt-BR.yml +/svn/!svn/ver/4384/trunk/config/locales/pt-BR.yml END tr.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/tr.yml +/svn/!svn/ver/4384/trunk/config/locales/tr.yml END ru.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4171/trunk/config/locales/ru.yml +/svn/!svn/ver/4384/trunk/config/locales/ru.yml END en-GB.yml K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4169/trunk/config/locales/en-GB.yml +/svn/!svn/ver/4384/trunk/config/locales/en-GB.yml END id.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/id.yml +/svn/!svn/ver/4384/trunk/config/locales/id.yml END el.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/el.yml +/svn/!svn/ver/4384/trunk/config/locales/el.yml END en.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/en.yml +/svn/!svn/ver/4382/trunk/config/locales/en.yml END gl.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/gl.yml +/svn/!svn/ver/4384/trunk/config/locales/gl.yml END cs.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4173/trunk/config/locales/cs.yml +/svn/!svn/ver/4384/trunk/config/locales/cs.yml +END +mk.yml +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4384/trunk/config/locales/mk.yml END es.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/es.yml +/svn/!svn/ver/4384/trunk/config/locales/es.yml END -mk.yml +ko.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/mk.yml +/svn/!svn/ver/4384/trunk/config/locales/ko.yml +END +eu.yml +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4384/trunk/config/locales/eu.yml END zh-TW.yml K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4173/trunk/config/locales/zh-TW.yml -END -eu.yml -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4169/trunk/config/locales/eu.yml -END -ko.yml -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4169/trunk/config/locales/ko.yml +/svn/!svn/ver/4384/trunk/config/locales/zh-TW.yml END mn.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/mn.yml +/svn/!svn/ver/4384/trunk/config/locales/mn.yml END it.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/it.yml +/svn/!svn/ver/4384/trunk/config/locales/it.yml END sk.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/sk.yml +/svn/!svn/ver/4384/trunk/config/locales/sk.yml END sl.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/sl.yml +/svn/!svn/ver/4384/trunk/config/locales/sl.yml END uk.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/uk.yml +/svn/!svn/ver/4384/trunk/config/locales/uk.yml +END +da.yml +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4384/trunk/config/locales/da.yml END sr.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/sr.yml +/svn/!svn/ver/4384/trunk/config/locales/sr.yml END -da.yml +bg.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/da.yml +/svn/!svn/ver/4384/trunk/config/locales/bg.yml +END +de.yml +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4384/trunk/config/locales/de.yml END sv.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/sv.yml -END -de.yml -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4169/trunk/config/locales/de.yml -END -bg.yml -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/4169/trunk/config/locales/bg.yml +/svn/!svn/ver/4384/trunk/config/locales/sv.yml END ja.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4173/trunk/config/locales/ja.yml +/svn/!svn/ver/4384/trunk/config/locales/ja.yml END he.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/he.yml +/svn/!svn/ver/4384/trunk/config/locales/he.yml END fi.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/fi.yml +/svn/!svn/ver/4384/trunk/config/locales/fi.yml END bs.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/bs.yml +/svn/!svn/ver/4384/trunk/config/locales/bs.yml END fr.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/fr.yml +/svn/!svn/ver/4382/trunk/config/locales/fr.yml END nl.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/nl.yml +/svn/!svn/ver/4384/trunk/config/locales/nl.yml END hr.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/hr.yml +/svn/!svn/ver/4384/trunk/config/locales/hr.yml END pl.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/pl.yml +/svn/!svn/ver/4384/trunk/config/locales/pl.yml END th.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/th.yml +/svn/!svn/ver/4384/trunk/config/locales/th.yml END no.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/no.yml +/svn/!svn/ver/4384/trunk/config/locales/no.yml END hu.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/hu.yml +/svn/!svn/ver/4384/trunk/config/locales/hu.yml END vi.yml K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4169/trunk/config/locales/vi.yml +/svn/!svn/ver/4384/trunk/config/locales/vi.yml END
--- a/config/locales/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/config/locales http://redmine.rubyforge.org/svn -2010-09-23T16:23:39.070168Z -4173 -winterheart +2010-11-07T14:18:13.240686Z +4384 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.703937Z -8d312a53522467462ce1e04d6dc8559c -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.152964Z +3c3e846c8a61fc0306fcac52e8a6db63 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -58,7 +58,7 @@ -42971 +43469 sr-YU.yml file @@ -66,33 +66,33 @@ -2010-09-24T12:48:29.703937Z -dc55d1b76bd2609ff50f0eeba066f0f2 -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -40089 +2010-11-19T13:04:51.152964Z +4270faebfc0875178412531d9945e450 +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +40597 ro.yml file @@ -100,11 +100,11 @@ -2010-09-24T12:48:29.703937Z -a53816dd2bef5bdb8cd5673d75ff476d -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.152964Z +a34852b28eb42df6bf3d98b6e4cfe8dc +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -126,7 +126,7 @@ -39144 +39642 lv.yml file @@ -134,33 +134,33 @@ -2010-09-24T12:48:29.707889Z -04c7d28b6c34d34e280f5bccb09cc990 -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -40111 +2010-11-19T13:04:51.152964Z +77f6e9e4ebc4ece3ff5a79b62ee8a48b +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +40602 zh.yml file @@ -168,11 +168,11 @@ -2010-09-24T12:48:29.707889Z -c2dcc09a003836b556dd2e332b988131 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.156936Z +daf438594b071cc80e58e6704bbb8409 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -194,7 +194,7 @@ -37212 +37725 pt.yml file @@ -202,11 +202,11 @@ -2010-09-24T12:48:29.707889Z -2d38e6a7c8c1989d3c31b1d6865ec265 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.156936Z +c9804b3b18de0884db4bb8d3305d0d59 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -228,7 +228,7 @@ -39754 +41198 ca.yml file @@ -236,11 +236,11 @@ -2010-09-24T12:48:29.707889Z -b0b5be4539b723cbf97185851d355552 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.156936Z +eec5aa8638e2792dd612c8938750d81e +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -262,7 +262,7 @@ -40954 +41462 pt-BR.yml file @@ -270,11 +270,11 @@ -2010-09-24T12:48:29.711820Z -ca8305cd99de4bed0ba08a8edaa3ef83 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.160924Z +7fd270dbed421920ffba7910fec83c98 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -296,7 +296,7 @@ -40501 +41080 tr.yml file @@ -304,11 +304,11 @@ -2010-09-24T12:48:29.711820Z -e782356e16dc42959977cb5a9aaa1f45 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.160924Z +6d497cb5cf2b3dc069bced1f7ab3e917 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -330,7 +330,7 @@ -39205 +39711 ru.yml file @@ -338,11 +338,11 @@ -2010-09-24T12:48:29.711820Z -73be51c0cede8bce9c37d710aaef1ff1 -2010-09-22T19:45:30.172104Z -4171 -winterheart +2010-11-19T13:04:51.160924Z +bf6486d652d78029c05e10c1bb49a93d +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -364,7 +364,7 @@ -60838 +61533 en-GB.yml file @@ -372,33 +372,33 @@ -2010-09-24T12:48:29.711820Z -d959f171f66003fe8191d8e47a5fe67b -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -37457 +2010-11-19T13:04:51.160924Z +b3c07f1bb7aa053e2314562eeff18c71 +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +37977 id.yml file @@ -406,11 +406,11 @@ -2010-09-24T12:48:29.715835Z -ea5458eb3e0d4b38f5c9b73ef03fe90d -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.164928Z +b21510420c8cfb4c3ca3d90982f50c86 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -432,7 +432,7 @@ -38784 +39277 el.yml file @@ -440,11 +440,11 @@ -2010-09-24T12:48:29.715835Z -43266733dbb73649edddb2d5815fa51b -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.164928Z +ec14094c510964ef65cab6198c26153e +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -466,7 +466,7 @@ -53923 +54374 en.yml file @@ -474,11 +474,11 @@ -2010-09-24T12:48:29.715835Z -255f81f55e0d6c8ff82b29b61ffed871 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.164928Z +dc0460b9c8f49b986b833f6a0e42d39a +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -500,7 +500,7 @@ -37482 +38014 gl.yml file @@ -508,11 +508,11 @@ -2010-09-24T12:48:29.715835Z -abc632b18133f3500b3dd05f57e9378b -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.168928Z +1fe7f6095d46fe8f8bc5b49d72e2443c +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -534,7 +534,7 @@ -39814 +40309 cs.yml file @@ -542,11 +542,11 @@ -2010-09-24T12:48:29.719859Z -6e8071957b966d6a8f86e1c05ab54cae -2010-09-23T16:23:39.070168Z -4173 -winterheart +2010-11-19T13:04:51.168928Z +13a9181b35a59a4f65ebcfcbbf3cdfd2 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -568,7 +568,41 @@ -39630 +40854 + +mk.yml +file + + + + +2010-11-19T13:04:51.168928Z +bf188cf4f7e8b821c0272a8f39e9e2de +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +47710 es.yml file @@ -576,11 +610,11 @@ -2010-09-24T12:48:29.719859Z -dfe54b5b3df4729ccd32457e9bd4e411 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.168928Z +b2c1421e14275dd03308e69e24869a89 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -602,41 +636,75 @@ -42519 +43011 -mk.yml +zh-TW.yml file -2010-09-24T12:48:29.719859Z -29ccbe63f00197715dac0af7a48948bf -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -47241 +2010-11-19T13:04:51.168928Z +a400517e4ac5ec29285455a34430d5c7 +2010-11-07T14:18:13.240686Z +4384 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +42011 + +eu.yml +file + + + + +2010-11-19T13:04:51.172928Z +8b0c7dfb3b2e99ffee4e65b1015d6091 +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +40663 ko.yml file @@ -644,11 +712,11 @@ -2010-09-24T12:48:29.723862Z -b772e80bc84527c52c65fc3ba323d83e -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.172928Z +436d7edeba50962c6fdb9faf6bdf3dce +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -670,75 +738,7 @@ -43255 - -eu.yml -file - - - - -2010-09-24T12:48:29.719859Z -8e45505ae9b216b825f6653d976fed30 -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -40157 - -zh-TW.yml -file - - - - -2010-09-24T12:48:29.719859Z -771ede071092664861220ffb0e975fe8 -2010-09-23T16:23:39.070168Z -4173 -winterheart -has-props - - - - - - - - - - - - - - - - - - - - -41483 +43751 mn.yml file @@ -746,33 +746,33 @@ -2010-09-24T12:48:29.723862Z -dd4ce6787e9315f3346c8f56a85a0fe9 -2010-09-22T16:06:29.391472Z -4169 -winterheart - - - - - - - - - - - - - - - - - - - - - -51926 +2010-11-19T13:04:51.172928Z +d4363b3560295e0a69987fedb561d447 +2010-11-07T14:18:13.240686Z +4384 +jplang + + + + + + + + + + + + + + + + + + + + + +52377 it.yml file @@ -780,11 +780,11 @@ -2010-09-24T12:48:29.723862Z -4eca662beac78c06a4b1919de9f56556 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.172928Z +2a5286abf1ef2ef909cbcb254e229ebd +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -806,7 +806,7 @@ -40178 +40686 sk.yml file @@ -814,11 +814,11 @@ -2010-09-24T12:48:29.723862Z -a5fd7d501ceab618ba6808dd5f56ac5e -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.172928Z +36ffd38b0ec52602e1671d36e0f6e9c5 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -840,7 +840,7 @@ -40419 +40919 sl.yml file @@ -848,11 +848,11 @@ -2010-09-24T12:48:29.723862Z -b3008af867361f371f067c96aa0117fc -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.176929Z +fe0bcf8cf9643fa50fe3d21828434cf4 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -874,7 +874,7 @@ -38600 +39097 uk.yml file @@ -882,11 +882,11 @@ -2010-09-24T12:48:29.727858Z -4d320f6006d26969f08e2efb483bd709 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.176929Z +db46f6a810e0dc67f1bac92a71b0948d +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -908,7 +908,41 @@ -46219 +46669 + +sr.yml +file + + + + +2010-11-19T13:04:51.176929Z +248adf243f4bb59ac110d11530753c7b +2010-11-07T14:18:13.240686Z +4384 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +53786 da.yml file @@ -916,11 +950,11 @@ -2010-09-24T12:48:29.731846Z -c5d900369c88522a92ba2546882646de -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.180928Z +79fdefd9c5c9db00ee25aa63e771e626 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -942,19 +976,19 @@ -38693 +39199 -sr.yml +sv.yml file -2010-09-24T12:48:29.727858Z -ebf019d58581ebc1fd17553c09f7acd1 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.180928Z +41611818eaab75a3265b787b7b4cf575 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -976,7 +1010,41 @@ -53325 +41581 + +de.yml +file + + + + +2010-11-19T13:04:51.180928Z +953288c28f8e952ddcc2db0bea13fe9a +2010-11-07T14:18:13.240686Z +4384 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +41776 bg.yml file @@ -984,11 +1052,11 @@ -2010-09-24T12:48:29.731846Z -352a62d205b07b845f0adce28cb63d15 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.180928Z +47e98f0f9ee99de7fd6cf56ba3412107 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1010,75 +1078,7 @@ -45470 - -de.yml -file - - - - -2010-09-24T12:48:29.731846Z -56091e110569c87df775a1a9935060dc -2010-09-22T16:06:29.391472Z -4169 -winterheart -has-props - - - - - - - - - - - - - - - - - - - - -41281 - -sv.yml -file - - - - -2010-09-24T12:48:29.731846Z -baa63e9443671e1fd346d60e4ddc1521 -2010-09-22T16:06:29.391472Z -4169 -winterheart -has-props - - - - - - - - - - - - - - - - - - - - -41037 +52771 ja.yml file @@ -1086,11 +1086,11 @@ -2010-09-24T12:48:29.731846Z -1e3539913eaf8d37ea7a2a57fabc3e8c -2010-09-23T16:23:39.070168Z -4173 -winterheart +2010-11-19T13:04:51.184942Z +180b2fd40dbb9ca6136d07d3886856ed +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1112,7 +1112,7 @@ -44980 +45539 he.yml file @@ -1120,11 +1120,11 @@ -2010-09-24T12:48:29.735865Z -f7992b036be151f88a9e0966780c612a -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.184942Z +c973a0f6b6038c4d94f59cb67a6362ef +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1146,7 +1146,7 @@ -43911 +44657 fi.yml file @@ -1154,11 +1154,11 @@ -2010-09-24T12:48:29.735865Z -0a188f9b2652801a82be0d1e378b7aa7 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.188959Z +d34af39e6c4e4a51dc0e5294b2fa6ebf +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1180,7 +1180,7 @@ -39851 +40365 bs.yml file @@ -1188,11 +1188,11 @@ -2010-09-24T12:48:29.735865Z -608c8fa2f482f744f0cefb0f4248a1cc -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.188959Z +3b1917239f864b8251f47ed4179bbeb9 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1214,7 +1214,7 @@ -39610 +40112 fr.yml file @@ -1222,11 +1222,11 @@ -2010-09-24T12:48:29.735865Z -76819e14f31cc7d6afba22b00e1944da -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.188959Z +e5250df57dd3200252731533f635f3ff +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -1248,7 +1248,7 @@ -41681 +42247 nl.yml file @@ -1256,11 +1256,11 @@ -2010-09-24T12:48:29.739830Z -9c8ae2781ab6840c9c3812337a0b736a -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.192925Z +5fc86161f1f72c9a027cb9083e79a18e +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1282,7 +1282,7 @@ -39162 +39665 hr.yml file @@ -1290,11 +1290,11 @@ -2010-09-24T12:48:29.739830Z -8a3ca64a856a4cd1ea792941be1051db -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.192925Z +ea3dd89af05481d2c32934831258791d +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1316,7 +1316,7 @@ -39271 +39778 pl.yml file @@ -1324,11 +1324,11 @@ -2010-09-24T12:48:29.739830Z -139a3bc99dba793a92f9b4f797c9d04c -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.192925Z +262779f7ff6c420704d894caed2efb10 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1350,7 +1350,7 @@ -41757 +42269 th.yml file @@ -1358,11 +1358,11 @@ -2010-09-24T12:48:29.739830Z -a522d5ecaa0583e30a7e592e98ce6bac -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.196941Z +e56c0107ce9b73575b17bacafb4a5a4e +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1384,7 +1384,7 @@ -52099 +52528 no.yml file @@ -1392,11 +1392,11 @@ -2010-09-24T12:48:29.743854Z -ebbbed8ecfff22c16b6cfe0bcecd3f12 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.196941Z +b2ada0f5e3c0bd1dd09da8a258928d94 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1418,7 +1418,7 @@ -37656 +38166 hu.yml file @@ -1426,11 +1426,11 @@ -2010-09-24T12:48:29.743854Z -7ec87ad7dd6926dacda0f12c3dce91fb -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.196941Z +5c4f617d0f309ca0dbd6429553dd0ced +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1452,7 +1452,7 @@ -42185 +42678 vi.yml file @@ -1460,11 +1460,11 @@ -2010-09-24T12:48:29.743854Z -d2da1eed28eb609e12ab3cae38ea1f69 -2010-09-22T16:06:29.391472Z -4169 -winterheart +2010-11-19T13:04:51.196941Z +85061e0562f86bb4aceeacab6dd6bb24 +2010-11-07T14:18:13.240686Z +4384 +jplang has-props @@ -1486,5 +1486,5 @@ -42762 +43252
--- a/config/locales/.svn/text-base/bg.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/bg.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -9,12 +9,12 @@ short: "%b %d" long: "%B %d, %Y" - day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] - abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] + day_names: [ÐеделÑ, Понеделник, Вторник, СрÑда, Четвъртък, Петък, Събота] + abbr_day_names: [Ðед, Пон, Вто, СрÑ, Чет, Пет, Съб] # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] - abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] + month_names: [~, Януари, Февруари, Март, Ðприл, Май, Юни, Юли, ÐвгуÑÑ‚, Септември, Октомври, Ðоември, Декември] + abbr_month_names: [~, Яну, Фев, Мар, Ðпр, Май, Юни, Юли, Ðвг, Сеп, Окт, Ðое, Дек] # Used in date_select and datime_select. order: [ :year, :month, :day ] @@ -31,38 +31,38 @@ distance_in_words: half_a_minute: "half a minute" less_than_x_seconds: - one: "less than 1 second" - other: "less than {{count}} seconds" + one: "по-малко от 1 Ñекунда" + other: "по-малко от {{count}} Ñекунди" x_seconds: - one: "1 second" - other: "{{count}} seconds" + one: "1 Ñекунда" + other: "{{count}} Ñекунди" less_than_x_minutes: - one: "less than a minute" - other: "less than {{count}} minutes" + one: "по-малко от 1 минута" + other: "по-малко от {{count}} минути" x_minutes: - one: "1 minute" - other: "{{count}} minutes" + one: "1 минута" + other: "{{count}} минути" about_x_hours: - one: "about 1 hour" - other: "about {{count}} hours" + one: "около 1 чаÑ" + other: "около {{count}} чаÑа" x_days: - one: "1 day" - other: "{{count}} days" + one: "1 ден" + other: "{{count}} дена" about_x_months: - one: "about 1 month" - other: "about {{count}} months" + one: "около 1 меÑец" + other: "около {{count}} меÑеца" x_months: - one: "1 month" - other: "{{count}} months" + one: "1 меÑец" + other: "{{count}} меÑеца" about_x_years: - one: "about 1 year" - other: "about {{count}} years" + one: "около 1 година" + other: "около {{count}} години" over_x_years: - one: "over 1 year" - other: "over {{count}} years" + one: "над 1 година" + other: "над {{count}} години" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "почти 1 година" + other: "почти {{count}} години" number: format: @@ -87,7 +87,7 @@ # Used in array.to_sentence. support: array: - sentence_connector: "and" + sentence_connector: "и" skip_last_comma: false activerecord: @@ -106,17 +106,16 @@ taken: "вече ÑъщеÑтвува" not_a_number: "не е чиÑло" not_a_date: "е невалидна дата" - greater_than: "must be greater than {{count}}" - greater_than_or_equal_to: "must be greater than or equal to {{count}}" - equal_to: "must be equal to {{count}}" - less_than: "must be less than {{count}}" - less_than_or_equal_to: "must be less than or equal to {{count}}" - odd: "must be odd" - even: "must be even" + greater_than: "трÑбва да бъде по-голÑм[a/о] от {{count}}" + greater_than_or_equal_to: "трÑбва да бъде по-голÑм[a/о] от или равен[a/o] на {{count}}" + equal_to: "трÑбва да бъде равен[a/o] на {{count}}" + less_than: "трÑбва да бъде по-малък[a/o] от {{count}}" + less_than_or_equal_to: "трÑбва да бъде по-малък[a/o] от или равен[a/o] на {{count}}" + odd: "трÑбва да бъде нечетен[a/o]" + even: "трÑбва да бъде четен[a/o]" greater_than_start_date: "трÑбва да е Ñлед началната дата" not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚" circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" actionview_instancetag_blank_option: Изберете @@ -171,7 +170,7 @@ field_mail: Email field_filename: Файл field_filesize: Големина - field_downloads: Downloads + field_downloads: Изтеглени файлове field_author: Ðвтор field_created_on: От дата field_updated_on: Обновена @@ -186,10 +185,10 @@ field_title: Заглавие field_project: Проект field_issue: Задача - field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ + field_status: СъÑтоÑние field_notes: Бележка field_is_closed: Затворена задача - field_is_default: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ подразбиране + field_is_default: СъÑтоÑние по подразбиране field_tracker: Тракер field_subject: ОтноÑно field_due_date: Крайна дата @@ -217,12 +216,11 @@ field_port: Порт field_account: Профил field_base_dn: Base DN - field_attr_login: Login attribute - field_attr_firstname: Firstname attribute - field_attr_lastname: Lastname attribute - field_attr_mail: Email attribute + field_attr_login: Ðтрибут Login + field_attr_firstname: Ðтрибут Първо име (Firstname) + field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname) + field_attr_mail: Ðтрибут Email field_onthefly: Динамично Ñъздаване на потребител - field_start_date: Ðачална дата field_done_ratio: % ÐŸÑ€Ð¾Ð³Ñ€ÐµÑ field_auth_source: Ðачин на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ field_hide_mail: Скрий e-mail адреÑа ми @@ -249,12 +247,12 @@ setting_login_required: ИзиÑкване за вход в ÑиÑтемата setting_self_registration: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ потребители setting_attachment_max_size: МакÑимална големина на прикачен файл - setting_issues_export_limit: Лимит за екÑпорт на задачи + setting_issues_export_limit: МакÑимален брой задачи за екÑпорт setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии setting_host_name: ХоÑÑ‚ setting_text_formatting: Форматиране на текÑта setting_wiki_compression: Wiki компреÑиране на иÑториÑта - setting_feeds_limit: Лимит на Feeds + setting_feeds_limit: МакÑимален брой за емиÑии setting_autofetch_changesets: Ðвтоматично обработване на ревизиите setting_sys_api_enabled: Разрешаване на WS за управление setting_commit_ref_keywords: ОтбелÑзващи ключови думи @@ -270,9 +268,9 @@ label_project_new: Ðов проект label_project_plural: Проекти label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: 0 проекти + one: 1 проект + other: "{{count}} проекта" label_project_all: Ð’Ñички проекти label_project_latest: ПоÑледни проекти label_issue: Задача @@ -293,9 +291,9 @@ label_tracker_plural: Тракери label_tracker_new: Ðов тракер label_workflow: Работен Ð¿Ñ€Ð¾Ñ†ÐµÑ - label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача - label_issue_status_plural: СтатуÑи на задачи - label_issue_status_new: Ðов ÑÑ‚Ð°Ñ‚ÑƒÑ + label_issue_status: СъÑтоÑние на задача + label_issue_status_plural: СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи + label_issue_status_new: Ðово ÑÑŠÑтоÑние label_issue_category: ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° label_issue_category_plural: Категории задачи label_issue_category_new: Ðова ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ @@ -323,14 +321,14 @@ label_registered_on: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ label_activity: ДейноÑÑ‚ label_new: Ðов - label_logged_as: Логнат като + label_logged_as: ВлÑзъл като label_environment: Среда label_authentication: ÐžÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_auth_source: Ðачин на Ð¾Ñ‚Ð¾Ñ€Ð¾Ð·Ð°Ñ†Ð¸Ñ label_auth_source_new: Ðов начин на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_auth_source_plural: Ðачини на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_subproject_plural: Подпроекти - label_min_max_length: Мин. - МакÑ. дължина + label_min_max_length: Минимална - макÑимална дължина label_list: СпиÑък label_date: Дата label_integer: ЦелочиÑлен @@ -339,10 +337,10 @@ label_text: Дълъг текÑÑ‚ label_attribute: Ðтрибут label_attribute_plural: Ðтрибути - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "{{count}} изтеглÑне" + label_download_plural: "{{count}} изтеглÑниÑ" label_no_data: ÐÑма изходни данни - label_change_status: ПромÑна на ÑтатуÑа + label_change_status: ПромÑна на ÑÑŠÑтоÑнието label_history: ИÑÑ‚Ð¾Ñ€Ð¸Ñ label_attachment: Файл label_attachment_new: Ðов файл @@ -369,21 +367,21 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: 0 отворени / {{total}} + one: 1 отворена / {{total}} + other: "{{count}} отворени / {{total}}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: 0 отворени + one: 1 отворена + other: "{{count}} отворени" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: 0 затворени + one: 1 затворена + other: "{{count}} затворени" label_total: Общо label_permissions: Права - label_current_status: Текущ ÑÑ‚Ð°Ñ‚ÑƒÑ - label_new_statuses_allowed: Позволени ÑтатуÑи + label_current_status: Текущо ÑÑŠÑтоÑние + label_new_statuses_allowed: Позволени ÑÑŠÑтоÑÐ½Ð¸Ñ label_all: вÑички label_none: никакви label_next: Следващ @@ -394,7 +392,7 @@ label_per_page: Ðа Ñтраница label_calendar: Календар label_months_from: меÑеца от - label_gantt: Gantt + label_gantt: Мрежов график label_internal: Вътрешен label_last_changes: "поÑледни {{count}} промени" label_change_view_all: Виж вÑички промени @@ -402,9 +400,9 @@ label_comment: Коментар label_comment_plural: Коментари label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" + zero: 0 коментари + one: 1 коментар + other: "{{count}} коментари" label_comment_add: ДобавÑне на коментар label_comment_added: Добавен коментар label_comment_delete: Изтриване на коментари @@ -453,13 +451,13 @@ label_wiki: Wiki label_wiki_edit: Wiki Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ label_wiki_edit_plural: Wiki редакции - label_wiki_page: Wiki page - label_wiki_page_plural: Wiki pages + label_wiki_page: Wiki Ñтраница + label_wiki_page_plural: Wiki Ñтраници label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата label_current_version: Текуща верÑÐ¸Ñ label_preview: Преглед - label_feed_plural: Feeds + label_feed_plural: ЕмиÑии label_changes_details: Подробни промени label_issue_tracking: Тракинг label_spent_time: Отделено време @@ -478,7 +476,7 @@ label_permissions_report: Справка за права label_watched_issues: Ðаблюдавани задачи label_related_issues: Свързани задачи - label_applied_status: Промени ÑтатуÑа на + label_applied_status: УÑтановено ÑÑŠÑтоÑние label_loading: Зареждане... label_relation_new: Ðова Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ label_relation_delete: Изтриване на Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ @@ -488,10 +486,10 @@ label_blocked_by: блокирана от label_precedes: предшеÑтва label_follows: изпълнÑва Ñе Ñлед - label_end_to_start: end to start - label_end_to_end: end to end - label_start_to_start: start to start - label_start_to_end: start to end + label_end_to_start: край към начало + label_end_to_end: край към край + label_start_to_start: начало към начало + label_start_to_end: начало към край label_stay_logged_in: Запомни ме label_disabled: забранено label_show_completed_versions: Показване на реализирани верÑии @@ -534,7 +532,7 @@ button_clear: ИзчиÑти button_lock: Заключване button_unlock: Отключване - button_download: Download + button_download: ИзтеглÑне button_list: СпиÑък button_view: Преглед button_move: ПремеÑтване @@ -544,8 +542,8 @@ button_sort: Сортиране button_log_time: ОтделÑне на време button_rollback: Върни Ñе към тази Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ - button_watch: Ðаблюдавай - button_unwatch: Спри наблюдението + button_watch: Ðаблюдаване + button_unwatch: Край на наблюдението button_reply: Отговор button_archive: Ðрхивиране button_unarchive: Разархивиране @@ -582,11 +580,11 @@ default_role_manager: Мениджър default_role_developer: Разработчик default_role_reporter: Публикуващ - default_tracker_bug: Бъг + default_tracker_bug: Грешка default_tracker_feature: ФункционалноÑÑ‚ default_tracker_support: Поддръжка default_issue_status_new: Ðова - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Изпълнение default_issue_status_resolved: Приключена default_issue_status_feedback: Обратна връзка default_issue_status_closed: Затворена @@ -648,7 +646,7 @@ label_age: ВъзраÑÑ‚ notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена. text_load_default_configuration: Зареждане на примерна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ - text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑтатуÑи на задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ." + text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ." error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: {{value}}" button_update: ОбновÑване label_change_properties: ПромÑна на наÑтройки @@ -707,208 +705,221 @@ setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран." label_planning: Планиране - text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" - label_duplicated_by: duplicated by - setting_enabled_scm: Enabled SCM - text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." - label_incoming_emails: Incoming emails - label_generate_key: Generate a key - setting_mail_handler_api_enabled: Enable WS for incoming emails - setting_mail_handler_api_key: API key - text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them." - field_parent_title: Parent page - label_issue_watchers: Watchers - setting_commit_logs_encoding: Commit messages encoding - button_quote: Quote - setting_sequential_project_identifiers: Generate sequential project identifiers - notice_unable_delete_version: Unable to delete version - label_renamed: renamed - label_copied: copied - setting_plain_text_mail: plain text only (no HTML) - permission_view_files: View files - permission_edit_issues: Edit issues - permission_edit_own_time_entries: Edit own time logs - permission_manage_public_queries: Manage public queries - permission_add_issues: Add issues + text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} Ñъщо ще бъдат изтрити." + label_and_its_subprojects: "{{value}} и неговите подпроекти" + mail_body_reminder: "{{count}} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите {{days}} дни:" + mail_subject_reminder: "{{count}} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите {{days}} дни" + text_user_wrote: "{{value}} напиÑа:" + label_duplicated_by: дублирана от + setting_enabled_scm: Разрешена SCM + text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:' + text_enumeration_destroy_question: "{{count}} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚." + label_incoming_emails: ВходÑщи e-mail-и + label_generate_key: Генериране на ключ + setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и + setting_mail_handler_api_key: API ключ + text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите." + field_parent_title: РодителÑка Ñтраница + label_issue_watchers: Ðаблюдатели + setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване + button_quote: Цитат + setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори + notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑÐ¸Ñ + label_renamed: преименуван + label_copied: копиран + setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML) + permission_view_files: Разглеждане на файлове + permission_edit_issues: Редактиране на задачи + permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs + permission_manage_public_queries: Управление на публичните заÑвки + permission_add_issues: ДобавÑне на задачи permission_log_time: Log spent time - permission_view_changesets: View changesets - permission_view_time_entries: View spent time - permission_manage_versions: Manage versions - permission_manage_wiki: Manage wiki - permission_manage_categories: Manage issue categories - permission_protect_wiki_pages: Protect wiki pages - permission_comment_news: Comment news - permission_delete_messages: Delete messages - permission_select_project_modules: Select project modules - permission_manage_documents: Manage documents - permission_edit_wiki_pages: Edit wiki pages - permission_add_issue_watchers: Add watchers - permission_view_gantt: View gantt chart - permission_move_issues: Move issues - permission_manage_issue_relations: Manage issue relations - permission_delete_wiki_pages: Delete wiki pages - permission_manage_boards: Manage boards - permission_delete_wiki_pages_attachments: Delete attachments - permission_view_wiki_edits: View wiki history - permission_add_messages: Post messages - permission_view_messages: View messages - permission_manage_files: Manage files - permission_edit_issue_notes: Edit notes - permission_manage_news: Manage news - permission_view_calendar: View calendrier - permission_manage_members: Manage members - permission_edit_messages: Edit messages - permission_delete_issues: Delete issues - permission_view_issue_watchers: View watchers list - permission_manage_repository: Manage repository - permission_commit_access: Commit access - permission_browse_repository: Browse repository - permission_view_documents: View documents - permission_edit_project: Edit project - permission_add_issue_notes: Add notes - permission_save_queries: Save queries - permission_view_wiki_pages: View wiki - permission_rename_wiki_pages: Rename wiki pages - permission_edit_time_entries: Edit time logs - permission_edit_own_issue_notes: Edit own notes - setting_gravatar_enabled: Use Gravatar user icons - label_example: Example + permission_view_changesets: Разглеждане на changesets + permission_view_time_entries: Разглеждане на изразходваното време + permission_manage_versions: Управление на верÑиите + permission_manage_wiki: Управление на wiki + permission_manage_categories: Управление на категориите задачи + permission_protect_wiki_pages: Заключване на wiki Ñтраници + permission_comment_news: Коментиране на новини + permission_delete_messages: Изтриване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_select_project_modules: Избор на проектни модули + permission_manage_documents: Управление на документи + permission_edit_wiki_pages: Редактиране на wiki Ñтраници + permission_add_issue_watchers: ДобавÑне на наблюдатели + permission_view_gantt: Разглеждане на мрежов график + permission_move_issues: ПремеÑтване на задачи + permission_manage_issue_relations: Управление на връзките между задачите + permission_delete_wiki_pages: Изтриване на wiki Ñтраници + permission_manage_boards: Управление на boards + permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове + permission_view_wiki_edits: Разглеждане на wiki иÑÑ‚Ð¾Ñ€Ð¸Ñ + permission_add_messages: Публикуване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_view_messages: Разглеждане на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_manage_files: Управление на файлове + permission_edit_issue_notes: Редактиране на бележки + permission_manage_news: Управление на новини + permission_view_calendar: Разглеждане на календари + permission_manage_members: Управление на членовете (на екип) + permission_edit_messages: Редактиране на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_delete_issues: Изтриване на задачи + permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸ + permission_manage_repository: Управление на хранилища + permission_commit_access: ПоверÑване + permission_browse_repository: Разглеждане на хранилища + permission_view_documents: Разглеждане на документи + permission_edit_project: Редактиране на проект + permission_add_issue_notes: Добаване на бележки + permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries) + permission_view_wiki_pages: Разглеждане на wiki + permission_rename_wiki_pages: Преименуване на wiki Ñтраници + permission_edit_time_entries: Редактиране на time logs + permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки + setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar + label_example: Пример text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." - permission_edit_own_messages: Edit own messages - permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" - text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' - setting_diff_max_lines_displayed: Max number of diff lines displayed - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' + permission_edit_own_messages: Редактиране на ÑобÑтвени ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_delete_own_messages: Изтриване на ÑобÑтвени ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + label_user_activity: "ÐктивноÑÑ‚ на {{value}}" + label_updated_time_by: "Обновена от {{author}} преди {{age}}" + text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.' + setting_diff_max_lines_displayed: МакÑимален брой показани diff редове + text_plugin_assets_writable: Папката на приÑтавките е разрешена за Ð·Ð°Ð¿Ð¸Ñ + warning_attachments_not_saved: "{{count}} файла не бÑха запиÑани." + button_create_and_continue: Създаване и продължаване + text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред' label_display: Display field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration + setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла + setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline + field_watcher: Ðаблюдател + setting_openid: Рарешаване на OpenID вход и региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_login_with_open_id_option: или вход чрез OpenID + field_content: Съдържание + label_descending: ÐамалÑващ + label_sort: Сортиране + label_ascending: ÐараÑтващ + label_date_from_to: От {{start}} до {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image + text_wiki_page_destroy_question: Тази Ñтраница има {{descendants}} Ñтраници деца и descendant(s). Какво желаете да правите? + text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница + text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници + text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants + setting_password_min_length: Минимална дължина на парола + field_group_by: Групиране на резултатите по + mail_subject_wiki_content_updated: "Wiki Ñтраницата '{{id}}' не беше обновена" + label_wiki_content_added: Wiki Ñтраница беше добавена + mail_subject_wiki_content_added: "Wiki Ñтраницата '{{id}}' беше добавена" + mail_body_wiki_content_added: Wiki Ñтраницата '{{id}}' беше добавена от {{author}}. + label_wiki_content_updated: Wiki Ñтраница беше обновена + mail_body_wiki_content_updated: Wiki Ñтраницата '{{id}}' беше обновена от {{author}}. + permission_add_project: Създаване на проект + setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор + label_view_all_revisions: Разглеждане на вÑички ревизии + label_tag: ВерÑÐ¸Ñ + label_branch: работен вариант + error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта. + error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи"). + text_journal_changed: "{{label}} променен от {{old}} на {{new}}" + text_journal_set_to: "{{label}} уÑтановен на {{value}}" + text_journal_deleted: "{{label}} изтрит ({{old}})" + label_group_plural: Групи + label_group: Група + label_group_new: Ðова група + label_time_entry_plural: Използвано време + text_journal_added: "Добавено {{label}} {{value}}" + field_active: Ðктивен + enumeration_system_activity: СиÑтемна активноÑÑ‚ + permission_delete_issue_watchers: Изтриване на наблюдатели + version_status_closed: затворена + version_status_locked: заключена + version_status_open: отворена + error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново + label_user_anonymous: Ðнонимен + button_move_and_follow: ПремеÑтване и продължаване + setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект + setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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_version_sharing_hierarchy: С проектна Ð¹ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ + label_version_sharing_system: С вÑички проекти + label_version_sharing_descendants: С подпроекти + label_version_sharing_tree: С дърво на проектите + label_version_sharing_none: Ðе Ñподелен + error_can_not_archive_project: Този проект не може да бъде архивиран + button_duplicate: Дублиране + button_copy_and_follow: Копиране и продължаване + label_copy_source: Източник + setting_issue_done_ratio: ИзчиÑление на процента на готово задачи Ñ + setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑниетона задачите + error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен. + error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли). + setting_issue_done_ratio_issue_field: Използване на поле 'задача' + label_copy_same_as_target: Също като целта + label_copy_target: Цел + notice_issue_done_ratios_updated: Обновен процент на завършените задачи. + error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или Ñ€Ð¾Ð»Ñ + label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи + setting_start_of_week: Първи ден на Ñедмицата + permission_view_issues: Разглеждане на задачите + label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер + label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ {{value}} + label_api_access_key: API ключ за доÑтъп + label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди {{value}} + label_feeds_access_key: RSS access ключ + notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен. + setting_rest_api_enabled: Разрешаване на REST web ÑÑŠÑ€Ð²Ð¸Ñ + label_missing_api_access_key: ЛипÑващ API ключ + label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп + button_show: Показване + text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред). + setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове + 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 + label_board_locked: Заключена + permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници setting_cache_formatted_text: Cache formatted text - permission_manage_project_activities: Manage project activities - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + permission_manage_project_activities: Управление на дейноÑтите на проекта + error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача + label_profile: Профил + permission_manage_subtasks: Управление на подзадачите + field_parent_issue: РодителÑка задача + label_subtask_plural: Подзадачи + label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта + error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле + error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ ({{value}}) + error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита. + error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time + notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): {{errors}}." + text_zoom_out: ÐамалÑване + text_zoom_in: Увеличаване + notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log. + label_overall_spent_time: Общо употребено време field_time_entries: Log time + notice_not_authorized_archived_project: The project you're trying to access has been archived. + text_tip_issue_end_day: issue ending this day + field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + field_member_of_group: Assignee's group project_module_gantt: Gantt + text_are_you_sure_with_children: Delete issue and all child issues? + text_tip_issue_begin_end_day: issue beginning and ending this day + setting_default_notification_option: Default notification option project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + text_tip_issue_begin_day: issue beginning this day + label_user_mail_option_only_assigned: Only for things I am assigned to button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + field_assigned_to_role: Assignee's role + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/bs.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/bs.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -252,7 +252,6 @@ field_attr_lastname: Atribut za prezime field_attr_mail: Atribut za email field_onthefly: 'Kreiranje korisnika "On-the-fly"' - field_start_date: PoÄetak field_done_ratio: % Realizovano field_auth_source: Mod za authentifikaciju field_hide_mail: Sakrij moju email adresu @@ -676,7 +675,6 @@ label_search_titles_only: Pretraži samo naslove label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj na odabranim projektima..." - label_user_mail_option_none: "Samo za stvari koje ja gledam ili sam u njih ukljuÄen" label_user_mail_no_self_notified: "Ne želim notifikaciju za promjene koje sam ja napravio" label_registration_activation_by_email: aktivacija korisniÄkog raÄuna email-om label_registration_manual_activation: ruÄna aktivacija korisniÄkog raÄuna @@ -750,9 +748,9 @@ text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takoÄ‘e biti izbrisani." text_workflow_edit: Odaberite ulogu i podruÄje aktivnosti za ispravku toka promjena na aktivnosti text_are_you_sure: Da li ste sigurni ? - text_tip_task_begin_day: zadatak poÄinje danas - text_tip_task_end_day: zadatak zavrÅ¡ava danas - text_tip_task_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas + text_tip_issue_begin_day: zadatak poÄinje danas + text_tip_issue_end_day: zadatak zavrÅ¡ava danas + text_tip_issue_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Nakon snimanja, identifikator se ne može mijenjati.' text_caracters_maximum: "maksimum {{count}} karaktera." text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova." @@ -830,12 +828,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -927,8 +925,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ca.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/ca.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -195,10 +195,10 @@ mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:" mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies" mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:" - mail_subject_wiki_content_added: "S'ha afegit la pà gina wiki «{{page}}»" - mail_body_wiki_content_added: "En {{author}} ha afegit la pà gina wiki «{{page}}»." - mail_subject_wiki_content_updated: "S'ha actualitzat la pà gina wiki «{{page}}»" - mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pà gina wiki «{{page}}»." + mail_subject_wiki_content_added: "S'ha afegit la pà gina wiki «{{id}}»" + mail_body_wiki_content_added: "En {{author}} ha afegit la pà gina wiki «{{id}}»." + mail_subject_wiki_content_updated: "S'ha actualitzat la pà gina wiki «{{id}}»" + mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pà gina wiki «{{id}}»." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -264,7 +264,6 @@ field_attr_lastname: Atribut del cognom field_attr_mail: Atribut del correu electrònic field_onthefly: "Creació de l'usuari «al vol»" - field_start_date: Inici field_done_ratio: % realitzat field_auth_source: "Mode d'autenticació" field_hide_mail: "Oculta l'adreça de correu electrònic" @@ -725,7 +724,6 @@ label_search_titles_only: Cerca només en els tÃtols label_user_mail_option_all: "Per qualsevol esdeveniment en tots els meus projectes" label_user_mail_option_selected: "Per qualsevol esdeveniment en els projectes seleccionats..." - label_user_mail_option_none: "Només per les coses que vigilo o hi estic implicat" label_user_mail_no_self_notified: "No vull ser notificat pels canvis que faig jo mateix" label_registration_activation_by_email: activació del compte per correu electrònic label_registration_manual_activation: activació del compte manual @@ -842,9 +840,9 @@ text_journal_set_to: "{{label}} s'ha establert a {{value}}" text_journal_deleted: "{{label}} s'ha suprimit ({{old}})" text_journal_added: "S'ha afegit {{label}} {{value}}" - text_tip_task_begin_day: "tasca que s'inicia aquest dia" - text_tip_task_end_day: tasca que finalitza aquest dia - text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia" + text_tip_issue_begin_day: "tasca que s'inicia aquest dia" + text_tip_issue_end_day: tasca que finalitza aquest dia + text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia" text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.<br />Un cop desat, l'identificador no es pot modificar." text_caracters_maximum: "{{count}} carà cters com a mà xim." text_caracters_minimum: "Com a mÃnim ha de tenir {{count}} carà cters." @@ -916,8 +914,19 @@ enumeration_activities: Activitats (seguidor de temps) enumeration_system_activity: Activitat del sistema - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/cs.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/cs.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -24,8 +24,8 @@ time: "%H:%M" short: "%d %b %H:%M" long: "%B %d, %Y %H:%M" - am: "am" - pm: "pm" + am: "dop." + pm: "odp." datetime: distance_in_words: @@ -61,8 +61,8 @@ one: "vÃce než 1 rok" other: "vÃce než {{count}} roky" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "témeÅ™ 1 rok" + other: "téměř {{count}} roky" number: format: @@ -116,7 +116,7 @@ greater_than_start_date: "musà být vÄ›tšà než poÄáteÄnà datum" not_same_project: "nepatřà stejnému projektu" circular_dependency: "Tento vztah by vytvoÅ™il cyklickou závislost" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jednÃm z jeho dÃlÄÃch úkolů" # Updated by Josef LiÅ¡ka <jl@chl.cz> # CZ translation by Maxim KruÅ¡ina | Massimo Filippi, s.r.o. | maxim@mxm.cz @@ -150,19 +150,19 @@ notice_successful_connection: Úspěšné pÅ™ipojenÃ. notice_file_not_found: Stránka na kterou se snažÃte zobrazit neexistuje nebo byla smazána. notice_locking_conflict: Údaje byly zmÄ›nÄ›ny jiným uživatelem. - notice_scm_error: Entry and/or revision doesn't exist in the repository. + notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři. notice_not_authorized: Nemáte dostateÄná práva pro zobrazenà této stránky. notice_email_sent: "Na adresu {{value}} byl odeslán email" notice_email_error: "PÅ™i odesÃlánà emailu nastala chyba ({{value}})" notice_feeds_access_key_reseted: Váš klÃÄ pro pÅ™Ãstup k RSS byl resetován. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + notice_failed_to_save_issues: "Chyba pÅ™i uloženà {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}." notice_no_issue_selected: "Nebyl zvolen žádný úkol. ProsÃm, zvolte úkoly, které chcete editovat" notice_account_pending: "Váš úÄet byl vytvoÅ™en, nynà Äeká na schválenà administrátorem." notice_default_data_loaded: Výchozà konfigurace úspěšnÄ› nahrána. error_can_t_load_default_data: "Výchozà konfigurace nebyla nahrána: {{value}}" - error_scm_not_found: "Položka a/nebo revize neexistujà v repository." - error_scm_command_failed: "PÅ™i pokusu o pÅ™Ãstup k repository doÅ¡lo k chybÄ›: {{value}}" + error_scm_not_found: "Položka a/nebo revize neexistujà v repozitáři." + error_scm_command_failed: "PÅ™i pokusu o pÅ™Ãstup k repozitáři doÅ¡lo k chybÄ›: {{value}}" error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatřà k tomuto projektu' mail_subject_lost_password: "VaÅ¡e heslo ({{value}})" @@ -210,10 +210,10 @@ field_due_date: UzavÅ™Ãt do field_assigned_to: PÅ™iÅ™azeno field_priority: Priorita - field_fixed_version: PÅ™iÅ™azeno k verzi + field_fixed_version: CÃlová verze field_user: Uživatel field_role: Role - field_homepage: Homepage + field_homepage: Domovská stránka field_is_public: VeÅ™ejný field_parent: NadÅ™azený projekt field_is_in_roadmap: Úkoly zobrazené v plánu @@ -237,7 +237,6 @@ field_attr_lastname: PÅ™Ãjemnà (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytvářenà uživatelů - field_start_date: ZaÄátek field_done_ratio: % Hotovo field_auth_source: AutentifikaÄnà mód field_hide_mail: Nezobrazovat můj email @@ -265,18 +264,18 @@ setting_app_subtitle: Podtitulek aplikace setting_welcome_text: UvÃtacà text setting_default_language: Výchozà jazyk - setting_login_required: Auten. vyžadována + setting_login_required: Autentifikace vyžadována setting_self_registration: Povolena automatická registrace setting_attachment_max_size: Maximálnà velikost pÅ™Ãlohy setting_issues_export_limit: Limit pro export úkolů setting_mail_from: OdesÃlat emaily z adresy setting_bcc_recipients: PÅ™Ãjemci skryté kopie (bcc) - setting_host_name: Host name + setting_host_name: Jméno serveru setting_text_formatting: Formátovánà textu - setting_wiki_compression: Komperese historie Wiki - setting_feeds_limit: Feed content limit + setting_wiki_compression: Komprese historie Wiki + setting_feeds_limit: Limit obsahu pÅ™ÃspÄ›vků setting_default_projects_public: Nové projekty nastavovat jako veÅ™ejné - setting_autofetch_changesets: Autofetch commits + setting_autofetch_changesets: Automaticky stahovat commity setting_sys_api_enabled: Povolit WS pro správu repozitory setting_commit_ref_keywords: KlÃÄová slova pro odkazy setting_commit_fix_keywords: KlÃÄová slova pro uzavÅ™enà @@ -290,8 +289,8 @@ setting_protocol: Protokol setting_per_page_options: Povolené poÄty řádků na stránce setting_user_format: Formát zobrazenà uživatele - setting_activity_days_default: Days displayed on project activity - setting_display_subprojects_issues: Display subprojects issues on main projects by default + setting_activity_days_default: Dny zobrazené v Äinnosti projektu + setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavnÃm projektu project_module_issue_tracking: Sledovánà úkolů project_module_time_tracking: Sledovánà Äasu @@ -299,7 +298,7 @@ project_module_documents: Dokumenty project_module_files: Soubory project_module_wiki: Wiki - project_module_repository: Repository + project_module_repository: Repozitář project_module_boards: Diskuse label_user: Uživatel @@ -309,16 +308,16 @@ label_project_new: Nový projekt label_project_plural: Projekty label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: žádné projekty + one: 1 projekt + other: "{{count}} projekty(ů)" label_project_all: VÅ¡echny projekty label_project_latest: Poslednà projekty label_issue: Úkol label_issue_new: Nový úkol label_issue_plural: Úkoly label_issue_view_all: VÅ¡echny úkoly - label_issues_by: "Úkoly od uživatele {{value}}" + label_issues_by: "Úkoly podle {{value}}" label_issue_added: Úkol pÅ™idán label_issue_updated: Úkol aktualizován label_document: Dokument @@ -335,7 +334,7 @@ label_tracker: Fronta label_tracker_plural: Fronty label_tracker_new: Nová fronta - label_workflow: Workflow + label_workflow: PrůbÄ›h práce label_issue_status: Stav úkolu label_issue_status_plural: Stavy úkolů label_issue_status_new: Nový stav @@ -378,14 +377,14 @@ label_list: Seznam label_date: Datum label_integer: Celé ÄÃslo - label_float: Desetiné ÄÃslo + label_float: Desetinné ÄÃslo label_boolean: Ano/Ne label_string: Text label_text: Dlouhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "{{count}} staženÃ" + label_download_plural: "{{count}} staženÃ" label_no_data: Žádné položky label_change_status: ZmÄ›nit stav label_history: Historie @@ -416,17 +415,17 @@ label_closed_issues: uzavÅ™ený label_closed_issues_plural: uzavÅ™ené label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: 0 otevÅ™ených / {{total}} + one: 1 otevÅ™ený / {{total}} + other: "{{count}} otevÅ™ených / {{total}}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: 0 otevÅ™ených + one: 1 otevÅ™ený + other: "{{count}} otevÅ™ených" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: 0 uzavÅ™ených + one: 1 uzavÅ™ený + other: "{{count}} uzavÅ™ených" label_total: Celkem label_permissions: Práva label_current_status: Aktuálnà stav @@ -450,9 +449,9 @@ label_comment: Komentář label_comment_plural: Komentáře label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" + zero: žádné komentáře + one: 1 komentář + other: "{{count}} komentářů" label_comment_add: PÅ™idat komentáře label_comment_added: Komentář pÅ™idán label_comment_delete: Odstranit komentář @@ -482,8 +481,8 @@ label_contains: obsahuje label_not_contains: neobsahuje label_day_plural: dny - label_repository: Repository - label_repository_plural: Repository + label_repository: Repozitář + label_repository_plural: Repozitáře label_browse: Procházet label_modification: "{{count}} zmÄ›na" label_modification_plural: "{{count}} zmÄ›n" @@ -532,7 +531,7 @@ label_diff_inline: uvnitÅ™ label_diff_side_by_side: vedle sebe label_options: Nastavenà - label_copy_workflow_from: KopÃrovat workflow z + label_copy_workflow_from: KopÃrovat průbÄ›h práce z label_permissions_report: PÅ™ehled práv label_watched_issues: Sledované úkoly label_related_issues: SouvisejÃcà úkoly @@ -553,7 +552,7 @@ label_stay_logged_in: Zůstat pÅ™ihlášený label_disabled: zakázán label_show_completed_versions: Ukázat dokonÄené verze - label_me: mÄ› + label_me: já label_board: Fórum label_board_new: Nové fórum label_board_plural: Fóra @@ -576,18 +575,17 @@ label_module_plural: Moduly label_added_time_by: "PÅ™idáno uživatelem {{author}} pÅ™ed {{age}}" label_updated_time: "Aktualizováno pÅ™ed {{value}}" - label_jump_to_a_project: Zvolit projekt... + label_jump_to_a_project: Vyberte projekt... label_file_plural: Soubory label_changeset_plural: Changesety label_default_columns: Výchozà sloupce label_no_change_option: (beze zmÄ›ny) - label_bulk_edit_selected_issues: Bulk edit selected issues + label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů label_theme: Téma label_default: Výchozà label_search_titles_only: Vyhledávat pouze v názvech label_user_mail_option_all: "Pro vÅ¡echny události vÅ¡ech mých projektů" label_user_mail_option_selected: "Pro vÅ¡echny události vybraných projektů..." - label_user_mail_option_none: "Pouze pro události které sleduji nebo které se mne týkajÃ" label_user_mail_no_self_notified: "NezasÃlat informace o mnou vytvoÅ™ených zmÄ›nách" label_registration_activation_by_email: aktivace úÄtu emailem label_registration_manual_activation: manuálnà aktivace úÄtu @@ -600,7 +598,7 @@ label_scm: SCM label_plugins: Doplňky label_ldap_authentication: Autentifikace LDAP - label_downloads_abbr: D/L + label_downloads_abbr: Staž. label_optional_description: Volitelný popis label_add_another_file: PÅ™idat dalšà soubor label_preferences: Nastavenà @@ -653,33 +651,33 @@ text_regexp_info: napÅ™. ^[A-Z0-9]+$ text_min_max_length_info: 0 znamená bez limitu text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a vÅ¡echna souvisejÃcà data ? - text_workflow_edit: Vyberte roli a frontu k editaci workflow + text_workflow_edit: Vyberte roli a frontu k editaci průbÄ›hu práce text_are_you_sure: Jste si jisti? - text_tip_task_begin_day: úkol zaÄÃná v tento den - text_tip_task_end_day: úkol konÄà v tento den - text_tip_task_begin_end_day: úkol zaÄÃná a konÄà v tento den + text_tip_issue_begin_day: úkol zaÄÃná v tento den + text_tip_issue_end_day: úkol konÄà v tento den + text_tip_issue_begin_end_day: úkol zaÄÃná a konÄà v tento den text_project_identifier_info: 'Jsou povolena malá pÃsmena (a-z), ÄÃsla a pomlÄky.<br />Po uloženà již nenà možné identifikátor zmÄ›nit.' text_caracters_maximum: "{{count}} znaků maximálnÄ›." text_caracters_minimum: "Musà být alespoň {{count}} znaků dlouhé." text_length_between: "Délka mezi {{min}} a {{max}} znaky." - text_tracker_no_workflow: Pro tuto frontu nenà definován žádný workflow + text_tracker_no_workflow: Pro tuto frontu nenà definován žádný průbÄ›h práce text_unallowed_characters: Nepovolené znaky text_comma_separated: Povoleno vÃce hodnot (oddÄ›lÄ›né Äárkou). - text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages + text_issues_ref_in_commit_messages: Odkazovánà a opravovánà úkolů ve zprávách commitů text_issue_added: "Úkol {{id}} byl vytvoÅ™en uživatelem {{author}}." text_issue_updated: "Úkol {{id}} byl aktualizován uživatelem {{author}}." - text_wiki_destroy_confirmation: Opravdu si pÅ™ejete odstranit tuto WIKI a celý jejà obsah? + text_wiki_destroy_confirmation: Opravdu si pÅ™ejete odstranit tuto Wiki a celý jejà obsah? text_issue_category_destroy_question: "NÄ›které úkoly ({{count}}) jsou pÅ™iÅ™azeny k této kategorii. Co s nimi chtete udÄ›lat?" text_issue_category_destroy_assignments: ZruÅ¡it pÅ™iÅ™azenà ke kategorii text_issue_category_reassign_to: PÅ™iÅ™adit úkoly do této kategorie text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámenà pouze o vaÅ¡ich Äi o sledovaných položkách (napÅ™. o položkách jejichž jste autor nebo ke kterým jste pÅ™iÅ™azen(a))." - text_no_configuration_data: "Role, fronty, stavy úkolů ani workflow nebyly zatÃm nakonfigurovány.\nVelice doporuÄujeme nahrát výchozà konfiguraci.Po té si můžete vÅ¡e upravit" + text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatÃm nakonfigurovány.\nVelice doporuÄujeme nahrát výchozà konfiguraci. Po té si můžete vÅ¡e upravit" text_load_default_configuration: Nahrát výchozà konfiguraci text_status_changed_by_changeset: "Použito v changesetu {{value}}." text_issues_destroy_confirmation: 'Opravdu si pÅ™ejete odstranit vÅ¡echny zvolené úkoly?' text_select_project_modules: 'Aktivnà moduly v tomto projektu:' text_default_administrator_account_changed: Výchozà nastavenà administrátorského úÄtu zmÄ›nÄ›no - text_file_repository_writable: Povolen zápis do repository + text_file_repository_writable: Povolen zápis do adresáře ukládánà souborů text_rmagick_available: RMagick k dispozici (volitelné) text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno {{hours}} práce. Co chete udÄ›lat?" text_destroy_time_entries: Odstranit evidované hodiny. @@ -693,7 +691,7 @@ default_tracker_feature: Požadavek default_tracker_support: Podpora default_issue_status_new: Nový - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Ve vývoji default_issue_status_resolved: VyÅ™eÅ¡ený default_issue_status_feedback: ÄŒeká se default_issue_status_closed: UzavÅ™ený @@ -705,7 +703,7 @@ default_priority_high: Vysoká default_priority_urgent: Urgentnà default_priority_immediate: Okamžitá - default_activity_design: Design + default_activity_design: Návhr default_activity_development: Vývoj enumeration_issue_priorities: Priority úkolů @@ -718,8 +716,8 @@ mail_body_reminder: "{{count}} úkol(ů), které máte pÅ™iÅ™azeny má termÃn bÄ›hem nÄ›kolik dnà ({{days}}):" mail_subject_reminder: "{{count}} úkol(ů) má termÃn bÄ›hem nÄ›kolik dnà ({{days}})" text_user_wrote: "{{value}} napsal:" - label_duplicated_by: duplicated by - setting_enabled_scm: Povoleno SCM + label_duplicated_by: duplikováno od + setting_enabled_scm: Povolené SCM text_enumeration_category_reassign_to: 'PÅ™eÅ™adit je do této:' text_enumeration_destroy_question: "NÄ›kolik ({{count}}) objektů je pÅ™iÅ™azeno k této hodnotÄ›." label_incoming_emails: PÅ™Ãchozà e-maily @@ -745,22 +743,22 @@ permission_view_changesets: Zobrazovánà sady zmÄ›n permission_view_time_entries: Zobrazenà stráveného Äasu permission_manage_versions: Spravovánà verzà - permission_manage_wiki: Spravovánà wiki + permission_manage_wiki: Spravovánà Wiki permission_manage_categories: Spravovánà kategorià úkolů - permission_protect_wiki_pages: ZabezpeÄenà wiki stránek + permission_protect_wiki_pages: ZabezpeÄenà Wiki stránek permission_comment_news: Komentovánà novinek permission_delete_messages: Mazánà zpráv permission_select_project_modules: VýbÄ›r modulů projektu permission_manage_documents: Správa dokumentů - permission_edit_wiki_pages: Upravovánà stránek wiki + permission_edit_wiki_pages: Upravovánà stránek Wiki permission_add_issue_watchers: PÅ™idánà sledujÃcÃch uživatelů permission_view_gantt: Zobrazené Ganttova diagramu permission_move_issues: PÅ™esouvánà úkolů permission_manage_issue_relations: Spravovánà vztahů mezi úkoly - permission_delete_wiki_pages: Mazánà stránek na wiki + permission_delete_wiki_pages: Mazánà stránek na Wiki permission_manage_boards: Správa diskusnÃch fór permission_delete_wiki_pages_attachments: Mazánà pÅ™Ãloh - permission_view_wiki_edits: ProhlÞenà historie wiki + permission_view_wiki_edits: ProhlÞenà historie Wiki permission_add_messages: PosÃlánà zpráv permission_view_messages: ProhlÞenà zpráv permission_manage_files: Spravovánà souborů @@ -772,26 +770,26 @@ permission_delete_issues: Mazánà úkolů permission_view_issue_watchers: Zobrazenà seznamu sledujÃcÃh uživatelů permission_manage_repository: Spravovánà repozitáře - permission_commit_access: Commit access + permission_commit_access: Commit pÅ™Ãstup permission_browse_repository: Procházenà repozitáře permission_view_documents: ProhlÞenà dokumentů permission_edit_project: Úprava projektů permission_add_issue_notes: PÅ™idávánà poznámek permission_save_queries: Ukládánà dotazů - permission_view_wiki_pages: ProhlÞenà wiki - permission_rename_wiki_pages: PÅ™ejmenovávánà wiki stránek + permission_view_wiki_pages: ProhlÞenà Wiki + permission_rename_wiki_pages: PÅ™ejmenovávánà Wiki stránek permission_edit_time_entries: Upravovánà záznamů o stráveném Äasu permission_edit_own_issue_notes: Upravovánà vlastnÃch poznámek setting_gravatar_enabled: PoužÃt uživatelské ikony Gravatar label_example: PÅ™Ãklad - text_repository_usernames_mapping: "Vybrat nebo upravit mapovánà mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživateslkým jménem a uživatelským jménem v repozitáři jsou mapovanà automaticky." + text_repository_usernames_mapping: "Vybrat nebo upravit mapovánà mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovanà automaticky." permission_edit_own_messages: Upravit vlastnà zprávy permission_delete_own_messages: Smazat vlastnà zprávy label_user_activity: "Aktivita uživatele: {{value}}" label_updated_time_by: "Akutualizováno: {{author}} pÅ™ed: {{age}}" text_diff_truncated: '... RozdÃlový soubor je zkrácen, protože jeho délka pÅ™esahuje max. limit.' setting_diff_max_lines_displayed: Maximálnà poÄet zobrazenách řádků rozdÃlů - text_plugin_assets_writable: Plugin assets directory writable + text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets warning_attachments_not_saved: "{{count}} soubor(ů) nebylo možné uložit." button_create_and_continue: VytvoÅ™it a pokraÄovat text_custom_field_possible_values_info: 'Každá hodnota na novém řádku' @@ -810,111 +808,122 @@ label_date_from_to: Od {{start}} do {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions + text_wiki_page_destroy_question: Tato stránka má {{descendants}} podstránek a potomků. Co chcete udÄ›lat? + text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi + text_wiki_page_nullify_children: Ponechat podstránky jako koÅ™enové stránky + text_wiki_page_destroy_children: Smazat podstránky a vÅ¡echny jejich potomky + setting_password_min_length: Minimálnà délka hesla + field_group_by: Seskupovat výsledky podle + mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována" + label_wiki_content_added: Wiki stránka pÅ™idána + mail_subject_wiki_content_added: "'{{id}}' Wiki stránka byla pÅ™idána" + mail_body_wiki_content_added: "'{{id}}' Wiki stránka byla pÅ™idána od {{author}}." + label_wiki_content_updated: Wiki stránka aktualizována + mail_body_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována od {{author}}." + permission_add_project: VytvoÅ™it projekt + setting_new_project_user_role_id: Role pÅ™iÅ™azená uživateli bez práv administrátora, který projekt vytvoÅ™il + label_view_all_revisions: Zobrazit vÅ¡echny revize label_tag: Tag label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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 + error_no_tracker_in_project: Žádná fronta nebyla pÅ™iÅ™azena tomuto projektu. ProsÃm zkontroluje nastavenà projektu. + error_no_default_issue_status: Nenà nastaven výchozà stav úkolu. ProsÃm zkontrolujte nastavenà ("Administrace -> Stavy úkolů"). + text_journal_changed: "{{label}} zmÄ›nÄ›n z {{old}} na {{new}}" + text_journal_set_to: "{{label}} nastaven na {{value}}" + text_journal_deleted: "{{label}} smazán ({{old}})" + label_group_plural: Skupiny + label_group: Skupina + label_group_new: Nová skupina + label_time_entry_plural: Strávený Äas + text_journal_added: "{{label}} {{value}} pÅ™idán" + field_active: Aktivnà + enumeration_system_activity: Systémová aktivita + permission_delete_issue_watchers: Smazat pÅ™ihlÞejÃcà + version_status_closed: zavÅ™ený + version_status_locked: uzamÄený + version_status_open: otevÅ™ený + error_can_not_reopen_issue_on_closed_version: Úkol pÅ™iÅ™azený k uzavÅ™ené verzi nemůže být znovu otevÅ™en + label_user_anonymous: Anonymnà + button_move_and_follow: PÅ™esunout a následovat + setting_default_projects_modules: Výchozà zapnutné moduly pro nový projekt + setting_gravatar_default: Výchozà Gravatar + field_sharing: SdÃlenà + label_version_sharing_hierarchy: S hierarchià projektu + label_version_sharing_system: Se vÅ¡emi projekty + label_version_sharing_descendants: S podprojekty + label_version_sharing_tree: Se stromem projektu + label_version_sharing_none: NesdÃleno + error_can_not_archive_project: Tento projekt nemůže být archivován + button_duplicate: Duplikát + button_copy_and_follow: KopÃrovat a následovat + label_copy_source: Zdroj + setting_issue_done_ratio: SpoÄÃtat koeficient dokonÄenà úkolu s + setting_issue_done_ratio_issue_status: PoužÃt stav úkolu + error_issue_done_ratios_not_updated: Koeficient dokonÄenà úkolu nebyl aktualizován. + error_workflow_copy_target: ProsÃm vyberte cÃlovou frontu(y) a roly(e) + setting_issue_done_ratio_issue_field: PoužÃt pole úkolu + label_copy_same_as_target: Stejný jako cÃl + label_copy_target: CÃl + notice_issue_done_ratios_updated: Koeficienty dokonÄenà úkolu byly aktualizovány. + error_workflow_copy_source: ProsÃm vyberte zdrojovou frontu nebo roly + label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄenà úkolů + setting_start_of_week: ZaÄÃnat kalendáře + permission_view_issues: Zobrazit úkoly + label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou + label_revision_id: Revize {{value}} + label_api_access_key: API pÅ™Ãstupový klÃÄ + label_api_access_key_created_on: API pÅ™Ãstupový klÃÄ vytvoÅ™en {{value}} + label_feeds_access_key: RSS pÅ™Ãstupový klÃÄ + notice_api_access_key_reseted: Váš API pÅ™Ãstupový klÃÄ byl resetován. + setting_rest_api_enabled: Zapnout službu REST + label_missing_api_access_key: ChybÄ›jÃcà pÅ™Ãstupový klÃÄ API + label_missing_feeds_access_key: ChybÄ›jÃcà pÅ™Ãstupový klÃÄ RSS + button_show: Zobrazit + text_line_separated: VÃce hodnot povoleno (jeden řádek pro každou hodnotu). + setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z tÄ›chto řádků + permission_add_subprojects: VytvoÅ™it podprojekty + label_subproject_new: Nový podprojekt 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_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 - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. - field_principal: Principal - label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time - field_time_entries: Log time + Chystáte se odebrat si nÄ›která nebo vÅ¡echny svá oprávnÄ›nà a potom již nemusÃte být schopni upravit tento projekt. + Opravdu chcete pokraÄovat? + label_close_versions: ZavÅ™Ãt dokonÄené verze + label_board_sticky: Nálepka + label_board_locked: UzamÄeno + permission_export_wiki_pages: Exportovat Wiki stránky + setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávacà pamÄ›ti + permission_manage_project_activities: Spravovat aktivity projektu + error_unable_delete_issue_status: Nelze smazat stavy úkolů + label_profile: Profil + permission_manage_subtasks: Spravovat podúkoly + field_parent_issue: RodiÄovský úkol + label_subtask_plural: Podúkol + label_project_copy_notifications: Odeslat email oznámenà v průbÄ›hu kopie projektu + error_can_not_delete_custom_field: Nelze smazat volitelné pole + error_unable_to_connect: Nelze se pÅ™ipojit ({{value}}) + error_can_not_remove_role: Tato role je právÄ› použÃvaná a nelze ji smazat. + error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán. + field_principal: Hlavnà + label_my_page_block: Bloky na mé stránce + notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): {{errors}}." + text_zoom_out: Oddálit + text_zoom_in: PÅ™iblÞit + notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu. + label_overall_spent_time: CelkovÄ› strávený Äas + field_time_entries: Zaznamenaný Äas project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Kalendář + button_edit_associated_wikipage: "Upravit pÅ™iÅ™azenou Wiki stránku: {{page_title}}" + text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů? + field_text: Textové pole + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/da.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/da.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -250,7 +250,6 @@ field_attr_lastname: Efternavn attribut field_attr_mail: Email attribut field_onthefly: løbende brugeroprettelse - field_start_date: Start field_done_ratio: % Færdig field_auth_source: Sikkerhedsmetode field_hide_mail: Skjul min email @@ -594,7 +593,6 @@ label_search_titles_only: Søg kun i titler label_user_mail_option_all: "For alle hændelser på mine projekter" label_user_mail_option_selected: "For alle hændelser på de valgte projekter..." - label_user_mail_option_none: "Kun for ting jeg overvåger eller jeg er involveret i" label_user_mail_no_self_notified: "Jeg ønsker ikke besked om ændring foretaget af mig selv" label_registration_activation_by_email: kontoaktivering på email label_registration_manual_activation: manuel kontoaktivering @@ -657,9 +655,9 @@ text_project_destroy_confirmation: Er du sikker på at du vil slette dette projekt og alle relaterede data? text_workflow_edit: Vælg en rolle samt en type, for at redigere arbejdsgangen text_are_you_sure: Er du sikker? - text_tip_task_begin_day: opgaven begynder denne dag - text_tip_task_end_day: opaven slutter denne dag - text_tip_task_begin_end_day: opgaven begynder og slutter denne dag + text_tip_issue_begin_day: opgaven begynder denne dag + text_tip_issue_end_day: opaven slutter denne dag + text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.<br />Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.' text_caracters_maximum: "max {{count}} karakterer." text_caracters_minimum: "Skal være mindst {{count}} karakterer lang." @@ -832,12 +830,12 @@ text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider. setting_password_min_length: Mindste længde på kodeord field_group_by: Gruppér resultater efter - mail_subject_wiki_content_updated: "'{{page}}' wikisiden er blevet opdateret" + mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret" label_wiki_content_added: Wiki side tilføjet - mail_subject_wiki_content_added: "'{{page}}' wikisiden er blevet tilføjet" - mail_body_wiki_content_added: The '{{page}}' wikiside er blevet tilføjet af {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet" + mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}. label_wiki_content_updated: Wikiside opdateret - mail_body_wiki_content_updated: Wikisiden '{{page}}' er blevet opdateret af {{author}}. + mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}. permission_add_project: Opret projekt setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt label_view_all_revisions: Se alle revisioner @@ -929,8 +927,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/de.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/de.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -211,10 +211,10 @@ mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden" mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:" - mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt" - mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt." - mail_subject_wiki_content_updated: "Wiki-Seite '{{page}}' erfolgreich aktualisiert" - mail_body_wiki_content_updated: "Die Wiki-Seite '{{page}}' wurde von {{author}} aktualisiert." + mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt" + mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt." + mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert" + mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert." gui_validation_error: 1 Fehler gui_validation_error_plural: "{{count}} Fehler" @@ -280,7 +280,6 @@ field_attr_lastname: Name-Attribut field_attr_mail: E-Mail-Attribut field_onthefly: On-the-fly-Benutzererstellung - field_start_date: Beginn field_done_ratio: % erledigt field_auth_source: Authentifizierungs-Modus field_hide_mail: E-Mail-Adresse nicht anzeigen @@ -741,7 +740,6 @@ label_search_titles_only: Nur Titel durchsuchen label_user_mail_option_all: "Für alle Ereignisse in all meinen Projekten" label_user_mail_option_selected: "Für alle Ereignisse in den ausgewählten Projekten..." - label_user_mail_option_none: "Nur für Dinge, die ich beobachte oder an denen ich beteiligt bin" label_user_mail_no_self_notified: "Ich möchte nicht über Änderungen benachrichtigt werden, die ich selbst durchführe." label_registration_activation_by_email: Kontoaktivierung durch E-Mail label_registration_manual_activation: Manuelle Kontoaktivierung @@ -792,6 +790,8 @@ label_profile: Profil label_subtask_plural: Unteraufgaben label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. + label_principal_search: "Nach Benutzer oder Gruppe suchen:" + label_user_search: "Nach Benutzer suchen:" button_login: Anmelden button_submit: OK @@ -800,7 +800,7 @@ button_uncheck_all: Alles abwählen button_delete: Löschen button_create: Anlegen - button_create_and_continue: Anlegen + nächstes Ticket + button_create_and_continue: Anlegen und weiter button_test: Testen button_edit: Bearbeiten button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}" @@ -832,7 +832,7 @@ button_copy: Kopieren button_copy_and_follow: Kopieren und Ticket anzeigen button_annotate: Annotieren - button_update: Aktualisieren + button_update: Bearbeiten button_configure: Konfigurieren button_quote: Zitieren button_duplicate: Duplizieren @@ -859,9 +859,9 @@ text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt" text_journal_deleted: "{{label}} {{old}} wurde gelöscht" text_journal_added: "{{label}} {{value}} wurde hinzugefügt" - text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt - text_tip_task_end_day: Aufgabe, die an diesem Tag endet - text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet + text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt + text_tip_issue_end_day: Aufgabe, die an diesem Tag endet + text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geändert werden.' text_caracters_maximum: "Max. {{count}} Zeichen." text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein." @@ -933,7 +933,16 @@ enumeration_activities: Aktivitäten (Zeiterfassung) enumeration_system_activity: System-Aktivität - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + notice_not_authorized_archived_project: The project you're trying to access has been archived. + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + field_start_date: Start date + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/el.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/el.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -179,10 +179,10 @@ mail_body_account_activation_request: "'Ένας νÎος χÏήστης ({{value}}) Îχει εγγÏαφεί. Ο λογαÏιασμός είναι σε στάδιο αναμονής της ÎγκÏισης σας:" mail_subject_reminder: "{{count}} θÎμα(τα) με Ï€Ïοθεσμία στις επόμενες {{days}} ημÎÏες" mail_body_reminder: "{{count}}θÎμα(τα) που Îχουν ανατεθεί σε σας, με Ï€Ïοθεσμία στις επόμενες {{days}} ημÎÏες:" - mail_subject_wiki_content_added: "'Ï€ÏοστÎθηκε η σελίδα wiki {{page}}' " - mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' Ï€ÏοστÎθηκε από τον {{author}}." - mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{page}}' " - mail_body_wiki_content_updated: "Η σελίδα wiki '{{page}}' ενημεÏώθηκε από τον {{author}}." + mail_subject_wiki_content_added: "'Ï€ÏοστÎθηκε η σελίδα wiki {{id}}' " + mail_body_wiki_content_added: "Η σελίδα wiki '{{id}}' Ï€ÏοστÎθηκε από τον {{author}}." + mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{id}}' " + mail_body_wiki_content_updated: "Η σελίδα wiki '{{id}}' ενημεÏώθηκε από τον {{author}}." gui_validation_error: 1 σφάλμα gui_validation_error_plural: "{{count}} σφάλματα" @@ -247,7 +247,6 @@ field_attr_lastname: Ιδιότητα επωνÏμου field_attr_mail: Ιδιότητα email field_onthefly: Άμεση δημιουÏγία χÏήστη - field_start_date: Εκκίνηση field_done_ratio: % επιτεÏχθη field_auth_source: ΤÏόπος πιστοποίησης field_hide_mail: ΑπόκÏυψη διεÏθυνσης email @@ -678,7 +677,6 @@ label_search_titles_only: Αναζήτηση τίτλων μόνο label_user_mail_option_all: "Για όλες τις εξελίξεις σε όλα τα ÎÏγα μου" label_user_mail_option_selected: "Για όλες τις εξελίξεις μόνο στα επιλεγμÎνα ÎÏγα..." - label_user_mail_option_none: "Μόνο για Ï€Ïάγματα που παÏακολουθώ ή συμμετÎχω ενεÏγά" label_user_mail_no_self_notified: "Δεν θÎλω να ειδοποιοÏμαι για τις δικÎÏ‚ μου αλλαγÎÏ‚" label_registration_activation_by_email: ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Î¼Îµ email label_registration_manual_activation: χειÏοκίνητη ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï @@ -761,9 +759,9 @@ text_subprojects_destroy_warning: "Επίσης το(α) επιμÎÏους ÎÏγο(α): {{value}} θα διαγÏαφοÏν." text_workflow_edit: ΕπιλÎξτε Îνα Ïόλο και Îναν ανιχνευτή για να επεξεÏγαστείτε τη Ïοή εÏγασίας text_are_you_sure: Είστε σίγουÏος ; - text_tip_task_begin_day: καθήκοντα που ξεκινάνε σήμεÏα - text_tip_task_end_day: καθήκοντα που τελειώνουν σήμεÏα - text_tip_task_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα + text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμεÏα + text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμεÏα + text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα text_project_identifier_info: 'ΕπιτÏÎπονται μόνο μικÏά πεζά γÏάμματα (a-z), αÏιθμοί και παÏλες. <br /> Μετά την αποθήκευση, το αναγνωÏιστικό δεν μποÏεί να αλλάξει.' text_caracters_maximum: "μÎγιστος αÏιθμός {{count}} χαÏακτήÏες." text_caracters_minimum: "Î ÏÎπει να πεÏιÎχει τουλάχιστον {{count}} χαÏακτήÏες." @@ -913,8 +911,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/en-GB.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/en-GB.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -84,7 +84,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -189,10 +189,10 @@ mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -257,7 +257,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Start + field_start_date: Start date field_done_ratio: % Done field_auth_source: Authentication mode field_hide_mail: Hide my email address @@ -711,7 +711,7 @@ label_search_titles_only: Search titles only label_user_mail_option_all: "For any event on all my projects" label_user_mail_option_selected: "For any event on the selected projects only..." - label_user_mail_option_none: "Only for things I watch or I'm involved in" + label_user_mail_option_none: "No events" label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -825,9 +825,9 @@ text_journal_set_to: "{{label}} set to {{value}}" text_journal_deleted: "{{label}} deleted ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: task beginning this day - text_tip_task_end_day: task ending this day - text_tip_task_begin_end_day: task beginning and ending this day + text_tip_issue_begin_day: task beginning this day + text_tip_issue_end_day: task ending this day + text_tip_issue_begin_end_day: task beginning and ending this day text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.' text_caracters_maximum: "{{count}} characters maximum." text_caracters_minimum: "Must be at least {{count}} characters long." @@ -922,3 +922,12 @@ button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + notice_not_authorized_archived_project: The project you're trying to access has been archived. + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/en.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/en.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -81,7 +81,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -150,6 +150,7 @@ notice_file_not_found: The page you were trying to access doesn't exist or has been removed. notice_locking_conflict: Data has been updated by another user. notice_not_authorized: You are not authorized to access this page. + notice_not_authorized_archived_project: The project you're trying to access has been archived. notice_email_sent: "An email was sent to {{value}}" notice_email_error: "An error occurred while sending mail ({{value}})" notice_feeds_access_key_reseted: Your RSS access key was reset. @@ -192,10 +193,10 @@ mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -261,7 +262,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Start + field_start_date: Start date field_done_ratio: % Done field_auth_source: Authentication mode field_hide_mail: Hide my email address @@ -293,9 +294,10 @@ field_group_by: Group results by field_sharing: Sharing field_parent_issue: Parent task - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role + field_member_of_group: "Assignee's group" + field_assigned_to_role: "Assignee's role" field_text: Text field + field_visible: Visible setting_app_title: Application title setting_app_subtitle: Application subtitle @@ -324,6 +326,7 @@ setting_issue_list_default_columns: Default columns displayed on the issue list setting_repositories_encodings: Repositories encodings setting_commit_logs_encoding: Commit messages encoding + setting_emails_header: Emails header setting_emails_footer: Emails footer setting_protocol: Protocol setting_per_page_options: Objects per page options @@ -350,6 +353,7 @@ setting_start_of_week: Start calendars on setting_rest_api_enabled: Enable REST web service setting_cache_formatted_text: Cache formatted text + setting_default_notification_option: Default notification option permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -725,7 +729,10 @@ label_search_titles_only: Search titles only label_user_mail_option_all: "For any event on all my projects" label_user_mail_option_selected: "For any event on the selected projects only..." - label_user_mail_option_none: "Only for things I watch or I'm involved in" + label_user_mail_option_none: "No events" + label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in" + label_user_mail_option_only_assigned: "Only for things I am assigned to" + label_user_mail_option_only_owner: "Only for things I am the owner of" label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -776,6 +783,8 @@ label_profile: Profile label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" button_login: Login button_submit: Submit @@ -844,9 +853,9 @@ text_journal_set_to: "{{label}} set to {{value}}" text_journal_deleted: "{{label}} deleted ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: task beginning this day - text_tip_task_end_day: task ending this day - text_tip_task_begin_end_day: task beginning and ending this day + text_tip_issue_begin_day: issue beginning this day + text_tip_issue_end_day: issue ending this day + text_tip_issue_begin_end_day: issue beginning and ending this day text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.' text_caracters_maximum: "{{count}} characters maximum." text_caracters_minimum: "Must be at least {{count}} characters long."
--- a/config/locales/.svn/text-base/es.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/es.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -313,7 +313,6 @@ field_role: Perfil field_searchable: Incluir en las búsquedas field_spent_on: Fecha - field_start_date: Fecha de inicio field_start_page: Página principal field_status: Estado field_subject: Tema @@ -636,7 +635,6 @@ label_user_activity: "Actividad de {{value}}" label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mÃ" label_user_mail_option_all: "Para cualquier evento en todos mis proyectos" - label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo" label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..." label_user_new: Nuevo usuario label_user_plural: Usuarios @@ -821,9 +819,9 @@ text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:' text_status_changed_by_changeset: "Aplicado en los cambios {{value}}" text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán" - text_tip_task_begin_day: tarea que comienza este dÃa - text_tip_task_begin_end_day: tarea que comienza y termina este dÃa - text_tip_task_end_day: tarea que termina este dÃa + text_tip_issue_begin_day: tarea que comienza este dÃa + text_tip_issue_begin_end_day: tarea que comienza y termina este dÃa + text_tip_issue_end_day: tarea que termina este dÃa text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición text_unallowed_characters: Caracteres no permitidos text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)." @@ -855,12 +853,12 @@ text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes setting_password_min_length: Longitud mÃnima de la contraseña field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "La página wiki '{{page}}' ha sido actualizada" + mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada" label_wiki_content_added: Página wiki añadida - mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{page}}'." - mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{page}}'." + mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'." + mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'." label_wiki_content_updated: Página wiki actualizada - mail_body_wiki_content_updated: La página wiki '{{page}}' ha sido actualizada por {{author}}. + mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}. permission_add_project: Crear proyecto setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos label_view_all_revisions: Ver todas las revisiones @@ -953,8 +951,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/eu.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/eu.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -188,10 +188,10 @@ mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:" mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a" mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:" - mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da" - mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du." - mail_subject_wiki_content_updated: "'{{page}}' wiki orria eguneratu da" - mail_body_wiki_content_updated: "{{author}}-(e)k '{{page}}' wiki orria eguneratu du." + mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da" + mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du." + mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da" + mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du." gui_validation_error: akats 1 gui_validation_error_plural: "{{count}} akats" @@ -257,7 +257,6 @@ field_attr_lastname: Abizenak atributua field_attr_mail: Eposta atributua field_onthefly: Zuzeneko erabiltzaile sorrera - field_start_date: Hasiera field_done_ratio: Egindako % field_auth_source: Autentikazio modua field_hide_mail: Nire eposta helbidea ezkutatu @@ -707,7 +706,6 @@ label_search_titles_only: Izenburuetan bakarrik bilatu label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat" label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..." - label_user_mail_option_none: "Nik behatu edo parte hartze dudan gauzetarako bakarrik" label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi" label_registration_activation_by_email: kontuak epostaz gaitu label_registration_manual_activation: kontuak eskuz gaitu @@ -821,9 +819,9 @@ text_journal_set_to: "{{label}}-k {{value}} balioa hartu du" text_journal_deleted: "{{label}} ezabatuta ({{old}})" text_journal_added: "{{label}} {{value}} gehituta" - text_tip_task_begin_day: gaur hasten diren atazak - text_tip_task_end_day: gaur bukatzen diren atazak - text_tip_task_begin_end_day: gaur hasi eta bukatzen diren atazak + text_tip_issue_begin_day: gaur hasten diren atazak + text_tip_issue_end_day: gaur bukatzen diren atazak + text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.' text_caracters_maximum: "{{count}} karaktere gehienez." text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du." @@ -917,8 +915,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/fi.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/fi.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -262,7 +262,6 @@ field_attr_lastname: Sukunimenmääre field_attr_mail: Sähköpostinmääre field_onthefly: Automaattinen käyttäjien luonti - field_start_date: Alku field_done_ratio: % Tehty field_auth_source: Varmennusmuoto field_hide_mail: Piiloita sähköpostiosoitteeni @@ -579,7 +578,6 @@ label_search_titles_only: Hae vain otsikot label_user_mail_option_all: "Kaikista tapahtumista kaikissa projekteistani" label_user_mail_option_selected: "Kaikista tapahtumista vain valitsemistani projekteista..." - label_user_mail_option_none: "Vain tapahtumista joita valvon tai olen mukana" label_user_mail_no_self_notified: "En halua muistutusta muutoksista joita itse teen" label_registration_activation_by_email: tilin aktivointi sähköpostitse label_registration_manual_activation: tilin aktivointi käsin @@ -636,9 +634,9 @@ text_project_destroy_confirmation: Oletko varma että haluat poistaa tämän projektin ja kaikki siihen kuuluvat tiedot? text_workflow_edit: Valitse rooli ja tapahtuma muokataksesi työnkulkua text_are_you_sure: Oletko varma? - text_tip_task_begin_day: tehtävä joka alkaa tänä päivänä - text_tip_task_end_day: tehtävä joka loppuu tänä päivänä - text_tip_task_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä + text_tip_issue_begin_day: tehtävä joka alkaa tänä päivänä + text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä + text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.<br />Tallentamisen jälkeen tunnistetta ei voi muuttaa.' text_caracters_maximum: "{{count}} merkkiä enintään." text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä." @@ -841,12 +839,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -938,8 +936,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/fr.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/fr.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -169,6 +169,7 @@ notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée." notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page." + notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé. notice_email_sent: "Un email a été envoyé à {{value}}" notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})" notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." @@ -203,10 +204,10 @@ mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :" mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})" mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :" - mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée" - mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}." - mail_subject_wiki_content_updated: "Page wiki '{{page}}' mise à jour" - mail_body_wiki_content_updated: "La page wiki '{{page}}' a été mise à jour par {{author}}." + mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée" + mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}." + mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour" + mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}." gui_validation_error: 1 erreur gui_validation_error_plural: "{{count}} erreurs" @@ -271,7 +272,6 @@ field_attr_lastname: Attribut Nom field_attr_mail: Attribut Email field_onthefly: Création des utilisateurs à la volée - field_start_date: Début field_done_ratio: % réalisé field_auth_source: Mode d'authentification field_hide_mail: Cacher mon adresse mail @@ -303,6 +303,7 @@ field_sharing: Partage field_active: Actif field_parent_issue: Tâche parente + field_visible: Visible setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application @@ -718,7 +719,6 @@ label_search_titles_only: Uniquement dans les titres label_user_mail_option_all: "Pour tous les événements de tous mes projets" label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..." - label_user_mail_option_none: "Seulement pour ce que je surveille ou à quoi je participe" label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue" label_registration_activation_by_email: activation du compte par email label_registration_manual_activation: activation manuelle du compte @@ -773,6 +773,8 @@ label_profile: Profil label_subtask_plural: Sous-tâches label_project_copy_notifications: Envoyer les notifications durant la copie du projet + label_principal_search: "Rechercher un utilisateur ou un groupe :" + label_user_search: "Rechercher un utilisateur :" button_login: Connexion button_submit: Soumettre @@ -833,9 +835,9 @@ text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés." text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow text_are_you_sure: Êtes-vous sûr ? - text_tip_task_begin_day: tâche commençant ce jour - text_tip_task_end_day: tâche finissant ce jour - text_tip_task_begin_end_day: tâche commençant et finissant ce jour + text_tip_issue_begin_day: tâche commençant ce jour + text_tip_issue_end_day: tâche finissant ce jour + text_tip_issue_begin_end_day: tâche commençant et finissant ce jour text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.' text_caracters_maximum: "{{count}} caractères maximum." text_caracters_minimum: "{{count}} caractères minimum." @@ -930,9 +932,16 @@ label_overall_spent_time: Temps passé global field_time_entries: Log time project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Modifier la page de Wiki associée: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Calendrier + button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}" + text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ? + field_text: Champ texte + label_user_mail_option_only_owner: Seulement pour ce que j'ai créé + setting_default_notification_option: Option de notification par défaut + label_user_mail_option_only_my_events: Seulement pour ce que je surveille + label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné + label_user_mail_option_none: Aucune notification + field_member_of_group: Groupe de l'assigné + field_assigned_to_role: Rôle de l'assigné + field_start_date: Start date + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/gl.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/gl.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -290,7 +290,6 @@ field_role: Perfil field_searchable: IncluÃr nas búsquedas field_spent_on: Data - field_start_date: Data de inicio field_start_page: Páxina principal field_status: Estado field_subject: Tema @@ -613,7 +612,6 @@ label_user_activity: "Actividade de {{value}}" label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min" label_user_mail_option_all: "Para calquera evento en tódolos proxectos" - label_user_mail_option_none: "Só para elementos monitorizados ou relacionados comigo" label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..." label_user_new: Novo usuario label_user_plural: Usuarios @@ -798,9 +796,9 @@ text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:' text_status_changed_by_changeset: "Aplicado nos cambios {{value}}" text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán" - text_tip_task_begin_day: tarefa que comeza este dÃa - text_tip_task_begin_end_day: tarefa que comeza e remata este dÃa - text_tip_task_end_day: tarefa que remata este dÃa + text_tip_issue_begin_day: tarefa que comeza este dÃa + text_tip_issue_begin_end_day: tarefa que comeza e remata este dÃa + text_tip_issue_end_day: tarefa que remata este dÃa text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición text_unallowed_characters: Caracteres non permitidos text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)." @@ -832,12 +830,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -929,8 +927,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/he.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/he.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -104,7 +104,7 @@ inclusion: "×œ× × ×›×œ×œ ברשימה" exclusion: "×œ× ×–×ž×™×Ÿ" invalid: "×œ× ×•×œ×™×“×™" - confirmation: "×œ× ×ª×•×× ×œ×ישורו" + confirmation: "×œ× ×ª×•×× ×œ×ישור" accepted: "חייב ב×ישור" empty: "חייב להכלל" blank: "חייב להכלל" @@ -122,8 +122,8 @@ even: "חייב להיות זוגי" greater_than_start_date: "חייב להיות מ×וחר יותר מת×ריך ההתחלה" not_same_project: "×œ× ×©×™×™×š ל×ותו הפרויקט" - circular_dependency: "הקשר ×”×–×” יצור תלות מעגלית" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + circular_dependency: "קשר ×–×” יצור תלות מעגלית" + cant_link_an_issue_with_a_descendant: "×œ× × ×™×ª×Ÿ לקשר × ×•×©× ×œ×ª×ªÖ¾×ž×©×™×ž×” שלו" actionview_instancetag_blank_option: בחר בבקשה @@ -144,7 +144,7 @@ notice_account_wrong_password: סיסמה שגויה notice_account_register_done: החשבון × ×•×¦×¨ בהצלחה. להפעלת החשבון לחץ על הקישור ×©× ×©×œ×— לדו×"ל שלך. notice_account_unknown_email: משתמש ×œ× ×ž×•×›×¨. - notice_can_t_change_password: החשבון ×”×–×” משתמש במקור ×ימות ×—×™×¦×•× ×™. ×©×™× ×•×™ סיסמה ×”×™× ×• בילתי ×פשר + notice_can_t_change_password: החשבון ×”×–×” משתמש במקור הזדהות ×—×™×¦×•× ×™. ×©×™× ×•×™ סיסמה ×”×™× ×• בילתי ×פשר notice_account_lost_email_sent: דו×"ל ×¢× ×”×•×¨×ות לבחירת סיסמה חדשה × ×©×œ×— ×ליך. notice_account_activated: ×—×©×‘×•× ×š הופעל. ×תה יכול להתחבר כעת. notice_successful_create: יצירה מוצלחת. @@ -154,8 +154,9 @@ notice_file_not_found: הדף ש×תה ×ž× ×¡×” לגשת ×ליו ××™× ×• ×§×™×™× ×ו שהוסר. notice_locking_conflict: המידע עודכן על ידי משתמש ×חר. notice_not_authorized: ××™× ×š מורשה לר×ות דף ×–×”. + notice_not_authorized_archived_project: הפרויקט ש×תה ×ž× ×¡×” לגשת ×ליו × ×ž×¦× ×‘×רכיון. notice_email_sent: "דו×ל × ×©×œ×— לכתובת {{value}}" - notice_email_error: "×רעה שגי××” בעט שליחת הדו×ל ({{value}})" + notice_email_error: "×רעה שגי××” בעת שליחת הדו×ל ({{value}})" notice_feeds_access_key_reseted: מפתח ×”Ö¾RSS שלך ×ופס. notice_api_access_key_reseted: מפתח הגישה שלך ל־API ×ופס. notice_failed_to_save_issues: "× ×›×©×¨×ª בשמירת {{count}} × ×•×©×\×™× ×‘ {{total}} × ×‘×—×¨×•: {{ids}}." @@ -168,7 +169,7 @@ notice_issue_done_ratios_updated: ×חוזי התקדמות ×œ× ×•×©× ×¢×•×“×›× ×•. error_can_t_load_default_data: "×פשרויות ברירת המחדל ×œ× ×”×¦×œ×™×—×• להיטען: {{value}}" - error_scm_not_found: ×›× ×™×¡×” ו\×ו גירסה ××™× × ×§×™×™×ž×™× ×‘×ž×גר. + error_scm_not_found: ×›× ×™×¡×” ו\×ו מהדורה ××™× × ×§×™×™×ž×™× ×‘×ž×גר. error_scm_command_failed: "×רעה שגי××” בעת × ×™×¡×•×Ÿ גישה למ×גר: {{value}}" error_scm_annotate: "×”×›× ×™×¡×” ×œ× ×§×™×™×ž×ª ×ו ×©×œ× × ×™×ª×Ÿ לת×ר ×ותה." error_issue_not_found_in_project: '×”× ×•×©××™× ×œ× × ×ž×¦×ו ×ו ××™× × ×©×™×›×™× ×œ×¤×¨×•×™×§×˜' @@ -194,12 +195,12 @@ mail_body_account_information: פרטי החשבון שלך mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}" mail_body_account_activation_request: "משתמש חדש ({{value}}) × ×¨×©×. החשבון שלו מחכה ל×ישור שלך:" - mail_subject_reminder: "{{count}} × ×•×©××™× ×ž×™×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})" + mail_subject_reminder: "{{count}} × ×•×©××™× ×ž×™×•×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})" mail_body_reminder: "{{count}} × ×•×©××™× ×©×ž×™×•×¢×“×™× ×ליך ×ž×™×•×¢×“×™× ×œ×”×’×©×” בתוך {{days}} ימי×:" - mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{page}}' × ×•×¡×£" - mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{page}}' × ×•×¡×£ ×¢"×™ {{author}}. - mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{page}}' עודכן" - mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{page}}' עודכן ×¢"×™ {{author}}. + mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{id}}' × ×•×¡×£" + mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{id}}' × ×•×¡×£ ×¢"×™ {{author}}. + mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{id}}' עודכן" + mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{id}}' עודכן ×¢"×™ {{author}}. gui_validation_error: שגי××” 1 gui_validation_error_plural: "{{count}} שגי×ות" @@ -248,7 +249,7 @@ field_login: ×©× ×ž×©×ª×ž×© field_mail_notification: הודעות דו×"ל field_admin: × ×™×”×•×œ - field_last_login_on: חיבור ×חרון + field_last_login_on: התחברות ××—×¨×•× ×” field_language: שפה field_effective_date: ת×ריך field_password: סיסמה @@ -265,9 +266,8 @@ field_attr_lastname: ×ª×›×•× ×ª ×©× ×ž×©×¤×—×” field_attr_mail: ×ª×›×•× ×ª דו×"ל field_onthefly: יצירת ×ž×©×ª×ž×©×™× ×–×¨×™×–×” - field_start_date: ת×ריך התחלה field_done_ratio: % גמור - field_auth_source: מצב ×ימות + field_auth_source: מקור הזדהות field_hide_mail: ×”×—×‘× ×ת כתובת הדו×"ל שלי field_comments: הערות field_url: URL @@ -284,6 +284,7 @@ field_redirect_existing_links: העבר ×§×™×©×•×¨×™× ×§×™×™×ž×™× field_estimated_hours: זמן משוער field_column_names: עמודות + field_time_entries: ×¨×™×©×•× ×–×ž× ×™× field_time_zone: ×יזור זמן field_searchable: × ×™×ª×Ÿ לחיפוש field_default_value: ערך ברירת מחדל @@ -296,13 +297,14 @@ field_group_by: קבץ ×ת התוצ×ות לפי field_sharing: שיתוף field_parent_issue: משימת ×ב + field_text: שדה טקסט setting_app_title: כותרת ×™×©×•× setting_app_subtitle: תת־כותרת ×™×©×•× setting_welcome_text: טקסט "ברוך הב×" setting_default_language: שפת ברירת מחדל - setting_login_required: דרוש ×ימות - setting_self_registration: ×פשר הרשמות עצמית + setting_login_required: דרושה הזדהות + setting_self_registration: ×פשר הרשמה עצמית setting_attachment_max_size: גודל דבוקה מקסימ×לי setting_issues_export_limit: גבול ×™×¦×•× × ×•×©××™× setting_mail_from: כתובת שליחת דו×"ל @@ -310,14 +312,14 @@ setting_plain_text_mail: טקסט פשוט בלבד (×œ×œ× HTML) setting_host_name: ×©× ×©×¨×ª setting_text_formatting: עיצוב טקסט - setting_wiki_compression: כיווץ היסטורית WIKI + setting_wiki_compression: כיווץ היסטורית wiki setting_feeds_limit: גבול תוכן ×”×–× ×•×ª setting_default_projects_public: ×¤×¨×•×™×§×˜×™× ×—×“×©×™× ×”×™× × ×¤×•×ž×‘×™×™× ×›×‘×¨×™×¨×ª מחדל - setting_autofetch_changesets: משיכה ×וטומטית של ×¢×™×“×›×•× ×™× + setting_autofetch_changesets: משיכה ×וטומטית של ×©×™× ×•×™×™× setting_sys_api_enabled: ×פשר שירות רשת ×œ× ×™×”×•×œ המ×גר setting_commit_ref_keywords: מילות מפתח מקשרות setting_commit_fix_keywords: מילות מפתח ×ž×ª×§× ×•×ª - setting_autologin: חיבור ×וטומטי + setting_autologin: התחברות ×וטומטית setting_date_format: פורמט ת×ריך setting_time_format: פורמט זמן setting_cross_project_issue_relations: הרשה קישור × ×•×©××™× ×‘×™×Ÿ ×¤×¨×•×™×§×˜×™× @@ -339,17 +341,18 @@ setting_gravatar_default: ×ª×ž×•× ×ª Gravatar ברירת מחדל setting_diff_max_lines_displayed: מספר מירבי של שורות בתצוגת ×©×™× ×•×™×™× setting_file_max_size_displayed: גודל מירבי של מלל המוצג בתוך השורה - setting_repository_log_display_limit: מספר מירבי של גירס×ות המוצגות ביומן קובץ + setting_repository_log_display_limit: מספר מירבי של מהדורות המוצגות ביומן קובץ setting_openid: ×פשר התחברות ×•×¨×™×©×•× ×‘×מצעות OpenID - setting_password_min_length: ×ורך ×¡×™×¡×ž× ×ž×™× ×™×ž×לי + setting_password_min_length: ×ורך סיסמה ×ž×™× ×™×ž×לי setting_new_project_user_role_id: התפקיד שמוגדר למשתמש פשוט ×שר יוצר פרויקט setting_default_projects_modules: ×ž×•×“×•×œ×™× ×ž××•×¤×©×¨×™× ×‘×‘×¨×™×¨×ª מחדל עבור ×¤×¨×•×™×§×˜×™× ×—×“×©×™× setting_issue_done_ratio: חשב ×חוז התקדמות ×‘× ×•×©× ×¢× setting_issue_done_ratio_issue_field: השתמש בשדה ×”× ×•×©× setting_issue_done_ratio_issue_status: השתמש במצב ×”× ×•×©× - setting_start_of_week: התחל ×™×•×ž× ×™× ×œ×¤×™ + setting_start_of_week: השבוע מתחיל ×‘×™×•× setting_rest_api_enabled: ×פשר שירות רשת REST setting_cache_formatted_text: שמור טקסט מעוצב במטמון + setting_default_notification_option: ×פשרות התר××” ברירת־מחדל permission_add_project: יצירת פרויקט permission_add_subprojects: יצירת תתי־פרויקט @@ -376,9 +379,9 @@ permission_add_issue_watchers: הוספת ×¦×•×¤×™× permission_delete_issue_watchers: הסרת ×¦×•×¤×™× permission_log_time: תיעוד זמן שהושקע - permission_view_time_entries: צפיה בזמן שהושקע + permission_view_time_entries: צפיה ×‘×¨×™×©×•× ×–×ž× ×™× permission_edit_time_entries: עריכת ×¨×™×©×•× ×–×ž× ×™× - permission_edit_own_time_entries: עריכת לוג הזמן של עצמו + permission_edit_own_time_entries: עריכת ×¨×™×©×•× ×”×–×ž× ×™× ×©×œ עצמו permission_manage_news: × ×™×”×•×œ חדשות permission_comment_news: תגובה לחדשות permission_manage_documents: × ×™×”×•×œ ×ž×¡×ž×›×™× @@ -395,7 +398,7 @@ permission_protect_wiki_pages: ×”×’× ×” על כל דפי wiki permission_manage_repository: × ×™×”×•×œ מ×גר permission_browse_repository: סיור במ×גר - permission_view_changesets: צפיה בקבוצות ×©×™× ×•×™×™× + permission_view_changesets: צפיה בסדרות ×©×™× ×•×™×™× permission_commit_access: ×ישור הפקדות permission_manage_boards: × ×™×”×•×œ לוחות permission_view_messages: צפיה בהודעות @@ -415,6 +418,8 @@ project_module_wiki: Wiki project_module_repository: מ×גר project_module_boards: לוחות + project_module_calendar: לוח ×©× ×” + project_module_gantt: ×’×× ×˜ label_user: משתמש label_user_plural: ×ž×©×ª×ž×©×™× @@ -439,7 +444,7 @@ label_document: מסמך label_document_new: מסמך חדש label_document_plural: ×ž×¡×ž×›×™× - label_document_added: מוסמך × ×•×¡×£ + label_document_added: מסמך × ×•×¡×£ label_role: תפקיד label_role_plural: ×ª×¤×§×™×“×™× label_role_new: תפקיד חדש @@ -464,7 +469,7 @@ label_enumeration_new: ערך חדש label_information: מידע label_information_plural: מידע - label_please_login: התחבר בבקשה + label_please_login: × × ×”×ª×—×‘×¨ label_register: הרשמה label_login_with_open_id_option: ×ו התחבר ב×מצעות OpenID label_password_lost: ×בדה הסיסמה? @@ -479,7 +484,7 @@ label_help: עזרה label_reported_issues: × ×•×©××™× ×©×“×•×•×—×• label_assigned_to_me_issues: × ×•×©××™× ×©×”×•×¦×‘×• לי - label_last_login: חיבור ×חרון + label_last_login: התחברות ××—×¨×•× ×” label_registered_on: × ×¨×©× ×‘×ª×ריך label_activity: פעילות label_overall_activity: פעילות כוללת @@ -487,10 +492,10 @@ label_new: חדש label_logged_as: מחובר ×› label_environment: סביבה - label_authentication: ×ישור - label_auth_source: מצב ×ישור - label_auth_source_new: מצב ×ישור חדש - label_auth_source_plural: מצבי ×ישור + label_authentication: הזדהות + label_auth_source: מקור הזדהות + label_auth_source_new: מקור הזדהות חדש + label_auth_source_plural: מקורות הזדהות label_subproject_plural: ×ª×ªÖ¾×¤×¨×•×™×§×˜×™× label_subproject_new: תת־פרויקט חדש label_and_its_subprojects: "{{value}} וכל ×ª×ª×™Ö¾×”×¤×¨×•×™×§×˜×™× ×©×œ×•" @@ -521,7 +526,7 @@ label_news_plural: חדשות label_news_latest: חדשות ××—×¨×•× ×•×ª label_news_view_all: צפה בכל החדשות - label_news_added: חדשות הוספו + label_news_added: חדשות × ×•×¡×¤×• label_settings: הגדרות label_overview: מבט רחב label_version: גירסה @@ -575,7 +580,7 @@ one: הערה ×חת other: "{{count}} הערות" label_comment_add: הוסף תגובה - label_comment_added: תגובה הוספה + label_comment_added: תגובה × ×•×¡×¤×” label_comment_delete: מחק תגובות label_query: ש×ילתה ×ישית label_query_plural: ש×ילתות ×ישיות @@ -593,7 +598,7 @@ label_all_time: תמיד label_yesterday: ×תמול label_this_week: השבוע - label_last_week: שבוע שעבר + label_last_week: השבוע שעבר label_last_n_days: "ב־{{count}} ×™×ž×™× ××—×¨×•× ×™×" label_this_month: החודש label_last_month: חודש שעבר @@ -612,19 +617,19 @@ label_modification_plural: "{{count}} ×©×™× ×•×™×™×" label_branch: ×¢× ×£ label_tag: סימון - label_revision: גירסה - label_revision_plural: גירס×ות - label_revision_id: גירסה {{value}} - label_associated_revisions: גירס×ות קשורות + label_revision: מהדורה + label_revision_plural: מהדורות + label_revision_id: מהדורה {{value}} + label_associated_revisions: מהדורות קשורות label_added: × ×•×¡×£ label_modified: ×©×•× ×” label_copied: הועתק label_renamed: ×”×©× ×©×•× ×” label_deleted: × ×ž×—×§ - label_latest_revision: גירסה ××—×¨×•× ×” - label_latest_revision_plural: גירס×ות ××—×¨×•× ×•×ª - label_view_revisions: צפה בגירס×ות - label_view_all_revisions: צפה בכל הגירס×ות + label_latest_revision: מהדורה ××—×¨×•× ×” + label_latest_revision_plural: מהדורות ××—×¨×•× ×•×ª + label_view_revisions: צפה במהדורות + label_view_all_revisions: צפה בכל המהדורות label_max_size: גודל מקסימ×לי label_sort_highest: ×”×–×– לר×שית label_sort_higher: ×”×–×– למעלה @@ -638,10 +643,10 @@ label_result_plural: תוצ×ות label_all_words: כל ×”×ž×™×œ×™× label_wiki: Wiki - label_wiki_edit: ערוך Wiki - label_wiki_edit_plural: עריכות Wiki + label_wiki_edit: ערוך wiki + label_wiki_edit_plural: עריכות wiki label_wiki_page: דף Wiki - label_wiki_page_plural: דפי Wiki + label_wiki_page_plural: דפי wiki label_index_by_title: סדר על פי כותרת label_index_by_date: סדר על פי ת×ריך label_current_version: גירסה × ×•×›×—×™×ª @@ -694,7 +699,7 @@ label_message_plural: הודעות label_message_last: הודעה ××—×¨×•× ×” label_message_new: הודעה חדשה - label_message_posted: הודעה הוספה + label_message_posted: הודעה × ×•×¡×¤×” label_reply_plural: השבות label_send_information: שלח מידע על חשבון למשתמש label_year: ×©× ×” @@ -703,18 +708,18 @@ label_date_from: מת×ריך label_date_to: עד label_language_based: מבוסס שפה - label_sort_by: "מין לפי {{value}}" + label_sort_by: "מיין לפי {{value}}" label_send_test_email: שלח דו×"ל בדיקה label_feeds_access_key: מפתח גישה ל־RSS label_missing_feeds_access_key: חסר מפתח גישה ל־RSS label_feeds_access_key_created_on: "מפתח ×”×–× ×ª RSS × ×•×¦×¨ ×œ×¤× ×™{{value}}" label_module_plural: ×ž×•×“×•×œ×™× - label_added_time_by: "× ×•×¡×£ על ידי {{author}} ×œ×¤× ×™ {{age}} " + label_added_time_by: '× ×•×¡×£ ×¢"×™ {{author}} ×œ×¤× ×™ {{age}}' label_updated_time_by: 'עודכן ×¢"×™ {{author}} ×œ×¤× ×™ {{age}}' label_updated_time: "עודכן ×œ×¤× ×™ {{value}} " label_jump_to_a_project: קפוץ לפרויקט... label_file_plural: ×§×‘×¦×™× - label_changeset_plural: ×וסף ×©×™× ×•×™× + label_changeset_plural: סדרות ×©×™× ×•×™×™× label_default_columns: עמודת ברירת מחדל label_no_change_option: (×ין ×©×™× ×•×™×) label_bulk_edit_selected_issues: ערוך ×ת ×”× ×•×©××™× ×”×ž×¡×•×ž× ×™× @@ -723,7 +728,9 @@ label_search_titles_only: חפש בכותרות בלבד label_user_mail_option_all: "לכל ×ירוע בכל ×”×¤×¨×•×™×§×˜×™× ×©×œ×™" label_user_mail_option_selected: "לכל ×ירוע ×‘×¤×¨×•×™×§×˜×™× ×©×‘×—×¨×ª×™ בלבד..." - label_user_mail_option_none: "רק ×œ× ×•×©××™× ×©×× ×™ צופה ×ו קשור ×ליה×" + label_user_mail_option_only_my_events: עבור ×“×‘×¨×™× ×©×× ×™ צופה ×ו מעורב ×‘×”× ×‘×œ×‘×“ + label_user_mail_option_only_assigned: עבור ×“×‘×¨×™× ×©×× ×™ ×חר××™ ×¢×œ×™×”× ×‘×œ×‘×“ + label_user_mail_option_only_owner: עבור ×“×‘×¨×™× ×©×× ×™ ×”×‘×¢×œ×™× ×©×œ×”× ×‘×œ×‘×“ label_user_mail_no_self_notified: "×× ×™ ×œ× ×¨×•×¦×” שיודיעו לי על ×©×™× ×•×™×™× ×©×× ×™ מבצע" label_registration_activation_by_email: הפעל חשבון ב×מצעות דו×"ל label_registration_manual_activation: הפעלת חשבון ×™×“× ×™×ª @@ -735,7 +742,7 @@ label_more: עוד label_scm: מערכת × ×™×”×•×œ תצורה label_plugins: ×ª×•×¡×¤×™× - label_ldap_authentication: ×ימות LDAP + label_ldap_authentication: הזדהות LDAP label_downloads_abbr: D/L label_optional_description: תי×ור רשות label_add_another_file: הוסף עוד קובץ @@ -752,8 +759,8 @@ label_ascending: בסדר עולה label_descending: בסדר יורד label_date_from_to: 'מת×ריך {{start}} ועד ת×ריך {{end}}' - label_wiki_content_added: הדף × ×•×¡×£ ל־wiki - label_wiki_content_updated: דף ×”Ö¾wiki עודכן + label_wiki_content_added: × ×•×¡×£ דף ל־wiki + label_wiki_content_updated: דף wiki עודכן label_group: קבוצה label_group_plural: קבוצות label_group_new: קבוצה חדשה @@ -785,6 +792,7 @@ button_create_and_continue: צור ופתח חדש button_test: בדוק button_edit: ערוך + button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}" button_add: הוסף button_change: ×©× ×” button_apply: החל @@ -800,8 +808,8 @@ button_cancel: בטל button_activate: הפעל button_sort: מיין - button_log_time: זמן לוג - button_rollback: חזור לגירסה זו + button_log_time: ×¨×™×©×•× ×–×ž× ×™× + button_rollback: חזור למהדורה זו button_watch: צפה button_unwatch: בטל צפיה button_reply: השב @@ -809,7 +817,7 @@ button_unarchive: ×”×•×¦× ×ž×”×רכיון button_reset: ×פס button_rename: ×©× ×” ×©× - button_change_password: ×©× ×” ×¡×™×¡×ž× + button_change_password: ×©× ×” סיסמה button_copy: העתק button_copy_and_follow: העתק ועקוב button_annotate: הוסף תי×ור מסגרת @@ -836,13 +844,14 @@ text_subprojects_destroy_warning: "תת־הפרויקט\×™×: {{value}} ימחקו ×’× ×›×Ÿ." text_workflow_edit: בחר תפקיד וסיווג כדי לערוך ×ת זרימת העבודה text_are_you_sure: ×”×× ×תה בטוח? + text_are_you_sure_with_children: ×”×× ×œ×ž×—×•×§ ×ת ×”× ×•×©× ×•×ת כל ×‘× ×™×•? text_journal_changed: "{{label}} ×”×©×ª× ×” מ{{old}} ל{{new}}" text_journal_set_to: "{{label}} × ×§×‘×¢ ל{{value}}" text_journal_deleted: "{{label}} × ×ž×—×§ ({{old}})" text_journal_added: "{{label}} {{value}} × ×•×¡×£" - text_tip_task_begin_day: מטלה המתחילה ×”×™×•× - text_tip_task_end_day: מטלה המסתיימת ×”×™×•× - text_tip_task_begin_end_day: מטלה המתחילה ומסתיימת ×”×™×•× + text_tip_issue_begin_day: מטלה המתחילה ×”×™×•× + text_tip_issue_end_day: מטלה המסתיימת ×”×™×•× + text_tip_issue_begin_end_day: מטלה המתחילה ומסתיימת ×”×™×•× text_project_identifier_info: '×ותיות ×œ×˜×™× ×™×•×ª (a-z), ×ž×¡×¤×¨×™× ×•×ž×§×¤×™×.<br />ברגע ×©× ×©×ž×¨, ×œ× × ×™×ª×Ÿ ×œ×©× ×•×ª ×ת המזהה.' text_caracters_maximum: "×ž×§×¡×™×ž×•× {{count}} תווי×." text_caracters_minimum: "חייב להיות לפחות ב×ורך של {{count}} תווי×." @@ -852,8 +861,8 @@ text_comma_separated: ×”×›× ×¡×ª ×¢×¨×›×™× ×ž×¨×•×‘×™× ×ž×•×ª×¨×ª (×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×). text_line_separated: × ×™×ª×Ÿ להזין מספר ×¢×¨×›×™× (שורה ×חת לכל ערך). text_issues_ref_in_commit_messages: קישור ×•×ª×™×§×•× × ×•×©××™× ×‘×”×•×“×¢×•×ª הפקדה - text_issue_added: "×”× ×•×©× {{id}} דווח (by {{author}})." - text_issue_updated: "×”× ×•×©× {{id}} עודכן (by {{author}})." + text_issue_added: "×”× ×•×©× {{id}} דווח (בידי {{author}})." + text_issue_updated: "×”× ×•×©× {{id}} עודכן (בידי {{author}})." text_wiki_destroy_confirmation: ×”×× ×תה בטוח ×©×‘×¨×¦×•× ×š למחוק ×ת ×”WIKI ×”×–×” ו×ת כל ×ª×•×›× ×•? text_issue_category_destroy_question: "כמה × ×•×©××™× ({{count}}) ×ž×•×¦×‘×™× ×œ×§×˜×’×•×¨×™×” הזו. מה ×‘×¨×¦×•× ×š לעשות?" text_issue_category_destroy_assignments: הסר הצבת קטגוריה @@ -875,7 +884,7 @@ text_user_wrote: "{{value}} כתב:" text_enumeration_destroy_question: "{{count}} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”." text_enumeration_category_reassign_to: 'הצב מחדש לערך ×”×–×”:' - text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ config/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.' + text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/<instance>/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.' text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי." text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.' text_custom_field_possible_values_info: שורה ×חת לכל ערך @@ -915,11 +924,11 @@ enumeration_doc_categories: קטגוריות ×ž×¡×ž×›×™× enumeration_activities: פעילויות (מעקב ×חר ×–×ž× ×™×) enumeration_system_activity: פעילות מערכת - field_time_entries: Log time - project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/hr.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/hr.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -184,10 +184,10 @@ mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisniÄki raÄun Äeka vaÅ¡e odobrenje:" mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana" mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 pogreÅ¡ka gui_validation_error_plural: "{{count}} pogreÅ¡aka" @@ -253,7 +253,6 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-poÅ¡te field_onthefly: "Izrada korisnika \"u hodu\"" - field_start_date: Pocetak field_done_ratio: % UÄinjeno field_auth_source: Vrsta prijavljivanja field_hide_mail: Sakrij moju adresu e-poÅ¡te @@ -701,7 +700,6 @@ label_search_titles_only: Pretraživanje samo naslova label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj samo za izabrane projekte..." - label_user_mail_option_none: "Samo za stvari koje pratim ili u kojima sudjelujem" label_user_mail_no_self_notified: "Ne želim primati obavijesti o promjenama koje sam napravim" label_registration_activation_by_email: aktivacija putem e-poÅ¡te label_registration_manual_activation: ruÄna aktivacija @@ -815,9 +813,9 @@ text_journal_set_to: "{{label}} postavi na {{value}}" text_journal_deleted: "{{label}} izbrisano ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: Zadaci koji poÄinju ovog dana - text_tip_task_end_day: zadaci koji se zavrÅ¡avaju ovog dana - text_tip_task_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana + text_tip_issue_begin_day: Zadaci koji poÄinju ovog dana + text_tip_issue_end_day: zadaci koji se zavrÅ¡avaju ovog dana + text_tip_issue_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Jednom snimljen identifikator se ne može mijenjati!' text_caracters_maximum: "NajviÅ¡e {{count}} znakova." text_caracters_minimum: "Mora biti dugaÄko najmanje {{count}} znakova." @@ -920,8 +918,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/hu.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/hu.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -260,7 +260,6 @@ field_attr_lastname: Vezetéknév field_attr_mail: E-mail field_onthefly: On-the-fly felhasználó létrehozás - field_start_date: Kezdés dátuma field_done_ratio: Elkészült (%) field_auth_source: AzonosÃtási mód field_hide_mail: Rejtse el az e-mail cÃmem @@ -612,7 +611,6 @@ label_search_titles_only: Keresés csak a cÃmekben label_user_mail_option_all: "Minden eseményrÅ‘l minden saját projektemben" label_user_mail_option_selected: "Minden eseményrÅ‘l a kiválasztott projektekben..." - label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek" label_user_mail_no_self_notified: "Nem kérek értesÃtést az általam végzett módosÃtásokról" label_registration_activation_by_email: Fiók aktiválása e-mailben label_registration_manual_activation: Manuális fiók aktiválás @@ -682,9 +680,9 @@ text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek." text_workflow_edit: Válasszon egy szerepkört, és egy feladat tÃpust a workflow szerkesztéséhez text_are_you_sure: Biztos benne ? - text_tip_task_begin_day: a feladat ezen a napon kezdÅ‘dik - text_tip_task_end_day: a feladat ezen a napon ér véget - text_tip_task_begin_end_day: a feladat ezen a napon kezdÅ‘dik és ér véget + text_tip_issue_begin_day: a feladat ezen a napon kezdÅ‘dik + text_tip_issue_end_day: a feladat ezen a napon ér véget + text_tip_issue_begin_end_day: a feladat ezen a napon kezdÅ‘dik és ér véget text_project_identifier_info: 'Kis betűk (a-z), számok és kötÅ‘jel megengedett.<br />Mentés után az azonosÃtót megváltoztatni nem lehet.' text_caracters_maximum: "maximum {{count}} karakter." text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie." @@ -839,12 +837,12 @@ text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése setting_password_min_length: Minimum jelszó hosszúság field_group_by: Szerint csoportosÃtva - mail_subject_wiki_content_updated: "'{{page}}' wiki oldal frissÃtve" + mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissÃtve" label_wiki_content_added: Wiki oldal hozzáadva - mail_subject_wiki_content_added: "Új wiki oldal: '{{page}}'" - mail_body_wiki_content_added: A '{{page}}' wiki oldalt {{author}} hozta létre. + mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'" + mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre. label_wiki_content_updated: Wiki oldal frissÃtve - mail_body_wiki_content_updated: A '{{page}}' wiki oldalt {{author}} frissÃtette. + mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissÃtette. permission_add_project: Projekt létrehozása setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak label_view_all_revisions: Minden revÃzió megtekintése @@ -936,8 +934,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/id.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/id.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -181,10 +181,10 @@ mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})" mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:" - mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan" - mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' halaman wiki sudah diperbarui" - mail_body_wiki_content_updated: "The '{{page}}' halaman wiki sudah diperbarui oleh {{author}}." + mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan" + mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui" + mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}." gui_validation_error: 1 kesalahan gui_validation_error_plural: "{{count}} kesalahan" @@ -251,7 +251,6 @@ field_attr_lastname: Atribut nama belakang field_attr_mail: Atribut email field_onthefly: Pembuatan pengguna seketika - field_start_date: Mulai field_done_ratio: % Selesai field_auth_source: Mode otentikasi field_hide_mail: Sembunyikan email saya @@ -688,7 +687,6 @@ label_search_titles_only: Cari judul saja label_user_mail_option_all: "Untuk semua kejadian pada semua proyek saya" label_user_mail_option_selected: "Hanya untuk semua kejadian pada proyek yang saya pilih ..." - label_user_mail_option_none: "Hanya pada hal-hal yang saya pantau atau saya terlibat di dalamnya" label_user_mail_no_self_notified: "Saya tak ingin diberitahu untuk perubahan yang saya buat sendiri" label_user_mail_assigned_only_mail_notification: "Kirim email hanya bila saya ditugaskan untuk masalah terkait" label_user_mail_block_mail_notification: "Saya tidak ingin menerima email. Terima kasih." @@ -796,9 +794,9 @@ text_journal_set_to: "{{label}} di set ke {{value}}" text_journal_deleted: "{{label}} dihapus ({{old}})" text_journal_added: "{{label}} {{value}} ditambahkan" - text_tip_task_begin_day: tugas dimulai hari itu - text_tip_task_end_day: tugas berakhir hari itu - text_tip_task_begin_end_day: tugas dimulai dan berakhir hari itu + text_tip_issue_begin_day: tugas dimulai hari itu + text_tip_issue_end_day: tugas berakhir hari itu + text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.<br />Sekali disimpan, pengenal tidak bisa diubah.' text_caracters_maximum: "maximum {{count}} karakter." text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter." @@ -921,8 +919,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/it.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/it.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -232,7 +232,6 @@ field_attr_lastname: Attributo cognome field_attr_mail: Attributo email field_onthefly: Creazione utente "al volo" - field_start_date: Inizio field_done_ratio: % completato field_auth_source: Modalità di autenticazione field_hide_mail: Nascondi il mio indirizzo email @@ -572,9 +571,9 @@ text_project_destroy_confirmation: Sei sicuro di voler eliminare il progetto e tutti i dati ad esso collegati? text_workflow_edit: Seleziona un ruolo ed un tracker per modificare il workflow text_are_you_sure: Sei sicuro ? - text_tip_task_begin_day: attività che iniziano in questa giornata - text_tip_task_end_day: attività che terminano in questa giornata - text_tip_task_begin_end_day: attività che iniziano e terminano in questa giornata + text_tip_issue_begin_day: attività che iniziano in questa giornata + text_tip_issue_end_day: attività che terminano in questa giornata + text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.<br />Una volta salvato, l'identificativo non può essere modificato." text_caracters_maximum: "massimo {{count}} caratteri." text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri." @@ -632,7 +631,6 @@ text_user_mail_option: "Per i progetti non selezionati, riceverai solo le notifiche riguardanti le cose che osservi o nelle quali sei coinvolto (per esempio segnalazioni che hai creato o che ti sono state assegnate)." label_user_mail_option_selected: "Solo per gli eventi relativi ai progetti selezionati..." label_user_mail_option_all: "Per ogni evento relativo ad uno dei miei progetti" - label_user_mail_option_none: "Solo per argomenti che osservo o che mi riguardano" setting_emails_footer: Piè di pagina email label_float: Decimale button_copy: Copia @@ -820,12 +818,12 @@ text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza setting_password_min_length: Lunghezza minima password field_group_by: Raggruppa risultati per - mail_subject_wiki_content_updated: "La pagina wiki '{{page}}' è stata aggiornata" + mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata" label_wiki_content_added: Aggiunta pagina al wiki - mail_subject_wiki_content_added: "La pagina '{{page}}' è stata aggiunta al wiki" - mail_body_wiki_content_added: La pagina '{{page}}' è stata aggiunta al wiki da {{author}}. + mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki" + mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}. label_wiki_content_updated: Aggiornata pagina wiki - mail_body_wiki_content_updated: La pagina '{{page}}' wiki è stata aggiornata da{{author}}. + mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}. permission_add_project: Crea progetto setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto label_view_all_revisions: Mostra tutte le revisioni @@ -917,8 +915,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ja.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/ja.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -175,6 +175,7 @@ notice_file_not_found: アクセスã—よã†ã¨ã—ãŸãƒšãƒ¼ã‚¸ã¯å˜åœ¨ã—ãªã„ã‹å‰Šé™¤ã•れã¦ã„ã¾ã™ã€‚ notice_locking_conflict: 別ã®ãƒ¦ãƒ¼ã‚¶ãŒãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™ã€‚ notice_not_authorized: ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯èªè¨¼ãŒå¿…è¦ã§ã™ã€‚ + notice_not_authorized_archived_project: プãƒã‚¸ã‚§ã‚¯ãƒˆã¯æ›¸åº«ã«ä¿å˜ã•れã¦ã„ã¾ã™ã€‚ notice_email_sent: "{{value}} å®›ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚" notice_email_error: "メールé€ä¿¡ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠({{value}})" notice_feeds_access_key_reseted: RSSアクセスã‚ãƒ¼ã‚’åˆæœŸåŒ–ã—ã¾ã—ãŸã€‚ @@ -218,10 +219,10 @@ mail_body_account_activation_request: "æ–°ã—ã„ユーザ {{value}} ãŒç™»éŒ²ã•れã¾ã—ãŸã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã®æ‰¿èªå¾…ã¡ã§ã™ï¼š" mail_subject_reminder: "{{count}}ä»¶ã®ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™" mail_body_reminder: "{{count}}ä»¶ã®æ‹…当ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™:" - mail_subject_wiki_content_added: "Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸ" - mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" - mail_subject_wiki_content_updated: "Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸ" - mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚" + mail_subject_wiki_content_added: "Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸ" + mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" + mail_subject_wiki_content_updated: "Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸ" + mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚" gui_validation_error: 1ä»¶ã®ã‚¨ãƒ©ãƒ¼ gui_validation_error_plural: "{{count}}ä»¶ã®ã‚¨ãƒ©ãƒ¼" @@ -287,7 +288,6 @@ field_attr_lastname: è‹—å—属性 field_attr_mail: メール属性 field_onthefly: ã‚ã‚ã›ã¦ãƒ¦ãƒ¼ã‚¶ã‚’ä½œæˆ - field_start_date: é–‹å§‹æ—¥ field_done_ratio: é€²æ— % field_auth_source: èªè¨¼æ–¹å¼ field_hide_mail: ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’éš ã™ @@ -376,6 +376,7 @@ setting_issue_done_ratio_issue_status: ãƒã‚±ãƒƒãƒˆã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’使用ã™ã‚‹ setting_start_of_week: 週ã®é–‹å§‹æ›œæ—¥ setting_rest_api_enabled: RESTã«ã‚ˆã‚‹Webサービスを有効ã«ã™ã‚‹ + setting_default_notification_option: デフォルトã®ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚ªãƒ—ション permission_add_project: プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¿½åŠ permission_add_subprojects: サブプãƒã‚¸ã‚§ã‚¯ãƒˆã®è¿½åŠ @@ -701,7 +702,7 @@ label_relation_delete: 関連ã®å‰Šé™¤ label_relates_to: 関係ã—ã¦ã„ã‚‹ label_duplicates: é‡è¤‡ã—ã¦ã„ã‚‹ - label_duplicated_by: é‡è¤‡ã—ã¦ã„ã‚‹ + label_duplicated_by: é‡è¤‡ã•れã¦ã„ã‚‹ label_blocks: ブãƒãƒƒã‚¯ã—ã¦ã„ã‚‹ label_blocked_by: ブãƒãƒƒã‚¯ã•れã¦ã„ã‚‹ label_precedes: 先行ã™ã‚‹ @@ -752,7 +753,10 @@ label_search_titles_only: タイトルã®ã¿ label_user_mail_option_all: "å‚åŠ ã—ã¦ã„るプãƒã‚¸ã‚§ã‚¯ãƒˆã®å…¨ã¦ã®é€šçŸ¥" label_user_mail_option_selected: "é¸æŠžã—ãŸãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®å…¨ã¦ã®é€šçŸ¥..." - label_user_mail_option_none: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_none: "通知ã—ãªã„" + label_user_mail_option_only_my_events: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_only_assigned: "è‡ªåˆ†ãŒæ‹…当ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_only_owner: "自分ãŒä½œæˆã—ãŸäº‹æŸ„ã®ã¿" label_user_mail_no_self_notified: 自分自身ã«ã‚ˆã‚‹å¤‰æ›´ã®é€šçŸ¥ã¯ä¸è¦ label_registration_activation_by_email: メールã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化 label_registration_manual_activation: 手動ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化 @@ -870,9 +874,9 @@ text_journal_set_to: "{{label}} ã‚’ {{value}} ã«ã‚»ãƒƒãƒˆ" text_journal_deleted: "{{label}} を削除 ({{old}})" text_journal_added: "{{label}} {{value}} ã‚’è¿½åŠ " - text_tip_task_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯ - text_tip_task_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ - text_tip_task_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ text_project_identifier_info: 'è‹±å°æ–‡å—(a-z)ã¨æ•°å—ã¨ãƒ€ãƒƒã‚·ãƒ¥(-)ãŒä½¿ãˆã¾ã™ã€‚<br />一度ä¿å˜ã™ã‚‹ã¨ã€è˜åˆ¥åã¯å¤‰æ›´ã§ãã¾ã›ã‚“。' text_caracters_maximum: "最大{{count}}æ–‡å—ã§ã™ã€‚" text_caracters_minimum: "最低{{count}}æ–‡å—ã®é•·ã•ãŒå¿…è¦ã§ã™" @@ -943,3 +947,8 @@ enumeration_doc_categories: 文書カテゴリ enumeration_activities: 作æ¥åˆ†é¡ž (時間トラッã‚ング) enumeration_system_activity: システム作æ¥åˆ†é¡ž + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ko.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/ko.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -231,10 +231,10 @@ mail_body_account_activation_request: "새 사용ìž({{value}})ê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤. 관리ìžë‹˜ì˜ 승ì¸ì„ ê¸°ë‹¤ë¦¬ê³ ìžˆìŠµë‹ˆë‹¤.:" mail_body_reminder: "ë‹¹ì‹ ì´ ë§¡ê³ ìžˆëŠ” ì¼ê° {{count}}ê°œì˜ ì™„ë£Œ ê¸°í•œì´ {{days}}ì¼ í›„ 입니다." mail_subject_reminder: "ë‚´ì¼ì´ ë§Œê¸°ì¸ ì¼ê° {{count}}ê°œ ({{days}})" - mail_subject_wiki_content_added: "위키페ì´ì§€ '{{page}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤." - mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{page}}'ì´(ê°€) ìˆ˜ì •ë˜ì—ˆìŠµë‹ˆë‹¤." - mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 추가하였습니다." - mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤." + mail_subject_wiki_content_added: "위키페ì´ì§€ '{{id}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤." + mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{id}}'ì´(ê°€) ìˆ˜ì •ë˜ì—ˆìŠµë‹ˆë‹¤." + mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 추가하였습니다." + mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤." gui_validation_error: ì—러 gui_validation_error_plural: "{{count}}ê°œ ì—러" @@ -299,7 +299,6 @@ field_attr_lastname: 성 ì†ì„± field_attr_mail: ë©”ì¼ ì†ì„± field_onthefly: ë™ì ì‚¬ìš©ìž ìƒì„± - field_start_date: 시작시간 field_done_ratio: ì§„ì²™ë„ field_auth_source: ì¸ì¦ ê³µê¸‰ìž field_hide_mail: ë©”ì¼ ì£¼ì†Œ 숨기기 @@ -727,7 +726,6 @@ label_search_titles_only: ì œëª©ì—서만 찾기 label_user_mail_option_all: "ë‚´ê°€ ì†í•œ 프로ì 트로들부터 ëª¨ë“ ë©”ì¼ ë°›ê¸°" label_user_mail_option_selected: "ì„ íƒí•œ 프로ì 트들로부터 ëª¨ë“ ë©”ì¼ ë°›ê¸°.." - label_user_mail_option_none: "ë‚´ê°€ ì†í•˜ê±°ë‚˜ ê°ì‹œ ì¤‘ì¸ ì‚¬í•ì— ëŒ€í•´ì„œë§Œ" label_user_mail_no_self_notified: "ë‚´ê°€ ë§Œë“ ë³€ê²½ì‚¬í•ë“¤ì— ëŒ€í•´ì„œëŠ” 알림메ì¼ì„ 받지 않습니다." label_registration_activation_by_email: ë©”ì¼ë¡œ ê³„ì •ì„ í™œì„±í™”í•˜ê¸° label_registration_automatic_activation: ìžë™ ê³„ì • 활성화 @@ -810,9 +808,9 @@ text_subprojects_destroy_warning: "하위 프로ì 트({{value}})ì´(ê°€) ìžë™ìœ¼ë¡œ 지워질 것입니다." text_workflow_edit: 업무í름 ìˆ˜ì •í•˜ë ¤ë©´ ì—í• ê³¼ ì¼ê°ìœ í˜•ì„ ì„ íƒí•˜ì„¸ìš”. text_are_you_sure: ê³„ì† ì§„í–‰ í•˜ì‹œê² ìŠµë‹ˆê¹Œ? - text_tip_task_begin_day: 오늘 시작하는 업무(task) - text_tip_task_end_day: 오늘 종료하는 업무(task) - text_tip_task_begin_end_day: 오늘 ì‹œìž‘í•˜ê³ ì¢…ë£Œí•˜ëŠ” 업무(task) + text_tip_issue_begin_day: 오늘 시작하는 업무(task) + text_tip_issue_end_day: 오늘 종료하는 업무(task) + text_tip_issue_begin_end_day: 오늘 ì‹œìž‘í•˜ê³ ì¢…ë£Œí•˜ëŠ” 업무(task) text_project_identifier_info: 'ì˜ë¬¸ 소문ìž(a-z) ë° ìˆ«ìž, 대쉬(-) 가능.<br />ì €ìž¥ëœí›„ì—는 ì‹ë³„ìž ë³€ê²½ 불가능.' text_caracters_maximum: "최대 {{count}} ê¸€ìž ê°€ëŠ¥" text_caracters_minimum: "최소한 {{count}} ê¸€ìž ì´ìƒì´ì–´ì•¼ 합니다." @@ -969,8 +967,19 @@ field_time_entries: 기ë¡ëœ 시간 project_module_gantt: Gantt ì± íŠ¸ project_module_calendar: ë‹¬ë ¥ - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/lt.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/lt.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -241,10 +241,10 @@ mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jÅ«sų patvirtinimo:" mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų" mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):" - mail_subject_wiki_content_added: "'{{page}}' pridÄ—tas wiki puslapis" - mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridÄ—jo {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' atnaujintas wiki puslapis" - mail_body_wiki_content_updated: "The '{{page}}' wiki puslapį atnaujino {{author}}." + mail_subject_wiki_content_added: "'{{id}}' pridÄ—tas wiki puslapis" + mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridÄ—jo {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis" + mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}." gui_validation_error: 1 klaida gui_validation_error_plural: "{{count}} klaidų(os)" @@ -310,7 +310,6 @@ field_attr_lastname: PavardÄ—s priskiria field_attr_mail: Elektroninio paÅ¡to požymis field_onthefly: Automatinis vartotojų registravimas - field_start_date: PradÄ—ti field_done_ratio: % atlikta field_auth_source: AutentiÅ¡kumo nustatymo bÅ«das field_hide_mail: PaslÄ—pkite mano elektroninio paÅ¡to adresÄ… @@ -742,7 +741,6 @@ label_search_titles_only: IeÅ¡koti pavadinimų tiktai label_user_mail_option_all: "Bet kokiam įvykiui visuose mano projektuose" label_user_mail_option_selected: "Bet kokiam įvykiui tiktai pasirinktuose projektuose ..." - label_user_mail_option_none: "Tiktai dalykai kuriuos aÅ¡ stebiu ar aÅ¡ esu įtrauktas į" label_user_mail_no_self_notified: "Nenoriu bÅ«ti informuotas apie pakeitimus, kuriuos pats atlieku" label_registration_activation_by_email: "paskyros aktyvacija per e-paÅ¡tÄ…" label_registration_manual_activation: "rankinÄ— paskyros aktyvacija" @@ -852,9 +850,9 @@ text_journal_set_to: "{{label}} pakeista į {{value}}" text_journal_deleted: "{{label}} iÅ¡trintas ({{old}})" text_journal_added: "{{label}} {{value}} pridÄ—tas" - text_tip_task_begin_day: užduotis, prasidedanti Å¡iÄ… dienÄ… - text_tip_task_end_day: užduotis, pasibaigianti Å¡iÄ… dienÄ… - text_tip_task_begin_end_day: užduotis, prasidedanti ir pasibaigianti Å¡iÄ… dienÄ… + text_tip_issue_begin_day: užduotis, prasidedanti Å¡iÄ… dienÄ… + text_tip_issue_end_day: užduotis, pasibaigianti Å¡iÄ… dienÄ… + text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti Å¡iÄ… dienÄ… text_project_identifier_info: 'Mažosios raidÄ—s (a-z), skaiÄiai ir brÅ«kÅ¡niai galimi.<br/>IÅ¡saugojus, identifikuotojas negali bÅ«ti keiÄiamas.' text_caracters_maximum: "{{count}} simbolių maksimumas." text_caracters_minimum: "Turi bÅ«ti mažiausiai {{count}} simbolių ilgio." @@ -977,8 +975,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/lv.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/lv.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -180,10 +180,10 @@ mail_body_account_activation_request: "Jauns lietotÄjs ({{value}}) ir reÄ£istrÄ“ts. LietotÄja konts gaida JÅ«su apstiprinÄjumu:" mail_subject_reminder: "{{count}} uzdevums(i) sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs" mail_body_reminder: "{{count}} uzdevums(i), kurÅ¡(i) ir nozÄ«mÄ“ts(i) Jums, sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs:" - mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota" - mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' Wiki lapa atjaunota" - mail_body_wiki_content_updated: "The '{{page}}' Wiki lapu atjaunojis {{author}}." + mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota" + mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota" + mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}." gui_validation_error: 1 kļūda gui_validation_error_plural: "{{count}} kļūdas" @@ -248,7 +248,6 @@ field_attr_lastname: UzvÄrda atribÅ«ts field_attr_mail: "E-pasta atribÅ«ts" field_onthefly: "LietotÄja izveidoÅ¡ana on-the-fly" - field_start_date: SÄkuma datums field_done_ratio: % padarÄ«ti field_auth_source: PilnvaroÅ¡anas režīms field_hide_mail: "PaslÄ“pt manu e-pasta adresi" @@ -702,7 +701,6 @@ label_search_titles_only: MeklÄ“t tikai nosaukumos label_user_mail_option_all: "Par visiem notikumiem visos manos projektos" label_user_mail_option_selected: "Par visiem notikumiem tikai izvÄ“lÄ“tajos projektos..." - label_user_mail_option_none: "Tikai par lietÄm, kuras es vÄ“roju un kurÄs esmu iesaistÄ«ts" label_user_mail_no_self_notified: "Neziņot man par izmaiņÄm, kuras veicu es pats" label_registration_activation_by_email: "konta aktivizÄcija caur e-pastu" label_registration_manual_activation: manuÄlÄ konta aktivizÄcija @@ -816,9 +814,9 @@ text_journal_set_to: "{{label}} iestatÄ«ts uz {{value}}" text_journal_deleted: "{{label}} dzÄ“sts ({{old}})" text_journal_added: "{{label}} {{value}} pievienots" - text_tip_task_begin_day: uzdevums sÄkas Å¡odien - text_tip_task_end_day: uzdevums beidzas Å¡odien - text_tip_task_begin_end_day: uzdevums sÄkas un beidzas Å¡odien + text_tip_issue_begin_day: uzdevums sÄkas Å¡odien + text_tip_issue_end_day: uzdevums beidzas Å¡odien + text_tip_issue_begin_end_day: uzdevums sÄkas un beidzas Å¡odien text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzÄ«mes ir atļauti.<br />Kad saglabÄts, identifikators nevar tikt mainÄ«ts.' text_caracters_maximum: "{{count}} simboli maksimÄli." text_caracters_minimum: "JÄbÅ«t vismaz {{count}} simbolu garumÄ." @@ -908,8 +906,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/.svn/text-base/mk.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,929 @@ +mk: + # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) + direction: ltr + date: + formats: + # Use the strftime parameters for formats. + # When no format has been given, it uses default. + # You can provide other formats here if you like! + default: "%d/%m/%Y" + short: "%d %b" + long: "%d %B, %Y" + + day_names: [недела, понеделник, вторник, Ñреда, четврток, петок, Ñабота] + abbr_day_names: [нед, пон, вто, Ñре, чет, пет, Ñаб] + + # Don't forget the nil at the beginning; there's no such thing as a 0th month + month_names: [~, јануари, февруари, март, април, мај, јуни, јули, авгуÑÑ‚, Ñептември, октомври, ноември, декември] + abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, Ñеп, окт, ное, дек] + # Used in date_select and datime_select. + order: [ :day, :month, :year ] + + time: + formats: + default: "%d/%m/%Y %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%d %B, %Y %H:%M" + am: "предпладне" + pm: "попладне" + + datetime: + distance_in_words: + half_a_minute: "пола минута" + less_than_x_seconds: + one: "помалку од 1 Ñекунда" + other: "помалку од {{count}} Ñекунди" + x_seconds: + one: "1 Ñекунда" + other: "{{count}} Ñекунди" + less_than_x_minutes: + one: "помалку од 1 минута" + other: "помалку од {{count}} минути" + x_minutes: + one: "1 минута" + other: "{{count}} минути" + about_x_hours: + one: "околу 1 чаÑ" + other: "околу {{count}} чаÑа" + x_days: + one: "1 ден" + other: "{{count}} дена" + about_x_months: + one: "околу 1 меÑец" + other: "околу {{count}} меÑеци" + x_months: + one: "1 меÑец" + other: "{{count}} меÑеци" + about_x_years: + one: "околу 1 година" + other: "околу {{count}} години" + over_x_years: + one: "преку 1 година" + other: "преку {{count}} години" + almost_x_years: + one: "Ñкоро 1 година" + other: "Ñкоро {{count}} години" + + number: + # Default format for numbers + format: + separator: "." + delimiter: "" + precision: 3 + human: + format: + delimiter: "" + precision: 1 + storage_units: + format: "%n %u" + units: + byte: + one: "Byte" + other: "Bytes" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + + +# Used in array.to_sentence. + support: + array: + sentence_connector: "и" + skip_last_comma: false + + activerecord: + errors: + messages: + inclusion: "не е вклучено во лиÑтата" + exclusion: "е резервирано" + invalid: "е невалидно" + confirmation: "не Ñе Ñовпаѓа Ñо потврдата" + accepted: "мора да е прифатено" + empty: "неможе да е празно" + blank: "неможе да е празно" + too_long: "е предолго (макÑ. {{count}} знаци)" + too_short: "е прекратко (мин. {{count}} знаци)" + wrong_length: "е погрешна должина (треба да е {{count}} знаци)" + taken: "е веќе зафатено" + not_a_number: "не е број" + not_a_date: "не е валидна дата" + greater_than: "мора да е поголемо од {{count}}" + greater_than_or_equal_to: "мора да е поголемо или еднакво на {{count}}" + equal_to: "мора да е еднакво на {{count}}" + less_than: "мора да е помало од {{count}}" + less_than_or_equal_to: "мора да е помало или еднакво на {{count}}" + odd: "мора да е непарно" + even: "мора да е парно" + greater_than_start_date: "мора да е поголема од почетната дата" + not_same_project: "не припаѓа на иÑтиот проект" + circular_dependency: "Оваа врÑка ќе креира кружна завиÑноÑÑ‚" + cant_link_an_issue_with_a_descendant: "Задача неможе да Ñе поврзе Ñо една од нејзините подзадачи" + + actionview_instancetag_blank_option: Изберете + + general_text_No: 'Ðе' + general_text_Yes: 'Да' + general_text_no: 'не' + general_text_yes: 'да' + general_lang_name: 'Macedonian (МакедонÑки)' + general_csv_separator: ',' + general_csv_decimal_separator: '.' + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 + general_first_day_of_week: '1' + + notice_account_updated: Профилот е уÑпешно ажуриран. + notice_account_invalid_creditentials: Ðеточен кориÑник или лозинка + notice_account_password_updated: Лозинката е уÑпешно ажурирана. + notice_account_wrong_password: Погрешна лозинка + notice_account_register_done: Профилот е уÑпешно креиран. За активација, клкнете на врÑката што ви е пратена по е-пошта. + notice_account_unknown_email: Ðепознат кориÑник. + notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password. + notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you. + notice_account_activated: Your account has been activated. You can now log in. + notice_successful_create: УÑпешно креирање. + notice_successful_update: УÑпешно ажурирање. + notice_successful_delete: УÑпешно бришење. + notice_successful_connection: УÑпешна конекција. + notice_file_not_found: The page you were trying to access doesn't exist or has been removed. + notice_locking_conflict: Data has been updated by another user. + notice_not_authorized: You are not authorized to access this page. + notice_email_sent: "Е-порака е пратена на {{value}}" + notice_email_error: "Се Ñлучи грешка при праќање на е-пораката ({{value}})" + notice_feeds_access_key_reseted: Вашиот RSS клуч за приÑтап е reset. + notice_api_access_key_reseted: Вашиот API клуч за приÑтап е reset. + notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." + notice_account_pending: "Your account was created and is now pending administrator approval." + notice_default_data_loaded: Default configuration successfully loaded. + notice_unable_delete_version: Unable to delete version. + notice_unable_delete_time_entry: Unable to delete time log entry. + notice_issue_done_ratios_updated: Issue done ratios updated. + + error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + error_scm_not_found: "The entry or revision was not found in the repository." + error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}" + error_scm_annotate: "The entry does not exist or can not be annotated." + error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' + error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' + error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").' + error_can_not_delete_custom_field: Unable to delete custom field + error_can_not_delete_tracker: "This tracker contains issues and can't be deleted." + error_can_not_remove_role: "This role is in use and can not be deleted." + error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened' + error_can_not_archive_project: This project can not be archived + error_issue_done_ratios_not_updated: "Issue done ratios not updated." + error_workflow_copy_source: 'Please select a source tracker or role' + error_workflow_copy_target: 'Please select target tracker(s) and role(s)' + error_unable_delete_issue_status: 'Unable to delete issue status' + error_unable_to_connect: "Unable to connect ({{value}})" + warning_attachments_not_saved: "{{count}} file(s) could not be saved." + + mail_subject_lost_password: "Вашата {{value}} лозинка" + mail_body_lost_password: 'To change your password, click on the following link:' + mail_subject_register: "Your {{value}} account activation" + mail_body_register: 'To activate your account, click on the following link:' + mail_body_account_information_external: "You can use your {{value}} account to log in." + mail_body_account_information: Your account information + mail_subject_account_activation_request: "{{value}} account activation request" + mail_body_account_activation_request: "Ðов кориÑник ({{value}}) е региÑтриран. The account is pending your approval:" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" + mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." + + gui_validation_error: 1 грешка + gui_validation_error_plural: "{{count}} грешки" + + field_name: Име + field_description: ÐžÐ¿Ð¸Ñ + field_summary: Краток Ð¾Ð¿Ð¸Ñ + field_is_required: Задолжително + field_firstname: Име + field_lastname: Презиме + field_mail: Е-пошта + field_filename: Датотека + field_filesize: Големина + field_downloads: Превземања + field_author: Ðвтор + field_created_on: Креиран + field_updated_on: Ðжурирано + field_field_format: Формат + field_is_for_all: За Ñите проекти + field_possible_values: Можни вредноÑти + field_regexp: Regular expression + field_min_length: Минимална должина + field_max_length: МакÑимална должина + field_value: ВредноÑÑ‚ + field_category: Категорија + field_title: ÐаÑлов + field_project: Проект + field_issue: Задача + field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ + field_notes: Белешки + field_is_closed: Задачата е затворена + field_is_default: Default value + field_tracker: Tracker + field_subject: ÐаÑлов + field_due_date: Краен рок + field_assigned_to: Доделена на + field_priority: Приоритет + field_fixed_version: Target version + field_user: КориÑник + field_principal: Principal + field_role: Улога + field_homepage: Веб Ñтрана + field_is_public: Јавен + field_parent: Подпроект на + field_is_in_roadmap: Issues displayed in roadmap + field_login: КориÑник + field_mail_notification: ИзвеÑтувања по e-пошта + field_admin: ÐдминиÑтратор + field_last_login_on: ПоÑледна најава + field_language: Јазик + field_effective_date: Дата + field_password: Лозинка + field_new_password: Ðова лозинка + field_password_confirmation: Потврда + field_version: Верзија + field_type: Тип + field_host: ХоÑÑ‚ + field_port: Порт + field_account: Account + field_base_dn: Base DN + field_attr_login: Login attribute + field_attr_firstname: Firstname attribute + field_attr_lastname: Lastname attribute + field_attr_mail: Email attribute + field_onthefly: Моментално (On-the-fly) креирање на кориÑници + field_done_ratio: % Завршено + field_auth_source: Режим на автентикација + field_hide_mail: Криј ја мојата адреÑа на е-пошта + field_comments: Коментар + field_url: URL + field_start_page: Почетна Ñтрана + field_subproject: Подпроект + field_hours: ЧаÑови + field_activity: ÐктивноÑÑ‚ + field_spent_on: Дата + field_identifier: Идентификатор + field_is_filter: КориÑти како филтер + field_issue_to: Поврзана задача + field_delay: Доцнење + field_assignable: Ðа оваа улога може да Ñе доделуваат задачи + field_redirect_existing_links: ПренаÑочи ги поÑтоечките врÑки + field_estimated_hours: Проценето време + field_column_names: Колони + field_time_entries: Бележи време + field_time_zone: ВременÑка зона + field_searchable: Може да Ñе пребарува + field_default_value: Default value + field_comments_sorting: Прикажувај коментари + field_parent_title: Parent page + field_editable: Може да Ñе уредува + field_watcher: Watcher + field_identity_url: OpenID URL + field_content: Содржина + field_group_by: Групирај ги резултатите Ñпоред + field_sharing: Споделување + field_parent_issue: Parent task + + setting_app_title: ÐаÑлов на апликацијата + setting_app_subtitle: ПоднаÑлов на апликацијата + setting_welcome_text: ТекÑÑ‚ за добредојде + setting_default_language: Default јазик + setting_login_required: Задолжителна автентикација + setting_self_registration: Само-региÑтрација + setting_attachment_max_size: МакÑ. големина на прилог + setting_issues_export_limit: Issues export limit + setting_mail_from: Emission email address + setting_bcc_recipients: Blind carbon copy recipients (bcc) + setting_plain_text_mail: ТекÑтуални е-пораки (без HTML) + setting_host_name: Име на хоÑÑ‚ и патека + setting_text_formatting: Форматирање на текÑÑ‚ + setting_wiki_compression: КомпреÑија на иÑторијата на вики + setting_feeds_limit: Feed content limit + setting_default_projects_public: Ðовите проекти Ñе иницијално јавни + setting_autofetch_changesets: Autofetch commits + setting_sys_api_enabled: Enable WS for repository management + setting_commit_ref_keywords: Referencing keywords + setting_commit_fix_keywords: Fixing keywords + setting_autologin: ÐвтоматÑка најава + setting_date_format: Формат на дата + setting_time_format: Формат на време + setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти + setting_issue_list_default_columns: Default columns displayed on the issue list + setting_repositories_encodings: Repositories encodings + setting_commit_logs_encoding: Commit messages encoding + setting_emails_footer: Emails footer + setting_protocol: Протокол + setting_per_page_options: Objects per page options + setting_user_format: Приказ на кориÑниците + setting_activity_days_default: Денови прикажана во активноÑта на проектот + setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти + setting_enabled_scm: Овозможи SCM + setting_mail_handler_body_delimiters: "Truncate emails after one of these lines" + setting_mail_handler_api_enabled: Enable WS for incoming emails + setting_mail_handler_api_key: API клуч + setting_sequential_project_identifiers: Генерирај поÑледователни идентификатори на проекти + setting_gravatar_enabled: КориÑти Gravatar кориÑнички икони + setting_gravatar_default: Default Gravatar image + setting_diff_max_lines_displayed: Max number of diff lines displayed + setting_file_max_size_displayed: Max size of text files displayed inline + setting_repository_log_display_limit: Maximum number of revisions displayed on file log + setting_openid: Дозволи OpenID најава и региÑтрација + setting_password_min_length: Мин. должина на лозинка + setting_new_project_user_role_id: Улога доделена на неадминиÑтраторÑки кориÑник кој креира проект + setting_default_projects_modules: Default enabled modules for new projects + setting_issue_done_ratio: Calculate the issue done ratio with + setting_issue_done_ratio_issue_field: Use the issue field + 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: Креирај проекти + permission_add_subprojects: Креирај подпроекти + permission_edit_project: Уреди проект + permission_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: Прегледај задачи + permission_add_issues: Додавај задачи + permission_edit_issues: Уредувај задачи + permission_manage_issue_relations: Manage issue relations + permission_add_issue_notes: Додавај белешки + permission_edit_issue_notes: Уредувај белешки + permission_edit_own_issue_notes: Уредувај ÑопÑтвени белешки + permission_move_issues: ПремеÑтувај задачи + permission_delete_issues: Бриши задачи + permission_manage_public_queries: Manage public queries + permission_save_queries: Save queries + permission_view_gantt: View gantt chart + permission_view_calendar: View calendar + permission_view_issue_watchers: View watchers list + permission_add_issue_watchers: Add watchers + permission_delete_issue_watchers: Delete watchers + permission_log_time: Бележи потрошено време + permission_view_time_entries: Прегледај потрошено време + permission_edit_time_entries: Уредувај белешки за потрошено време + permission_edit_own_time_entries: Уредувај ÑопÑтвени белешки за потрошено време + permission_manage_news: Manage news + permission_comment_news: Коментирај на веÑти + permission_manage_documents: Manage documents + permission_view_documents: Прегледувај документи + permission_manage_files: Manage files + permission_view_files: Прегледувај датотеки + permission_manage_wiki: Manage wiki + permission_rename_wiki_pages: Преименувај вики Ñтраници + permission_delete_wiki_pages: Бриши вики Ñтраници + permission_view_wiki_pages: Прегледувај вики + permission_view_wiki_edits: Прегледувај вики иÑторија + permission_edit_wiki_pages: Уредувај вики Ñтраници + permission_delete_wiki_pages_attachments: Бриши прилози + permission_protect_wiki_pages: Заштитувај вики Ñтраници + permission_manage_repository: Manage repository + permission_browse_repository: Browse repository + permission_view_changesets: View changesets + permission_commit_access: Commit access + permission_manage_boards: Manage boards + permission_view_messages: View messages + permission_add_messages: Post messages + permission_edit_messages: Уредувај пораки + permission_edit_own_messages: Уредувај ÑопÑтвени пораки + permission_delete_messages: Бриши пораки + permission_delete_own_messages: Бриши ÑопÑтвени пораки + permission_export_wiki_pages: Export wiki pages + permission_manage_subtasks: Manage subtasks + + project_module_issue_tracking: Следење на задачи + project_module_time_tracking: Следење на време + project_module_news: ВеÑти + project_module_documents: Документи + project_module_files: Датотеки + project_module_wiki: Вики + project_module_repository: Repository + project_module_boards: Форуми + project_module_calendar: Календар + project_module_gantt: Gantt + + label_user: КориÑник + label_user_plural: КориÑници + label_user_new: Ðов кориÑник + label_user_anonymous: Ðнонимен + label_project: Проект + label_project_new: Ðов проект + label_project_plural: Проекти + label_x_projects: + zero: нема проекти + one: 1 проект + other: "{{count}} проекти" + label_project_all: Сите проекти + label_project_latest: ПоÑледните проекти + label_issue: Задача + label_issue_new: Ðова задача + label_issue_plural: Задачи + label_issue_view_all: Прегледај ги Ñите задачи + label_issues_by: "Задачи по {{value}}" + label_issue_added: Задачата е додадена + label_issue_updated: Задачата е ажурирана + label_document: Документ + label_document_new: Ðов документ + label_document_plural: Документи + label_document_added: Документот е додаден + label_role: Улога + label_role_plural: Улоги + label_role_new: Ðова улога + label_role_and_permissions: Улоги и овлаÑтувања + label_member: Член + label_member_new: Ðов член + label_member_plural: Членови + label_tracker: Tracker + label_tracker_plural: Trackers + label_tracker_new: New tracker + label_workflow: Workflow + label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача + label_issue_status_plural: СтатуÑи на задачи + label_issue_status_new: Ðов ÑÑ‚Ð°Ñ‚ÑƒÑ + label_issue_category: Категорија на задача + label_issue_category_plural: Категории на задачи + label_issue_category_new: Ðова категорија + label_custom_field: Прилагодено поле + label_custom_field_plural: Прилагодени полиња + label_custom_field_new: Ðово прилагодено поле + label_enumerations: Enumerations + label_enumeration_new: Ðова вредноÑÑ‚ + label_information: Информација + label_information_plural: Информации + label_please_login: Ðајави Ñе + label_register: РегиÑтрирај Ñе + label_login_with_open_id_option: или најави Ñе Ñо OpenID + label_password_lost: Изгубена лозинка + label_home: Почетна + label_my_page: Мојата Ñтрана + label_my_account: Мојот профил + label_my_projects: Мои проекти + label_my_page_block: Блок елемент + label_administration: ÐдминиÑтрација + label_login: Ðајави Ñе + label_logout: Одјави Ñе + label_help: Помош + label_reported_issues: Пријавени задачи + label_assigned_to_me_issues: Задачи доделени на мене + label_last_login: ПоÑледна најава + label_registered_on: РегиÑтриран на + label_activity: ÐктивноÑÑ‚ + label_overall_activity: Севкупна активноÑÑ‚ + label_user_activity: "ÐктивноÑÑ‚ на {{value}}" + label_new: Ðова + label_logged_as: Ðајавени Ñте како + label_environment: Опкружување + label_authentication: Ðвтентикација + label_auth_source: Режим на автентикација + label_auth_source_new: Ðов режим на автентикација + label_auth_source_plural: Режими на автентикација + label_subproject_plural: Подпроекти + label_subproject_new: Ðов подпроект + label_and_its_subprojects: "{{value}} и неговите подпроекти" + label_min_max_length: Мин. - МакÑ. должина + label_list: ЛиÑта + label_date: Дата + label_integer: Integer + label_float: Float + label_boolean: Boolean + label_string: ТекÑÑ‚ + label_text: Долг текÑÑ‚ + label_attribute: Ðтрибут + label_attribute_plural: Ðтрибути + label_download: "{{count}} превземање" + label_download_plural: "{{count}} превземања" + label_no_data: Ðема податоци за прикажување + label_change_status: Промени ÑÑ‚Ð°Ñ‚ÑƒÑ + label_history: ИÑторија + label_attachment: Датотека + label_attachment_new: Ðова датотека + label_attachment_delete: Избриши датотека + label_attachment_plural: Датотеки + label_file_added: Датотеката е додадена + label_report: Извештај + label_report_plural: Извештаи + label_news: ÐовоÑÑ‚ + label_news_new: Додади новоÑÑ‚ + label_news_plural: ÐовоÑти + label_news_latest: ПоÑледни новоÑти + label_news_view_all: Прегледај ги Ñите новоÑти + label_news_added: ÐовоÑтта е додадена + label_settings: Settings + label_overview: Преглед + label_version: Верзија + label_version_new: Ðова верзија + label_version_plural: Верзии + label_close_versions: Затвори ги завршените врзии + label_confirmation: Потврда + label_export_to: 'ДоÑтапно и во:' + label_read: Прочитај... + label_public_projects: Јавни проекти + label_open_issues: отворена + label_open_issues_plural: отворени + label_closed_issues: затворена + label_closed_issues_plural: затворени + label_x_open_issues_abbr_on_total: + zero: 0 отворени / {{total}} + one: 1 отворена / {{total}} + other: "{{count}} отворени / {{total}}" + label_x_open_issues_abbr: + zero: 0 отворени + one: 1 отворена + other: "{{count}} отворени" + label_x_closed_issues_abbr: + zero: 0 затворени + one: 1 затворена + other: "{{count}} затворени" + label_total: Вкупно + label_permissions: ОвлаÑтувања + label_current_status: Моментален ÑÑ‚Ð°Ñ‚ÑƒÑ + label_new_statuses_allowed: Дозволени нови ÑтатуÑи + label_all: Ñите + label_none: ниеден + label_nobody: никој + label_next: Следно + label_previous: Претходно + label_used_by: КориÑтено од + label_details: Детали + label_add_note: Додади белешка + label_per_page: По Ñтрана + label_calendar: Календар + label_months_from: меÑеци од + label_gantt: Gantt + label_internal: Internal + label_last_changes: "поÑледни {{count}} промени" + label_change_view_all: Прегледај ги Ñите промени + label_personalize_page: Прилагоди ја Ñтранава + label_comment: Коментар + label_comment_plural: Коментари + label_x_comments: + zero: нема коментари + one: 1 коментар + other: "{{count}} коментари" + label_comment_add: Додади коментар + label_comment_added: Коментарот е додаден + label_comment_delete: Избриши коментари + label_query: Custom query + label_query_plural: Custom queries + label_query_new: New query + label_filter_add: Додади филтер + label_filter_plural: Филтри + label_equals: е + label_not_equals: не е + label_in_less_than: за помалку од + label_in_more_than: за повеќе од + label_greater_or_equal: '>=' + label_less_or_equal: '<=' + label_in: во + label_today: Ð´ÐµÐ½ÐµÑ + label_all_time: цело време + label_yesterday: вчера + label_this_week: оваа недела + label_last_week: минатата недела + label_last_n_days: "поÑледните {{count}} дена" + label_this_month: овој меÑец + label_last_month: минатиот меÑец + label_this_year: оваа година + label_date_range: Date range + label_less_than_ago: пред помалку од денови + label_more_than_ago: пред повеќе од денови + label_ago: пред денови + label_contains: Ñодржи + label_not_contains: не Ñодржи + label_day_plural: денови + label_repository: Складиште + label_repository_plural: Складишта + label_browse: ПрелиÑтувај + label_modification: "{{count}} промени" + label_modification_plural: "{{count}} промени" + label_branch: Гранка + label_tag: Tag + label_revision: Ревизија + label_revision_plural: Ревизии + label_revision_id: "Ревизија {{value}}" + label_associated_revisions: Associated revisions + label_added: added + label_modified: modified + label_copied: copied + label_renamed: renamed + label_deleted: deleted + label_latest_revision: ПоÑледна ревизија + label_latest_revision_plural: ПоÑледни ревизии + label_view_revisions: Прегледај ги ревизиите + label_view_all_revisions: Прегледај ги Ñите ревизии + label_max_size: МакÑ. големина + label_sort_highest: ПремеÑти најгоре + label_sort_higher: ПремеÑти нагоре + label_sort_lower: ПремеÑти надоле + label_sort_lowest: ПремеÑти најдоле + label_roadmap: Roadmap + label_roadmap_due_in: "Due in {{value}}" + label_roadmap_overdue: "КаÑни {{value}}" + label_roadmap_no_issues: Ðема задачи за оваа верзија + label_search: Барај + label_result_plural: Резултати + label_all_words: Сите зборови + label_wiki: Вики + label_wiki_edit: Вики уредување + label_wiki_edit_plural: Вики уредувања + label_wiki_page: Вики Ñтраница + label_wiki_page_plural: Вики Ñтраници + label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ наÑлов + label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата + label_current_version: Current version + label_preview: Preview + label_feed_plural: Feeds + label_changes_details: Детали за Ñите промени + label_issue_tracking: Следење на задачи + label_spent_time: Потрошено време + label_overall_spent_time: Вкупно потрошено време + label_f_hour: "{{value}} чаÑ" + label_f_hour_plural: "{{value}} чаÑа" + label_time_tracking: Следење на време + label_change_plural: Промени + label_statistics: СтатиÑтики + label_commits_per_month: Commits per month + label_commits_per_author: Commits per author + label_view_diff: View differences + label_diff_inline: inline + label_diff_side_by_side: side by side + label_options: Опции + label_copy_workflow_from: Copy workflow from + label_permissions_report: Permissions report + label_watched_issues: Watched issues + label_related_issues: Поврзани задачи + label_applied_status: Applied status + label_loading: Loading... + label_relation_new: Ðова релација + label_relation_delete: Избриши релација + label_relates_to: related to + label_duplicates: дупликати + label_duplicated_by: duplicated by + label_blocks: blocks + label_blocked_by: блокирано од + label_precedes: претходи + label_follows: Ñледи + label_end_to_start: крај до почеток + label_end_to_end: крај до крај + label_start_to_start: почеток до почеток + label_start_to_end: почеток до крај + label_stay_logged_in: ОÑтанете најавени + label_disabled: disabled + label_show_completed_versions: Show completed versions + label_me: Ñ˜Ð°Ñ + label_board: Форум + label_board_new: Ðов форум + label_board_plural: Форуми + label_board_locked: Заклучен + label_board_sticky: Sticky + label_topic_plural: Теми + label_message_plural: Пораки + label_message_last: ПоÑледна порака + label_message_new: Ðова порака + label_message_posted: Поракате е додадена + label_reply_plural: Одговори + label_send_information: ИÑпрати ги информациите за профилот на кориÑникот + label_year: Година + label_month: МеÑец + label_week: Ðедела + label_date_from: Од + label_date_to: До + label_language_based: Според јазикот на кориÑникот + label_sort_by: "Подреди Ñпоред {{value}}" + label_send_test_email: ИÑпрати теÑÑ‚ е-порака + label_feeds_access_key: RSS клуч за приÑтап + label_missing_feeds_access_key: ÐедоÑтика RSS клуч за приÑтап + label_feeds_access_key_created_on: "RSS клучот за приÑтап креиран пред {{value}}" + label_module_plural: Модули + label_added_time_by: "Додадено од {{author}} пред {{age}}" + label_updated_time_by: "Ðжурирано од {{author}} пред {{age}}" + label_updated_time: "Ðжурирано пред {{value}}" + label_jump_to_a_project: Префрли Ñе на проект... + label_file_plural: Датотеки + label_changeset_plural: Changesets + label_default_columns: ОÑновни колони + label_no_change_option: (Без промена) + label_bulk_edit_selected_issues: Групно уредување на задачи + label_theme: Тема + label_default: Default + label_search_titles_only: Пребарувај Ñамо наÑлови + label_user_mail_option_all: "За било кој наÑтан во Ñите мои проекти" + label_user_mail_option_selected: "За било кој наÑтан Ñамо во избраните проекти..." + label_user_mail_no_self_notified: "Ðе ме извеÑтувај за промените што Ñ˜Ð°Ñ Ð³Ð¸ правам" + label_registration_activation_by_email: активација на профил преку е-пошта + label_registration_manual_activation: мануелна активација на профил + label_registration_automatic_activation: автоматÑка активација на профил + label_display_per_page: "По Ñтрана: {{value}}" + label_age: Age + label_change_properties: Change properties + label_general: Општо + label_more: Повеќе + label_scm: SCM + label_plugins: Додатоци + label_ldap_authentication: LDAP автентикација + label_downloads_abbr: Превземања + label_optional_description: ÐžÐ¿Ð¸Ñ (незадолжително) + label_add_another_file: Додади уште една датотека + label_preferences: Preferences + label_chronological_order: Во хронолошки ред + label_reverse_chronological_order: In reverse chronological order + label_planning: Планирање + label_incoming_emails: Дојдовни е-пораки + label_generate_key: Генерирај клуч + label_issue_watchers: Watchers + label_example: Пример + label_display: Прикажи + label_sort: Подреди + label_ascending: РаÑтечки + label_descending: Опаѓачки + label_date_from_to: Од {{start}} до {{end}} + label_wiki_content_added: Вики Ñтраница додадена + label_wiki_content_updated: Вики Ñтраница ажурирана + label_group: Група + label_group_plural: Групи + label_group_new: Ðова група + label_time_entry_plural: Потрошено време + label_version_sharing_none: Ðе Ñподелено + label_version_sharing_descendants: Со Ñите подпроекти + label_version_sharing_hierarchy: Со хиерархијата на проектот + label_version_sharing_tree: Со дрвото на проектот + label_version_sharing_system: Со Ñите проекти + label_update_issue_done_ratios: Update issue done ratios + label_copy_source: Извор + label_copy_target: ДеÑтинација + label_copy_same_as_target: ИÑто како деÑтинацијата + label_display_used_statuses_only: Only display statuses that are used by this tracker + label_api_access_key: API клуч за приÑтап + label_missing_api_access_key: ÐедоÑтига API клуч за приÑтап + label_api_access_key_created_on: "API клучот за приÑтап е креиран пред {{value}}" + label_profile: Профил + label_subtask_plural: Подзадачи + label_project_copy_notifications: Праќај извеÑтувања по е-пошта при копирање на проект + + button_login: Ðајави Ñе + button_submit: ИÑпрати + button_save: Зачувај + button_check_all: Штиклирај ги Ñите + button_uncheck_all: Одштиклирај ги Ñите + button_delete: Избриши + button_create: Креирај + button_create_and_continue: Креирај и продолжи + button_test: ТеÑÑ‚ + button_edit: Уреди + button_add: Додади + button_change: Промени + button_apply: Примени + button_clear: Избриши + button_lock: Заклучи + button_unlock: Отклучи + button_download: Превземи + button_list: List + button_view: Прегледај + button_move: ПремеÑти + button_move_and_follow: ПремеÑти и Ñледи + button_back: Back + button_cancel: Откажи + button_activate: Ðктивирај + button_sort: Подреди + button_log_time: Бележи време + button_rollback: Rollback to this version + button_watch: Следи + button_unwatch: Ðе Ñледи + button_reply: Одговори + button_archive: Ðрхивирај + button_unarchive: Одархивирај + button_reset: Reset + button_rename: Преименувај + button_change_password: Промени лозинка + button_copy: Копирај + button_copy_and_follow: Копирај и Ñледи + button_annotate: Annotate + button_update: Ðжурирај + button_configure: Конфигурирај + button_quote: Цитирај + button_duplicate: Копирај + button_show: Show + + status_active: активни + status_registered: региÑтрирани + status_locked: заклучени + + version_status_open: отворени + version_status_locked: заклучени + version_status_closed: затворени + + field_active: Active + + text_select_mail_notifications: Изберете за кои наÑтани да Ñе праќаат извеÑтувања по е-пошта да Ñе праќаат. + text_regexp_info: eg. ^[A-Z0-9]+$ + text_min_max_length_info: 0 значи без ограничување + text_project_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете проектот и Ñите поврзани податоци? + text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} иÑто така ќе бидат избришани." + text_workflow_edit: Select a role and a tracker to edit the workflow + text_are_you_sure: Дали Ñте Ñигурни? + text_journal_changed: "{{label}} променето од {{old}} во {{new}}" + text_journal_set_to: "{{label}} set to {{value}}" + text_journal_deleted: "{{label}} избришан ({{old}})" + text_journal_added: "{{label}} {{value}} додаден" + text_tip_issue_begin_day: задачи што почнуваат овој ден + text_tip_issue_end_day: задачи што завршуваат овој ден + text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден + text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes Ñе дозволени<br />По зачувувањето, идентификаторот неможе да Ñе Ñмени.' + text_caracters_maximum: "{{count}} знаци макÑимум." + text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго." + text_length_between: "Должина помеѓу {{min}} и {{max}} знаци." + text_tracker_no_workflow: No workflow defined for this tracker + text_unallowed_characters: Ðедозволени знаци + text_comma_separated: Дозволени Ñе повеќе вредноÑти (разделени Ñо запирка). + text_line_separated: Дозволени Ñе повеќе вредноÑти (една линија за Ñекоја вредноÑÑ‚). + text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages + text_issue_added: "Задачата {{id}} е пријавена од {{author}}." + text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}." + text_wiki_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете ова вики и целата негова Ñодржина? + text_issue_category_destroy_question: "Ðекои задачи ({{count}}) Ñе доделени на оваа категорија. Што Ñакате да правите?" + text_issue_category_destroy_assignments: Remove category assignments + text_issue_category_reassign_to: Додели ги задачите на оваа категорија + text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)." + text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded." + text_load_default_configuration: Load the default configuration + text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_issues_destroy_confirmation: 'Дали Ñте Ñигурни дека Ñакате да ги избришете избраните задачи?' + text_select_project_modules: 'Изберете модули за овој проект:' + text_default_administrator_account_changed: Default administrator account changed + text_file_repository_writable: Во папката за прилози може да Ñе запишува + text_plugin_assets_writable: Во папката за додатоци може да Ñе запишува + text_rmagick_available: RMagick available (незадолжително) + text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?" + text_destroy_time_entries: Delete reported hours + text_assign_time_entries_to_project: Додели ги пријавените чаÑови на проектот + text_reassign_time_entries: 'Reassign reported hours to this issue:' + text_user_wrote: "{{value}} напиша:" + text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_category_reassign_to: 'Reassign them to this value:' + text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата." + text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." + text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' + text_custom_field_possible_values_info: 'One line for each value' + text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + text_wiki_page_nullify_children: "Keep child pages as root pages" + text_wiki_page_destroy_children: "Delete child pages and all their descendants" + text_wiki_page_reassign_children: "Reassign child pages to this parent page" + 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.\nAre you sure you want to continue?" + text_zoom_in: Zoom in + text_zoom_out: Zoom out + + default_role_manager: Менаџер + default_role_developer: Developer + default_role_reporter: Reporter + default_tracker_bug: Грешка + default_tracker_feature: ФункционалноÑÑ‚ + default_tracker_support: Поддршка + default_issue_status_new: Ðова + default_issue_status_in_progress: Во Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑ + default_issue_status_resolved: Разрешена + default_issue_status_feedback: Feedback + default_issue_status_closed: Затворена + default_issue_status_rejected: Одбиена + default_doc_category_user: КориÑничка документација + default_doc_category_tech: Техничка документација + default_priority_low: Ðизок + default_priority_normal: Ðормален + default_priority_high: ВиÑок + default_priority_urgent: Итно + default_priority_immediate: Веднаш + default_activity_design: Дизајн + default_activity_development: Развој + + enumeration_issue_priorities: Приоритети на задача + enumeration_doc_categories: Категории на документ + enumeration_activities: ÐктивноÑти (Ñледење на време) + enumeration_system_activity: СиÑтемÑка активноÑÑ‚ + + button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + text_are_you_sure_with_children: Delete issue and all child issues? + field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/mn.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/mn.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -184,10 +184,10 @@ mail_body_account_activation_request: "Ð¨Ð¸Ð½Ñ Ñ…ÑÑ€ÑглÑгч ({{value}}) бүртгүүлÑÑн байна. Таны баталгаажуулахыг хүлÑÑж байна:" mail_subject_reminder: "Дараагийн өдрүүдÑд {{count}} аÑуудлыг шийдÑÑ… Ñ…ÑÑ€ÑгтÑй ({{days}})" mail_body_reminder: "Танд оноогдÑон {{count}} аÑуудлуудыг дараагийн {{days}} өдрүүдÑд шийдÑÑ… Ñ…ÑÑ€ÑгтÑй:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 алдаа gui_validation_error_plural: "{{count}} алдаа" @@ -252,7 +252,6 @@ field_attr_lastname: Овог аттрибут field_attr_mail: ИмÑйл аттрибут field_onthefly: Ð¥Ò¯ÑÑÑн үедÑÑ Ñ…ÑÑ€ÑглÑгч Ò¯Ò¯ÑгÑÑ… - field_start_date: ÐхлÑл field_done_ratio: %% ГүйцÑтгÑÑÑн field_auth_source: ÐÑвтрÑÑ… арга field_hide_mail: Миний имÑйл хаÑгийг нуу @@ -707,7 +706,6 @@ label_search_titles_only: Зөвхөн гарчиг хайх label_user_mail_option_all: "Миний бүх төÑөл дÑÑрх бүх үзÑгдлүүдийн хувьд" label_user_mail_option_selected: "СонгогдÑон төÑлүүдийн хувьд бүх үзÑгдÑл дÑÑÑ€..." - label_user_mail_option_none: "Зөвхөн миний ажиглаж байгаа Ð·Ò¯Ð¹Ð»Ñ ÑŽÐ¼ÑƒÑƒ надад хамаатай бол" label_user_mail_no_self_notified: "Миний өөрийн хийÑÑн өөрчлөлтүүдийн тухай надад мÑдÑгдÑÑ… Ñ…ÑÑ€Ñггүй" label_registration_activation_by_email: данÑыг имÑйлÑÑÑ€ идÑвхжүүлÑÑ… label_registration_manual_activation: данÑыг гараар идÑвхжүүлÑÑ… @@ -821,9 +819,9 @@ text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө" text_journal_deleted: "{{label}} уÑÑ‚Ñан ({{old}})" text_journal_added: "{{label}} {{value}} нÑмÑгдÑÑн" - text_tip_task_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил - text_tip_task_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил - text_tip_task_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил + text_tip_issue_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил + text_tip_issue_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил + text_tip_issue_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил text_project_identifier_info: 'Зөвхөн жижиг Ò¯Ñгүүд болон (a-z), тоо and дундуур Ð·ÑƒÑ€Ð°Ð°Ñ Ð°ÑˆÐ¸Ð³Ð»Ð°Ð¶ болно.<br />ÐÑгÑнт хадгалÑан хойно, төÑлийн глобал нÑрийг өөрлчөх боломжгүй.' text_caracters_maximum: "дÑÑд тал нь {{count}} Ò¯ÑÑг." text_caracters_minimum: "Хамгийн багадаа Ñдаж {{count}} Ñ‚ÑмдÑгт байх." @@ -914,8 +912,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/nl.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/nl.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -256,7 +256,6 @@ field_role: Rol field_searchable: Doorzoekbaar field_spent_on: Datum - field_start_date: Startdatum field_start_page: Startpagina field_status: Status field_subject: Onderwerp @@ -579,7 +578,6 @@ label_user_activity: "{{value}}'s activiteit" label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak." label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..." - label_user_mail_option_none: "Alleen in de dingen die ik monitor of in betrokken ben" label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..." label_user_new: Nieuwe gebruiker label_user_plural: Gebruikers @@ -765,9 +763,9 @@ text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:' text_status_changed_by_changeset: "Toegepast in changeset {{value}}." text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden." - text_tip_task_begin_day: taak die op deze dag begint - text_tip_task_begin_end_day: taak die op deze dag begint en eindigt - text_tip_task_end_day: taak die op deze dag eindigt + text_tip_issue_begin_day: issue die op deze dag begint + text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt + text_tip_issue_end_day: issue die op deze dag eindigt text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker text_unallowed_characters: Niet toegestane tekens text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." @@ -798,12 +796,12 @@ text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's setting_password_min_length: Minimum wachtwoord lengte field_group_by: Groepeer resultaten per - mail_subject_wiki_content_updated: "'{{page}}' wiki pagina is bijgewerkt" + mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt" label_wiki_content_added: Wiki pagina toegevoegd - mail_subject_wiki_content_added: "'{{page}}' wiki pagina is toegevoegd" - mail_body_wiki_content_added: The '{{page}}' wiki pagina is toegevoegd door {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd" + mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}. label_wiki_content_updated: Wiki pagina bijgewerkt - mail_body_wiki_content_updated: The '{{page}}' wiki pagina is bijgewerkt door {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}. permission_add_project: Maak project setting_new_project_user_role_id: Rol van gebruiker die een project maakt label_view_all_revisions: Bekijk alle revisies @@ -895,8 +893,19 @@ field_time_entries: Log tijd project_module_gantt: Gantt project_module_calendar: Kalender - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/no.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/no.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -231,7 +231,6 @@ field_attr_lastname: Etternavnsattributt field_attr_mail: E-post-attributt field_onthefly: On-the-fly brukeropprettelse - field_start_date: Start field_done_ratio: % Ferdig field_auth_source: Autentifikasjonsmodus field_hide_mail: Skjul min e-post-adresse @@ -584,7 +583,6 @@ label_search_titles_only: Søk bare i titler label_user_mail_option_all: "For alle hendelser på mine prosjekter" label_user_mail_option_selected: "For alle hendelser på valgte prosjekt..." - label_user_mail_option_none: "Bare for ting jeg overvåker eller er involvert i" label_user_mail_no_self_notified: "Jeg vil ikke bli varslet om endringer jeg selv gjør" label_registration_activation_by_email: kontoaktivering pr. e-post label_registration_manual_activation: manuell kontoaktivering @@ -654,9 +652,9 @@ text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet." text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten text_are_you_sure: Er du sikker ? - text_tip_task_begin_day: oppgaven starter denne dagen - text_tip_task_end_day: oppgaven avsluttes denne dagen - text_tip_task_begin_end_day: oppgaven starter og avsluttes denne dagen + text_tip_issue_begin_day: oppgaven starter denne dagen + text_tip_issue_end_day: oppgaven avsluttes denne dagen + text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.<br />Identifikatoren kan ikke endres etter den er lagret.' text_caracters_maximum: "{{count}} tegn maksimum." text_caracters_minimum: "Må være minst {{count}} tegn langt." @@ -807,12 +805,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -904,8 +902,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pl.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/pl.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -277,7 +277,6 @@ field_role: Rola field_searchable: Przeszukiwalne field_spent_on: Data - field_start_date: Start field_start_page: Strona startowa field_status: Status field_subject: Temat @@ -614,7 +613,6 @@ label_user: Użytkownik label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam." label_user_mail_option_all: "Dla każdego zdarzenia w każdym moim projekcie" - label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorę udział" label_user_mail_option_selected: "Tylko dla każdego zdarzenia w wybranych projektach..." label_user_new: Nowy użytkownik label_user_plural: Użytkownicy @@ -797,9 +795,9 @@ text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:' text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}." text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte." - text_tip_task_begin_day: zadanie zaczynające się dzisiaj - text_tip_task_begin_end_day: zadanie zaczynające i kończące się dzisiaj - text_tip_task_end_day: zadanie kończące się dzisiaj + text_tip_issue_begin_day: zadanie zaczynające się dzisiaj + text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj + text_tip_issue_end_day: zadanie kończące się dzisiaj text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia text_unallowed_characters: Niedozwolone znaki text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)." @@ -836,12 +834,12 @@ text_wiki_page_destroy_children: Usuń wszystkie podstrony setting_password_min_length: Minimalna długość hasła field_group_by: Grupuj wyniki wg - mail_subject_wiki_content_updated: "Strona wiki '{{page}}' została uaktualniona" + mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona" label_wiki_content_added: Dodano stronę wiki - mail_subject_wiki_content_added: "Strona wiki '{{page}}' została dodana" - mail_body_wiki_content_added: Strona wiki '{{page}}' została dodana przez {{author}}. + mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana" + mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}. label_wiki_content_updated: Uaktualniono stronę wiki - mail_body_wiki_content_updated: Strona wiki '{{page}}' została uaktualniona przez {{author}}. + mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}. permission_add_project: Tworzenie projektu setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora label_view_all_revisions: Pokaż wszystkie rewizje @@ -934,8 +932,19 @@ field_time_entries: Dziennik project_module_gantt: Diagram Gantta project_module_calendar: Kalendarz - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pt-BR.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/pt-BR.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -264,7 +264,6 @@ field_attr_lastname: Atributo para sobrenome field_attr_mail: Atributo para e-mail field_onthefly: Criar usuários dinamicamente ("on-the-fly") - field_start_date: InÃcio field_done_ratio: % Terminado field_auth_source: Modo de autenticação field_hide_mail: Ocultar meu e-mail @@ -622,7 +621,6 @@ label_search_titles_only: Pesquisar somente tÃtulos label_user_mail_option_all: "Para qualquer evento em todos os meus projetos" label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..." - label_user_mail_option_none: "Somente tarefas que eu acompanho ou estou envolvido" label_user_mail_no_self_notified: "Eu não quero ser notificado de minhas próprias modificações" label_registration_activation_by_email: ativação de conta por e-mail label_registration_manual_activation: ativação manual de conta @@ -696,9 +694,9 @@ text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluÃdos." text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Você tem certeza? - text_tip_task_begin_day: tarefa inicia neste dia - text_tip_task_end_day: tarefa termina neste dia - text_tip_task_begin_end_day: tarefa inicia e termina neste dia + text_tip_issue_begin_day: tarefa inicia neste dia + text_tip_issue_end_day: tarefa termina neste dia + text_tip_issue_begin_end_day: tarefa inicia e termina neste dia text_project_identifier_info: 'Letras minúsculas (a-z), números e hÃfens permitidos.<br />Uma vez salvo, o identificador não poderá ser alterado.' text_caracters_maximum: "máximo {{count}} caracteres" text_caracters_minimum: "deve ter ao menos {{count}} caracteres." @@ -840,12 +838,12 @@ text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes setting_password_min_length: Comprimento mÃnimo para senhas field_group_by: Agrupar por - mail_subject_wiki_content_updated: "A página wiki '{{page}}' foi atualizada" + mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada" label_wiki_content_added: Página wiki adicionada - mail_subject_wiki_content_added: "A página wiki '{{page}}' foi adicionada" - mail_body_wiki_content_added: A página wiki '{{page}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada" + mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}. label_wiki_content_updated: Página wiki atualizada - mail_body_wiki_content_updated: A página wiki '{{page}}' foi atualizada por {{author}}. + mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}. permission_add_project: Criar projeto setting_new_project_user_role_id: Papel atribuÃdo a um usuário não-administrador que cria um projeto label_view_all_revisions: Ver todas as revisões @@ -917,7 +915,7 @@ permission_export_wiki_pages: Exportar páginas wiki setting_cache_formatted_text: Realizar cache de texto formatado permission_manage_project_activities: Gerenciar atividades do projeto - error_unable_delete_issue_status: ImpossÃvel excluir situação da tarefa + error_unable_delete_issue_status: Não foi possÃvel excluir situação da tarefa label_profile: Perfil permission_manage_subtasks: Gerenciar subtarefas field_parent_issue: Tarefa pai @@ -936,9 +934,20 @@ label_overall_spent_time: Tempo gasto geral field_time_entries: Log time project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Calendário + button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}" + text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas? + field_text: Campo de texto + label_user_mail_option_only_owner: Somente para as coisas que eu criei + setting_default_notification_option: Opção padrão de notificação + label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido + label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuÃdas a mim + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/pt.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/pt.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -128,7 +128,7 @@ greater_than_start_date: "deve ser maior que a data inicial" not_same_project: "não pertence ao mesmo projecto" circular_dependency: "Esta relação iria criar uma dependência circular" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "Não é possÃvel ligar uma tarefa a uma sub-tarefa que lhe é pertencente" ## Translated by: Pedro Araújo <phcrva19@hotmail.com> actionview_instancetag_blank_option: Seleccione @@ -152,7 +152,7 @@ notice_account_unknown_email: Utilizador desconhecido. notice_can_t_change_password: Esta conta utiliza uma fonte de autenticação externa. Não é possÃvel alterar a palavra-chave. notice_account_lost_email_sent: Foi-lhe enviado um e-mail com as instruções para escolher uma nova palavra-chave. - notice_account_activated: A sua conta foi activada. Já pode autenticar-se. + notice_account_activated: A sua conta foi activada. É agora possÃvel autenticar-se. notice_successful_create: Criado com sucesso. notice_successful_update: Alterado com sucesso. notice_successful_delete: Apagado com sucesso. @@ -176,9 +176,9 @@ error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.' mail_subject_lost_password: "Palavra-chave de {{value}}" - mail_body_lost_password: 'Para mudar a sua palavra-chave, clique no link abaixo:' + mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:' mail_subject_register: "Activação de conta de {{value}}" - mail_body_register: 'Para activar a sua conta, clique no link abaixo:' + mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:' mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se." mail_body_account_information: Informação da sua conta mail_subject_account_activation_request: "Pedido de activação da conta {{value}}" @@ -224,7 +224,7 @@ field_priority: Prioridade field_fixed_version: Versão field_user: Utilizador - field_role: Papel + field_role: Função field_homepage: Página field_is_public: Público field_parent: Sub-projecto de @@ -249,7 +249,6 @@ field_attr_lastname: Atributo último nome field_attr_mail: Atributo e-mail field_onthefly: Criação de utilizadores na hora - field_start_date: InÃcio field_done_ratio: % Completo field_auth_source: Modo de autenticação field_hide_mail: Esconder endereço de e-mail @@ -264,8 +263,8 @@ field_is_filter: Usado como filtro field_issue_to: Tarefa relacionada field_delay: Atraso - field_assignable: As tarefas podem ser associados a este papel - field_redirect_existing_links: Redireccionar links existentes + field_assignable: As tarefas podem ser associados a esta função + field_redirect_existing_links: Redireccionar ligações existentes field_estimated_hours: Tempo estimado field_column_names: Colunas field_time_zone: Fuso horário @@ -343,17 +342,17 @@ label_document_new: Novo documento label_document_plural: Documentos label_document_added: Documento adicionado - label_role: Papel - label_role_plural: Papéis - label_role_new: Novo papel - label_role_and_permissions: Papéis e permissões + label_role: Função + label_role_plural: Funções + label_role_new: Nova função + label_role_and_permissions: Funções e permissões label_member: Membro label_member_new: Novo membro label_member_plural: Membros label_tracker: Tipo label_tracker_plural: Tipos label_tracker_new: Novo tipo - label_workflow: Workflow + label_workflow: Fluxo de trabalho label_issue_status: Estado da tarefa label_issue_status_plural: Estados da tarefa label_issue_status_new: Novo estado @@ -553,7 +552,7 @@ label_diff_inline: inline label_diff_side_by_side: lado a lado label_options: Opções - label_copy_workflow_from: Copiar workflow de + label_copy_workflow_from: Copiar fluxo de trabalho de label_permissions_report: Relatório de permissões label_watched_issues: Tarefas observadas label_related_issues: Tarefas relacionadas @@ -609,7 +608,6 @@ label_search_titles_only: Procurar apenas em tÃtulos label_user_mail_option_all: "Para qualquer evento em todos os meus projectos" label_user_mail_option_selected: "Para qualquer evento apenas nos projectos seleccionados..." - label_user_mail_option_none: "Apenas para coisas que esteja a observar ou esteja envolvido" label_user_mail_no_self_notified: "Não quero ser notificado de alterações feitas por mim" label_registration_activation_by_email: Activação da conta por e-mail label_registration_manual_activation: Activação manual da conta @@ -681,16 +679,16 @@ text_min_max_length_info: 0 siginifica sem restrição text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados? text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)." - text_workflow_edit: Seleccione um papel e um tipo de tarefa para editar o workflow + text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Tem a certeza? - text_tip_task_begin_day: tarefa a começar neste dia - text_tip_task_end_day: tarefa a acabar neste dia - text_tip_task_begin_end_day: tarefa a começar e acabar neste dia + text_tip_issue_begin_day: tarefa a começar neste dia + text_tip_issue_end_day: tarefa a acabar neste dia + text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hÃfens.<br />Uma vez guardado, o identificador não poderá ser alterado.' text_caracters_maximum: "máximo {{count}} caracteres." text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres." text_length_between: "Deve ter entre {{min}} e {{max}} caracteres." - text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa. + text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Permitidos múltiplos valores (separados por vÃrgula). text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit @@ -701,7 +699,7 @@ text_issue_category_destroy_assignments: Remover as atribuições à categoria text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuÃdas)." - text_no_configuration_data: "Papeis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." + text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." text_load_default_configuration: Carregar as configurações padrão text_status_changed_by_changeset: "Aplicado no changeset {{value}}." text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?' @@ -725,7 +723,7 @@ default_tracker_feature: Funcionalidade default_tracker_support: Suporte default_issue_status_new: Novo - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Em curso default_issue_status_resolved: Resolvido default_issue_status_feedback: Feedback default_issue_status_closed: Fechado @@ -790,7 +788,7 @@ permission_rename_wiki_pages: Renomear páginas de wiki permission_edit_time_entries: Editar entradas de tempo permission_edit_own_issue_notes: Editar as prórpias notas - setting_gravatar_enabled: Utilizar icons Gravatar + setting_gravatar_enabled: Utilizar Ãcones Gravatar label_example: Exemplo text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente." permission_edit_own_messages: Editar as próprias mensagens @@ -799,130 +797,141 @@ label_updated_time_by: "Actualizado por {{author}} há {{age}}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.' setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' - label_display: Display - field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration - field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possÃvel + warning_attachments_not_saved: "Não foi possÃvel gravar {{count}} ficheiro(s) ." + button_create_and_continue: Criar e continuar + text_custom_field_possible_values_info: 'Uma linha para cada valor' + label_display: Mostrar + field_editable: Editável + setting_repository_log_display_limit: Número máximo de revisões exibido no relatório de ficheiro + setting_file_max_size_displayed: Tamanho máximo dos ficheiros de texto exibidos inline + field_watcher: Observador + setting_openid: Permitir inÃcio de sessão e registo com OpenID + field_identity_url: URL do OpenID + label_login_with_open_id_option: ou inÃcio de sessão com OpenID + field_content: Conteúdo + label_descending: Descendente + label_sort: Ordenar + label_ascending: Ascendente + label_date_from_to: De {{start}} a {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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 + text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer? + text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal + text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raÃz + text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes + setting_password_min_length: Tamanho mÃnimo de palavra-chave + field_group_by: Agrupar resultados por + mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada" + label_wiki_content_added: Página Wiki adicionada + mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada" + mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}. + label_wiki_content_updated: Página Wiki actualizada + mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}. + permission_add_project: Criar projecto + setting_new_project_user_role_id: Função atribuÃda a um utilizador não-administrador que cria um projecto + label_view_all_revisions: Ver todas as revisões + label_tag: Etiqueta + label_branch: Ramo + error_no_tracker_in_project: Este projecto não tem associado nenhum tipo de tarefas. Verifique as definições do projecto. + error_no_default_issue_status: Não está definido um estado padrão para as tarefas. Verifique a sua configuração (dirija-se a "Administração -> Estados da tarefa"). + label_group_plural: Grupos + label_group: Grupo + label_group_new: Novo grupo + label_time_entry_plural: Tempo registado + text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" + text_journal_set_to: "{{label}} configurado como {{value}}" + text_journal_deleted: "{{label}} apagou ({{old}})" + text_journal_added: "{{label}} {{value}} adicionado" + field_active: Activo + enumeration_system_activity: Actividade de sistema + permission_delete_issue_watchers: Apagar observadores + version_status_closed: fechado + version_status_locked: protegido + version_status_open: aberto + error_can_not_reopen_issue_on_closed_version: Não é possÃvel voltar a abrir uma tarefa atribuÃda a uma versão fechada + label_user_anonymous: Anónimo + button_move_and_follow: Mover e seguir + setting_default_projects_modules: Módulos activos por predefinição para novos projectos + setting_gravatar_default: Imagem Gravatar predefinida + field_sharing: Partilha + label_version_sharing_hierarchy: Com hierarquia do projecto + label_version_sharing_system: Com todos os projectos + label_version_sharing_descendants: Com os sub-projectos + label_version_sharing_tree: Com árvore do projecto + label_version_sharing_none: Não partilhado + error_can_not_archive_project: Não é possÃvel arquivar este projecto + button_duplicate: Duplicar + button_copy_and_follow: Copiar e seguir + label_copy_source: Origem + setting_issue_done_ratio: Calcular a percentagem de progresso da tarefa + setting_issue_done_ratio_issue_status: Através do estado da tarefa + error_issue_done_ratios_not_updated: Percentagens de progresso da tarefa não foram actualizadas. + error_workflow_copy_target: Seleccione os tipos de tarefas e funções desejadas + setting_issue_done_ratio_issue_field: Através do campo da tarefa + label_copy_same_as_target: Mesmo que o alvo + label_copy_target: Alvo + notice_issue_done_ratios_updated: Percentagens de progresso da tarefa actualizadas. + error_workflow_copy_source: Seleccione um tipo de tarefa ou função de origem + label_update_issue_done_ratios: Actualizar percentagens de progresso da tarefa + setting_start_of_week: Iniciar calendários a + permission_view_issues: Ver tarefas + label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa + label_revision_id: Revisão {{value}} + label_api_access_key: Chave de acesso API + label_api_access_key_created_on: Chave de acesso API criada há {{value}} + label_feeds_access_key: Chave de acesso RSS + notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada. + setting_rest_api_enabled: Activar serviço Web REST + label_missing_api_access_key: Chave de acesso API em falta + label_missing_feeds_access_key: Chave de acesso RSS em falta + button_show: Mostrar + text_line_separated: Vários valores permitidos (uma linha para cada valor). + setting_mail_handler_body_delimiters: Truncar mensagens de correio electrónico após uma destas linhas + permission_add_subprojects: Criar sub-projectos + label_subproject_new: Novo sub-projecto 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_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 - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + Está prestes a eliminar parcial ou totalmente as suas permissões. É possÃvel que não possa editar o projecto após esta acção. + Tem a certeza de que deseja continuar? + label_close_versions: Fechar versões completas + label_board_sticky: Fixar mensagem + label_board_locked: Proteger + permission_export_wiki_pages: Exportar páginas Wiki + setting_cache_formatted_text: Colocar formatação do texto na memória cache + permission_manage_project_activities: Gerir actividades do projecto + error_unable_delete_issue_status: Não foi possÃvel apagar o estado da tarefa + label_profile: Perfil + permission_manage_subtasks: Gerir sub-tarefas + field_parent_issue: Tarefa principal + label_subtask_plural: Sub-tarefa + label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto + error_can_not_delete_custom_field: Não foi possÃvel apagar o campo personalizado + error_unable_to_connect: Não foi possÃvel ligar ({{value}}) + error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada. + error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possÃvel apagar este tipo de tarefa. field_principal: Principal - label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time - field_time_entries: Log time + label_my_page_block: Bloco da minha página + notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}." + text_zoom_out: Ampliar + text_zoom_in: Reduzir + notice_unable_delete_time_entry: Não foi possÃvel apagar a entrada de tempo registado. + label_overall_spent_time: Total de tempo registado + field_time_entries: Tempo registado project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? + project_module_calendar: Calendário + button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}" + text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ro.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/ro.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -232,7 +232,6 @@ field_attr_lastname: Atribut nume field_attr_mail: Atribut email field_onthefly: Creare utilizator pe loc - field_start_date: Data începerii field_done_ratio: Realizat (%) field_auth_source: Mod autentificare field_hide_mail: Nu se afișează adresa de email @@ -654,7 +653,6 @@ label_search_titles_only: Caută numai în titluri label_user_mail_option_all: "Pentru orice eveniment, în toate proiectele mele" label_user_mail_option_selected: " Pentru orice eveniment, în proiectele selectate..." - label_user_mail_option_none: "Doar cele urmărite sau cele în care sunt implicat" label_user_mail_no_self_notified: "Nu trimite notificări pentru modificările mele" label_registration_activation_by_email: activare cont prin email label_registration_manual_activation: activare manuală a contului @@ -737,9 +735,9 @@ text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}." text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru text_are_you_sure: Sunteți sigur(ă)? - text_tip_task_begin_day: sarcină care începe în această zi - text_tip_task_end_day: sarcină care se termină în această zi - text_tip_task_begin_end_day: sarcină care începe și se termină în această zi + text_tip_issue_begin_day: sarcină care începe în această zi + text_tip_issue_end_day: sarcină care se termină în această zi + text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.<br />Odată salvat, identificatorul nu mai poate fi modificat.' text_caracters_maximum: "maxim {{count}} caractere." text_caracters_minimum: "Trebuie să fie minim {{count}} caractere." @@ -809,12 +807,12 @@ text_wiki_page_destroy_children: Șterge paginile și descendenții setting_password_min_length: Lungime minimă parolă field_group_by: Grupează după - mail_subject_wiki_content_updated: "Pagina wiki '{{page}}' a fost actualizată" + mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată" label_wiki_content_added: Adăugat - mail_subject_wiki_content_added: "Pagina wiki '{{page}}' a fost adăugată" - mail_body_wiki_content_added: Pagina wiki '{{page}}' a fost adăugată de {{author}}. + mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată" + mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}. label_wiki_content_updated: Actualizat - mail_body_wiki_content_updated: Pagina wiki '{{page}}' a fost actualizată de {{author}}. + mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}. permission_add_project: Crează proiect setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect. label_view_all_revisions: Arată toate reviziile @@ -906,8 +904,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/ru.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/ru.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -295,7 +295,6 @@ field_admin: ÐдминиÑтратор field_assignable: Задача может быть назначена Ñтой роли field_assigned_to: Ðазначена - field_assigned_to_role: Роль учаÑтника field_attr_firstname: Ð˜Ð¼Ñ field_attr_lastname: Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ field_attr_login: Ðтрибут РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ @@ -314,6 +313,7 @@ field_description: ОпиÑание field_done_ratio: ГотовноÑть в % field_downloads: Загрузки + field_start_date: Дата начала field_due_date: Дата Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ field_editable: Редактируемый field_effective_date: Дата @@ -345,7 +345,6 @@ field_mail: Email field_mail_notification: Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email field_max_length: МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° - field_member_of_group: Группа учаÑтника field_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° field_name: Ð˜Ð¼Ñ field_new_password: Ðовый пароль @@ -365,7 +364,6 @@ field_role: Роль field_searchable: ДоÑтупно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка field_spent_on: Дата - field_start_date: Ðачата field_start_page: Ð¡Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñтраница field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ field_subject: Тема @@ -703,8 +701,10 @@ label_user_activity: "ÐктивноÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {{value}}" label_user_mail_no_self_notified: "Ðе извещать об изменениÑÑ…, которые Ñ Ñделал Ñам" label_user_mail_option_all: "О вÑех ÑобытиÑÑ… во вÑех моих проектах" - label_user_mail_option_none: "Только о тех ÑобытиÑÑ…, которые Ñ Ð¾Ñ‚Ñлеживаю или в которых Ñ ÑƒÑ‡Ð°Ñтвую" label_user_mail_option_selected: "О вÑех ÑобытиÑÑ… только в выбранном проекте..." + label_user_mail_option_only_owner: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñ ÑвлÑÑŽÑÑŒ владельцем + label_user_mail_option_only_my_events: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые Ñ Ð¾Ñ‚Ñлеживаю или в которых учаÑтвую + label_user_mail_option_only_assigned: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые назначены мне label_user_new: Ðовый пользователь label_user_plural: Пользователи label_version: ВерÑÐ¸Ñ @@ -867,6 +867,7 @@ setting_cross_project_issue_relations: Разрешить переÑечение задач по проектам setting_date_format: Формат даты setting_default_language: Язык по умолчанию + setting_default_notification_option: СпоÑоб Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию setting_default_projects_public: Ðовые проекты ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупными setting_diff_max_lines_displayed: МакÑимальное чиÑло Ñтрок Ð´Ð»Ñ diff setting_display_subprojects_issues: Отображение подпроектов по умолчанию @@ -941,9 +942,9 @@ text_select_project_modules: 'Выберите модули, которые будут иÑпользованы в проекте:' text_status_changed_by_changeset: "Реализовано в {{value}} редакции." text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены." - text_tip_task_begin_day: дата начала задачи - text_tip_task_begin_end_day: начало задачи и окончание ее в Ñтот день - text_tip_task_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ + text_tip_issue_begin_day: дата начала задачи + text_tip_issue_begin_end_day: начало задачи и окончание ее в Ñтот день + text_tip_issue_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ text_tracker_no_workflow: Ð”Ð»Ñ Ñтого трекера поÑледовательноÑть дейÑтвий не определена text_unallowed_characters: Запрещенные Ñимволы text_user_mail_option: "Ð”Ð»Ñ Ð½ÐµÐ²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… проектов, Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ о том что проÑматриваете или в чем учаÑтвуете (например, вопроÑÑ‹, автором которых Ð’Ñ‹ ÑвлÑетеÑÑŒ или которые Вам назначены)." @@ -958,12 +959,12 @@ text_wiki_page_destroy_children: Удалить дочерние Ñтраницы и вÑех их потомков setting_password_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ field_group_by: Группировать результаты по - mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{page}}' была обновлена" + mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{id}}' была обновлена" label_wiki_content_added: Добавлена wiki-Ñтраница - mail_subject_wiki_content_added: "Wiki-Ñтраница '{{page}}' была добавлена" - mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{page}}'." + mail_subject_wiki_content_added: "Wiki-Ñтраница '{{id}}' была добавлена" + mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{id}}'." label_wiki_content_updated: Обновлена wiki-Ñтраница - mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{page}}'." + mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{id}}'." permission_add_project: Создание проекта setting_new_project_user_role_id: Роль, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ñоздавшему проект label_view_all_revisions: Показать вÑе ревизии @@ -1035,3 +1036,12 @@ notice_unable_delete_time_entry: Ðевозможно удалить запиÑÑŒ журнала. label_overall_spent_time: Ð’Ñего затрачено времени + label_user_mail_option_none: Ðет Ñобытий + field_member_of_group: Группа назначенного + field_assigned_to_role: Роль назначенного + notice_not_authorized_archived_project: Запрашиваемый проект был архивирован. + + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sk.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/sk.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -231,7 +231,6 @@ field_attr_lastname: Priezvisko (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváranie užÃvateľov - field_start_date: ZaÄiatok field_done_ratio: % hotovo field_auth_source: AutentifikaÄný mód field_hide_mail: NezobrazovaÅ¥ môj email @@ -581,7 +580,6 @@ label_search_titles_only: VyhľadávaÅ¥ iba v názvoch label_user_mail_option_all: "Pre vÅ¡etky události vÅ¡etkých mojÃch projektov" label_user_mail_option_selected: "Pre vÅ¡etky události vybraných projektov" - label_user_mail_option_none: "Len pre události, ktoré sledujem alebo sa ma týkajú" label_user_mail_no_self_notified: "NezasielaÅ¥ informácie o mnou vytvorených zmenách" label_registration_activation_by_email: aktivácia úÄtu emailom label_registration_manual_activation: manuálna aktivácia úÄtu @@ -649,9 +647,9 @@ text_project_destroy_confirmation: Ste si istý, že chcete odstránit tento projekt a vÅ¡etky súvisiace dáta ? text_workflow_edit: Vyberte rolu a frontu k úprave workflow text_are_you_sure: Ste si istý? - text_tip_task_begin_day: úloha zaÄÃna v tento deň - text_tip_task_end_day: úloha konÄà v tento deň - text_tip_task_begin_end_day: úloha zaÄÃna a konÄà v tento deň + text_tip_issue_begin_day: úloha zaÄÃna v tento deň + text_tip_issue_end_day: úloha konÄà v tento deň + text_tip_issue_begin_end_day: úloha zaÄÃna a konÄà v tento deň text_project_identifier_info: 'Povolené znaky sú malé pÃsmena (a-z), ÄÃsla a pomlÄka.<br />Po uloženà už nieje možné identifikátor zmeniÅ¥.' text_caracters_maximum: "{{count}} znakov maximálne." text_caracters_minimum: "Musà byÅ¥ aspoň {{count}} znaky/ov dlhé." @@ -810,13 +808,13 @@ text_wiki_page_destroy_children: VymazaÅ¥ podstránky a vÅ¡etkých ich potomkov setting_password_min_length: Minimálna dĺžka hesla field_group_by: Skupinové výsledky podľa - mail_subject_wiki_content_updated: "'{{page}}' Wiki stránka bola aktualizovaná" + mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná" label_wiki_content_added: Wiki stránka pridaná - mail_subject_wiki_content_added: "'{{page}}' Wiki stránka bola pridaná" - mail_body_wiki_content_added: The '{{page}}' Wiki stránka bola pridaná užÃvateľom {{author}}. + mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná" + mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užÃvateľom {{author}}. permission_add_project: Vytvorenie projektu label_wiki_content_updated: Wiki stránka aktualizovaná - mail_body_wiki_content_updated: Wiki stránka '{{page}}' bola aktualizovaná užÃvateľom {{author}}. + mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užÃvateľom {{author}}. setting_repositories_encodings: Kódovanie repozitára setting_new_project_user_role_id: Rola dána non-admin užÃvateľovi, ktorý vytvorà projekt label_view_all_revisions: ZobraziÅ¥ vÅ¡etkz revÃzie @@ -908,8 +906,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sl.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/sl.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -236,7 +236,6 @@ field_attr_lastname: Oznaka za priimek field_attr_mail: Oznaka za e-naslov field_onthefly: Sprotna izdelava uporabnikov - field_start_date: ZaÄetek field_done_ratio: % Narejeno field_auth_source: NaÄin overovljanja field_hide_mail: Skrij moj e-naslov @@ -650,7 +649,6 @@ label_search_titles_only: PreiÅ¡Äi samo naslove label_user_mail_option_all: "Za vsak dogodek v vseh mojih projektih" label_user_mail_option_selected: "Za vsak dogodek samo na izbranih projektih..." - label_user_mail_option_none: "Samo za zadeve ki jih spremljam ali sem v njih udeležen(a)" label_user_mail_no_self_notified: "Ne želim biti opozorjen(a) na spremembe, ki jih naredim sam(a)" label_registration_activation_by_email: aktivacija raÄuna po e-poÅ¡ti label_registration_manual_activation: roÄna aktivacija raÄuna @@ -725,9 +723,9 @@ text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani." text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela text_are_you_sure: Ali ste prepriÄani? - text_tip_task_begin_day: naloga z zaÄetkom na ta dan - text_tip_task_end_day: naloga z zakljuÄkom na ta dan - text_tip_task_begin_end_day: naloga ki se zaÄne in konÄa ta dan + text_tip_issue_begin_day: naloga z zaÄetkom na ta dan + text_tip_issue_end_day: naloga z zakljuÄkom na ta dan + text_tip_issue_begin_end_day: naloga ki se zaÄne in konÄa ta dan text_project_identifier_info: 'Dovoljene so samo male Ärke (a-z), Å¡tevilke in vezaji.<br />Enkrat shranjen identifikator ne more biti spremenjen.' text_caracters_maximum: "najveÄ {{count}} znakov." text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov." @@ -812,12 +810,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -909,8 +907,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sr-YU.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/sr-YU.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -192,10 +192,10 @@ mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog Äeka na vaÅ¡e odobrenje:" mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana" mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:" - mail_subject_wiki_content_added: "Wiki stranica '{{page}}' je dodata" - mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{page}}'." - mail_subject_wiki_content_updated: "Wiki stranica '{{page}}' je ažurirana" - mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{page}}'." + mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata" + mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'." + mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana" + mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'." gui_validation_error: jedna greÅ¡ka gui_validation_error_plural: "{{count}} greÅ¡aka" @@ -261,7 +261,6 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-adrese field_onthefly: Kreiranje korisnika u toku rada - field_start_date: PoÄetak field_done_ratio: % uraÄ‘eno field_auth_source: Režim potvrde identiteta field_hide_mail: Sakrij moju e-adresu @@ -719,7 +718,6 @@ label_search_titles_only: Pretražuj samo naslove label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj na samo odabranim projektima..." - label_user_mail_option_none: "Samo za stvari koje pratim ili u koje sam ukljuÄen" label_user_mail_no_self_notified: "Ne želim biti obaveÅ¡tavan za promene koje sam pravim" label_registration_activation_by_email: aktivacija naloga putem e-poruke label_registration_manual_activation: ruÄna aktivacija naloga @@ -836,9 +834,9 @@ text_journal_set_to: "{{label}} postavljen u {{value}}" text_journal_deleted: "{{label}} izbrisano ({{old}})" text_journal_added: "{{label}} {{value}} dodato" - text_tip_task_begin_day: zadatak poÄinje ovog dana - text_tip_task_end_day: zadatak se zavrÅ¡ava ovog dana - text_tip_task_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana + text_tip_issue_begin_day: zadatak poÄinje ovog dana + text_tip_issue_end_day: zadatak se zavrÅ¡ava ovog dana + text_tip_issue_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana text_project_identifier_info: 'Dozvoljena su samo mala slova (a-Å¡), brojevi i crtice.<br />Jednom snimljen identifikator viÅ¡e se ne može promeniti.' text_caracters_maximum: "NajviÅ¡e {{count}} znak(ova)." text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}." @@ -913,8 +911,19 @@ field_time_entries: Vreme evidencije project_module_gantt: Gantov dijagram project_module_calendar: Kalendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sr.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/sr.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -192,10 +192,10 @@ mail_body_account_activation_request: "Ðови кориÑник ({{value}}) је региÑтрован. Ðалог чека на ваше одобрење:" mail_subject_reminder: "{{count}} проблема доÑпева наредних {{days}} дана" mail_body_reminder: "{{count}} проблема додељених вама доÑпева у наредних {{days}} дана:" - mail_subject_wiki_content_added: "Wiki Ñтраница '{{page}}' је додата" - mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{page}}'." - mail_subject_wiki_content_updated: "Wiki Ñтраница '{{page}}' је ажурирана" - mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{page}}'." + mail_subject_wiki_content_added: "Wiki Ñтраница '{{id}}' је додата" + mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{id}}'." + mail_subject_wiki_content_updated: "Wiki Ñтраница '{{id}}' је ажурирана" + mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{id}}'." gui_validation_error: једна грешка gui_validation_error_plural: "{{count}} грешака" @@ -261,7 +261,6 @@ field_attr_lastname: Ðтрибут презимена field_attr_mail: Ðтрибут е-адреÑе field_onthefly: Креирање кориÑника у току рада - field_start_date: Почетак field_done_ratio: % урађено field_auth_source: Режим потврде идентитета field_hide_mail: Сакриј моју е-адреÑу @@ -719,7 +718,6 @@ label_search_titles_only: Претражуј Ñамо наÑлове label_user_mail_option_all: "За било који догађај на Ñвим мојим пројектима" label_user_mail_option_selected: "За било који догађај на Ñамо одабраним пројектима..." - label_user_mail_option_none: "Само за Ñтвари које пратим или у које Ñам укључен" label_user_mail_no_self_notified: "Ðе желим бити обавештаван за промене које Ñам правим" label_registration_activation_by_email: активација налога путем е-поруке label_registration_manual_activation: ручна активација налога @@ -836,9 +834,9 @@ text_journal_set_to: "{{label}} поÑтављен у {{value}}" text_journal_deleted: "{{label}} избриÑано ({{old}})" text_journal_added: "{{label}} {{value}} додато" - text_tip_task_begin_day: задатак почиње овог дана - text_tip_task_end_day: задатак Ñе завршава овог дана - text_tip_task_begin_end_day: задатак почиње и завршава овог дана + text_tip_issue_begin_day: задатак почиње овог дана + text_tip_issue_end_day: задатак Ñе завршава овог дана + text_tip_issue_begin_end_day: задатак почиње и завршава овог дана text_project_identifier_info: 'Дозвољена Ñу Ñамо мала Ñлова (a-ш), бројеви и цртице.<br />Једном Ñнимљен идентификатор више Ñе не може променити.' text_caracters_maximum: "Ðајвише {{count}} знак(ова)." text_caracters_minimum: "Број знакова мора бити најмање {{count}}." @@ -913,9 +911,20 @@ field_time_entries: Време евиденције project_module_gantt: Гантов дијаграм project_module_calendar: Календар - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/sv.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/sv.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -195,6 +195,7 @@ notice_file_not_found: Sidan du försökte komma åt existerar inte eller är borttagen. notice_locking_conflict: Data har uppdaterats av en annan användare. notice_not_authorized: Du saknar behörighet att komma åt den här sidan. + notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats. notice_email_sent: "Ett mail skickades till {{value}}" notice_email_error: "Ett fel inträffade när mail skickades ({{value}})" notice_feeds_access_key_reseted: Din RSS-nyckel återställdes. @@ -238,10 +239,10 @@ mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:" mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna" mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:" - mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till" - mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}. - mail_subject_wiki_content_updated: "'{{page}}' wikisida har uppdaterats" - mail_body_wiki_content_updated: The '{{page}}' wikisida har uppdaterats av {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wikisida has lagts till" + mail_body_wiki_content_added: The '{{id}}' wikisida has lagts till av {{author}}. + mail_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats" + mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}. gui_validation_error: 1 fel gui_validation_error_plural: "{{count}} fel" @@ -307,7 +308,6 @@ field_attr_lastname: Efternamnsattribut field_attr_mail: Mailattribut field_onthefly: Skapa användare on-the-fly - field_start_date: Start field_done_ratio: % Klart field_auth_source: Autentiseringsläge field_hide_mail: Dölj min mailadress @@ -339,6 +339,9 @@ field_group_by: Gruppera resultat efter field_sharing: Delning field_parent_issue: Förälderaktivitet + field_member_of_group: Tilldelad användares grupp + field_assigned_to_role: Tilldelad användares roll + field_text: Textfält setting_app_title: Applikationsrubrik setting_app_subtitle: Applikationsunderrubrik @@ -393,6 +396,7 @@ setting_start_of_week: Första dagen i veckan setting_rest_api_enabled: Aktivera REST webbtjänst setting_cache_formatted_text: Cacha formaterad text + setting_default_notification_option: Standard notifieringsalternativ permission_add_project: Skapa projekt permission_add_subprojects: Skapa underprojekt @@ -568,7 +572,7 @@ label_news_view_all: Visa alla nyheter label_news_added: Nyhet tillagd label_settings: Inställningar - label_overview: Överblick + label_overview: Översikt label_version: Version label_version_new: Ny version label_version_plural: Versioner @@ -768,7 +772,10 @@ label_search_titles_only: Sök endast i titlar label_user_mail_option_all: "För alla händelser i mina projekt" label_user_mail_option_selected: "För alla händelser i markerade projekt..." - label_user_mail_option_none: "Endast för saker jag bevakar eller är involverad i" + label_user_mail_option_none: Inga händelser + label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i + label_user_mail_option_only_assigned: Endast för saker jag är tilldelad + label_user_mail_option_only_owner: Endast för saker jag äger label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort" label_registration_activation_by_email: kontoaktivering med mail label_registration_manual_activation: manuell kontoaktivering @@ -830,6 +837,7 @@ button_create_and_continue: Skapa och fortsätt button_test: Testa button_edit: Ändra + button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}" button_add: Lägg till button_change: Ändra button_apply: Verkställ @@ -881,13 +889,14 @@ text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort." text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde text_are_you_sure: Är du säker ? + text_are_you_sure_with_children: Ta bort ärende och alla underärenden? text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}" text_journal_set_to: "{{label}} satt till {{value}}" text_journal_deleted: "{{label}} borttagen ({{old}})" text_journal_added: "{{label}} {{value}} tillagd" - text_tip_task_begin_day: arbetsuppgift som börjar denna dag - text_tip_task_end_day: arbetsuppgift som slutar denna dag - text_tip_task_begin_end_day: arbetsuppgift börjar och slutar denna dag + text_tip_issue_begin_day: arbetsuppgift som börjar denna dag + text_tip_issue_end_day: arbetsuppgift som slutar denna dag + text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.<br />När den är sparad kan identifieraren inte ändras.' text_caracters_maximum: "max {{count}} tecken." text_caracters_minimum: "Måste vara minst {{count}} tecken lång." @@ -958,8 +967,8 @@ enumeration_doc_categories: Dokumentkategorier enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_system_activity: Systemaktivitet - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/th.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/th.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -233,7 +233,6 @@ field_attr_lastname: นามสà¸à¸¸à¸¥ attribute field_attr_mail: à¸à¸µà¹€à¸¡à¸¥à¹Œ attribute field_onthefly: สร้างผู้ใช้ทันที - field_start_date: เริ่ม field_done_ratio: % สำเร็จ field_auth_source: วิธีà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตน field_hide_mail: ซ่à¸à¸™à¸à¸µà¹€à¸¡à¸¥à¹Œà¸‚à¸à¸‡à¸‰à¸±à¸™ @@ -585,7 +584,6 @@ label_search_titles_only: ค้นหาจาà¸à¸Šà¸·à¹ˆà¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¹€à¸—่านั้น label_user_mail_option_all: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸‚à¸à¸‡à¸‰à¸±à¸™" label_user_mail_option_selected: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸—ี่เลืà¸à¸..." - label_user_mail_option_none: "เฉพาะสิ่งที่ฉันเลืà¸à¸à¸«à¸£à¸·à¸à¸¡à¸µà¸ªà¹ˆà¸§à¸™à¹€à¸à¸µà¹ˆà¸¢à¸§à¸‚้à¸à¸‡" label_user_mail_no_self_notified: "ฉันไม่ต้à¸à¸‡à¸à¸²à¸£à¹„ด้รับà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ืà¸à¸™à¹ƒà¸™à¸ªà¸´à¹ˆà¸‡à¸—ี่ฉันทำเà¸à¸‡" label_registration_activation_by_email: เปิดบัà¸à¸Šà¸µà¸œà¹ˆà¸²à¸™à¸à¸µà¹€à¸¡à¸¥à¹Œ label_registration_manual_activation: à¸à¸™à¸¸à¸¡à¸±à¸•ิโดยผู้บริหารจัดà¸à¸²à¸£ @@ -655,9 +653,9 @@ text_subprojects_destroy_warning: "โครงà¸à¸²à¸£à¸¢à¹ˆà¸à¸¢: {{value}} จะถูà¸à¸¥à¸šà¸”้วย." text_workflow_edit: เลืà¸à¸à¸šà¸—บาทà¹à¸¥à¸°à¸à¸²à¸£à¸•ิดตาม เพื่à¸à¹à¸à¹‰à¹„ขลำดับงาน text_are_you_sure: คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹„หม ? - text_tip_task_begin_day: งานที่เริ่มวันนี้ - text_tip_task_end_day: งานที่จบวันนี้ - text_tip_task_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰ + text_tip_issue_begin_day: งานที่เริ่มวันนี้ + text_tip_issue_end_day: งานที่จบวันนี้ + text_tip_issue_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰ text_project_identifier_info: 'ภาษาà¸à¸±à¸‡à¸à¸¤à¸©à¸•ัวเล็à¸(a-z), ตัวเลข(0-9) à¹à¸¥à¸°à¸‚ีด (-) เท่านั้น.<br />เมื่à¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¹à¸¥à¹‰à¸§, ชื่à¸à¹€à¸‰à¸žà¸²à¸°à¹„ม่สามารถเปลี่ยนà¹à¸›à¸¥à¸‡à¹„ด้' text_caracters_maximum: "สูงสุด {{count}} ตัวà¸à¸±à¸à¸©à¸£." text_caracters_minimum: "ต้à¸à¸‡à¸¢à¸²à¸§à¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ {{count}} ตัวà¸à¸±à¸à¸©à¸£." @@ -813,12 +811,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -910,8 +908,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/tr.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/tr.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -260,7 +260,6 @@ field_attr_lastname: Soyad Niteliği field_attr_mail: E-Posta Niteliği field_onthefly: Anında kullanıcı oluşturma - field_start_date: Başlangıç field_done_ratio: % tamamlandı field_auth_source: Kimlik Denetim Modu field_hide_mail: E-posta adresimi gizle @@ -610,7 +609,6 @@ label_search_titles_only: Sadece başlıkları ara label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için" label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..." - label_user_mail_option_none: "Sadece dahil olduğum ya da izlediklerim için" label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum" label_registration_activation_by_email: e-posta ile hesap etkinleştirme label_registration_manual_activation: Elle hesap etkinleştirme @@ -680,9 +678,9 @@ text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek." text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin text_are_you_sure: Emin misiniz ? - text_tip_task_begin_day: Bugün başlayan görevler - text_tip_task_end_day: Bugün sona eren görevler - text_tip_task_begin_end_day: Bugün başlayan ve sona eren görevler + text_tip_issue_begin_day: Bugün başlayan görevler + text_tip_issue_end_day: Bugün sona eren görevler + text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.<br />Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.' text_caracters_maximum: "En çok {{count}} karakter." text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı." @@ -839,12 +837,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -936,8 +934,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/uk.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/uk.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -227,7 +227,6 @@ field_attr_lastname: Ðтрибут Прізвище field_attr_mail: Ðтрибут Email field_onthefly: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача на льоту - field_start_date: Початок field_done_ratio: % зроблено field_auth_source: Режим аутентифікації field_hide_mail: Приховувати мій email @@ -544,7 +543,6 @@ label_search_titles_only: Шукати тільки в назвах label_user_mail_option_all: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій у вÑÑ–Ñ… моїх проектах" label_user_mail_option_selected: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій тільки у вибраному проекті..." - label_user_mail_option_none: "Тільки Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, що Ñ Ð¿Ñ€Ð¾Ð³Ð»Ñдаю або в чому Ñ Ð±ÐµÑ€Ñƒ учаÑть" label_user_mail_no_self_notified: "Ðе Ñповіщати про зміни, Ñкі Ñ Ð·Ñ€Ð¾Ð±Ð¸Ð² Ñам" label_registration_activation_by_email: Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу електронною поштою label_registration_manual_activation: ручна Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу @@ -597,9 +595,9 @@ text_project_destroy_confirmation: Ви наполÑгаєте на видаленні цього проекту Ñ– вÑієї інформації, що відноÑитьÑÑ Ð´Ð¾ нього? text_workflow_edit: Виберіть роль Ñ– координатор Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑлідовноÑті дій text_are_you_sure: Ви впевнені? - text_tip_task_begin_day: день початку задачі - text_tip_task_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– - text_tip_task_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð´Ð½Ñ + text_tip_issue_begin_day: день початку задачі + text_tip_issue_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– + text_tip_issue_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð´Ð½Ñ text_project_identifier_info: 'Ð Ñдкові букви (a-z), допуÑтимі цифри Ñ– дефіÑ.<br />Збережений ідентифікатор не може бути змінений.' text_caracters_maximum: "{{count}} Ñимволів(а) макÑимум." text_caracters_minimum: "Повинно мати Ñкнайменше {{count}} Ñимволів(а) у довжину." @@ -812,12 +810,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -909,8 +907,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/vi.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/vi.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -294,7 +294,6 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Bắt đầu field_done_ratio: Tiến độ field_auth_source: Authentication mode field_hide_mail: Không là m lá»™ email cá»§a bạn @@ -654,7 +653,6 @@ label_search_titles_only: Chỉ tìm trong tá»±a đỠlabel_user_mail_option_all: "Má»i sá»± kiện trên má»i dá»± án cá»§a bạn" label_user_mail_option_selected: "Má»i sá»± kiện trên các dá»± án được chá»n..." - label_user_mail_option_none: "Chỉ những vấn đỠbạn theo dõi hoặc được gán" label_user_mail_no_self_notified: "Äừng gá»i email vá» các thay đổi do chÃnh bạn thá»±c hiện" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -728,9 +726,9 @@ text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Bạn chắc chứ? - text_tip_task_begin_day: ngà y bắt đầu - text_tip_task_end_day: ngà y kết thúc - text_tip_task_begin_end_day: bắt đầu và kết thúc cùng ngà y + text_tip_issue_begin_day: ngà y bắt đầu + text_tip_issue_end_day: ngà y kết thúc + text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngà y text_project_identifier_info: 'Chỉ cho phép chữ cái thưá»ng (a-z), con số và dấu gạch ngang.<br />Sau khi lưu, chỉ số ID không thể thay đổi.' text_caracters_maximum: "Tối Ä‘a {{count}} ký tá»±." text_caracters_minimum: "Phải gồm Ãt nhất {{count}} ký tá»±." @@ -871,12 +869,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -968,8 +966,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/zh-TW.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/zh-TW.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -174,7 +174,7 @@ odd: "å¿…é ˆæ˜¯å¥‡æ•¸" even: "å¿…é ˆæ˜¯å¶æ•¸" # Append your own errors here or at the model/attributes scope. - greater_than_start_date: "å¿…é ˆåœ¨èµ·å§‹æ—¥æœŸä¹‹å¾Œ" + greater_than_start_date: "å¿…é ˆåœ¨é–‹å§‹æ—¥æœŸä¹‹å¾Œ" not_same_project: "ä¸å±¬æ–¼åŒä¸€å€‹å°ˆæ¡ˆ" circular_dependency: "é€™å€‹é—œè¯æœƒå°Žè‡´ç’°ç‹€ç›¸ä¾" cant_link_an_issue_with_a_descendant: "é …ç›®ç„¡æ³•è¢«é€£çµè‡³è‡ªå·±çš„åé …ç›®" @@ -235,6 +235,7 @@ notice_file_not_found: 您想è¦å˜å–çš„é é¢å·²ç¶“ä¸å˜åœ¨æˆ–被æ¬ç§»è‡³å…¶ä»–ä½ç½®ã€‚ notice_locking_conflict: 資料已被其他使用者更新。 notice_not_authorized: ä½ æœªè¢«æŽˆæ¬Šå˜å–æ¤é é¢ã€‚ + notice_not_authorized_archived_project: 您欲å˜å–çš„å°ˆæ¡ˆå·²ç¶“è¢«æ¸æª”å°å˜ã€‚ notice_email_sent: "郵件已經æˆåŠŸå¯„é€è‡³ä»¥ä¸‹æ”¶ä»¶è€…: {{value}}" notice_email_error: "寄é€éƒµä»¶çš„éŽç¨‹ä¸ç™¼ç”ŸéŒ¯èª¤ ({{value}})" notice_feeds_access_key_reseted: 您的 RSS å˜å–é‡‘é‘°å·²è¢«é‡æ–°è¨å®šã€‚ @@ -277,10 +278,10 @@ mail_body_account_activation_request: "æœ‰ä½æ–°ç”¨æˆ¶ ({{value}}) 已經完æˆè¨»å†Šï¼Œæ£ç‰å€™æ‚¨çš„å¯©æ ¸ï¼š" mail_subject_reminder: "您有 {{count}} å€‹é …ç›®å³å°‡åˆ°æœŸ ({{days}})" mail_body_reminder: "{{count}} å€‹æŒ‡æ´¾çµ¦æ‚¨çš„é …ç›®ï¼Œå°‡æ–¼ {{days}} 天之內到期:" - mail_subject_wiki_content_added: "'{{page}}' wiki é é¢å·²è¢«æ–°å¢ž" - mail_body_wiki_content_added: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 新增。" - mail_subject_wiki_content_updated: "'{{page}}' wiki é é¢å·²è¢«æ›´æ–°" - mail_body_wiki_content_updated: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 更新。" + mail_subject_wiki_content_added: "'{{id}}' wiki é é¢å·²è¢«æ–°å¢ž" + mail_body_wiki_content_added: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 新增。" + mail_subject_wiki_content_updated: "'{{id}}' wiki é é¢å·²è¢«æ›´æ–°" + mail_body_wiki_content_updated: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 更新。" gui_validation_error: 1 個錯誤 gui_validation_error_plural: "{{count}} 個錯誤" @@ -379,8 +380,8 @@ field_group_by: çµæžœåˆ†çµ„æ–¹å¼ field_sharing: 共用 field_parent_issue: çˆ¶å·¥ä½œé …ç›® - field_member_of_group: 所屬群組 - field_assigned_to_role: 所屬角色 + field_member_of_group: "被指派者的群組" + field_assigned_to_role: "被指派者的角色" field_text: å…§å®¹æ–‡å— setting_app_title: 標題 @@ -436,7 +437,8 @@ setting_start_of_week: 週的第一天 setting_rest_api_enabled: 啟用 REST 網路æœå‹™æŠ€è¡“(Web Service) setting_cache_formatted_text: å¿«å–å·²æ ¼å¼åŒ–æ–‡å— - + setting_default_notification_option: é è¨é€šçŸ¥é¸é … + permission_add_project: 建立專案 permission_add_subprojects: 建立å專案 permission_edit_project: 編輯專案 @@ -811,7 +813,10 @@ label_search_titles_only: 僅æœå°‹æ¨™é¡Œ label_user_mail_option_all: "æé†’與我的專案有關的全部事件" label_user_mail_option_selected: "åªæé†’æˆ‘æ‰€é¸æ“‡å°ˆæ¡ˆä¸çš„事件..." - label_user_mail_option_none: "åªæé†’æˆ‘è§€å¯Ÿä¸æˆ–åƒèˆ‡ä¸çš„事件" + label_user_mail_option_none: "å–æ¶ˆæé†’" + label_user_mail_option_only_my_events: "åªæé†’æˆ‘è§€å¯Ÿä¸æˆ–åƒèˆ‡ä¸çš„事物" + label_user_mail_option_only_assigned: "åªæé†’æˆ‘è¢«æŒ‡æ´¾çš„äº‹ç‰©" + label_user_mail_option_only_owner: "åªæé†’æˆ‘ä½œç‚ºæ“æœ‰è€…的事物" label_user_mail_no_self_notified: "ä¸æé†’æˆ‘è‡ªå·±æ‰€åšçš„變更" label_registration_activation_by_email: é€éŽé›»å郵件啟用帳戶 label_registration_manual_activation: 手動啟用帳戶 @@ -930,9 +935,9 @@ text_journal_set_to: "{{label}} è¨å®šç‚º {{value}}" text_journal_deleted: "{{label}} 已刪除 ({{old}})" text_journal_added: "{{label}} {{value}} 已新增" - text_tip_task_begin_day: 今天起始的工作 - text_tip_task_end_day: 今天截æ¢çš„的工作 - text_tip_task_begin_end_day: 今天起始與截æ¢çš„工作 + text_tip_issue_begin_day: 今天起始的工作 + text_tip_issue_end_day: 今天截æ¢çš„的工作 + text_tip_issue_begin_end_day: 今天起始與截æ¢çš„工作 text_project_identifier_info: 'åªå…許å°å¯«è‹±æ–‡å—æ¯ï¼ˆa-z)ã€é˜¿æ‹‰ä¼¯æ•¸å—與連å—符號(-)。<br />儲å˜å¾Œï¼Œä»£ç¢¼ä¸å¯å†è¢«æ›´æ”¹ã€‚' text_caracters_maximum: "最多 {{count}} 個å—å…ƒ." text_caracters_minimum: "é•·åº¦å¿…é ˆå¤§æ–¼ {{count}} 個å—å…ƒ." @@ -1004,3 +1009,7 @@ enumeration_activities: 活動 (時間追蹤) enumeration_system_activity: 系統活動 + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/.svn/text-base/zh.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/.svn/text-base/zh.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -204,10 +204,10 @@ mail_body_account_activation_request: "新用户({{value}}ï¼‰å·²å®Œæˆæ³¨å†Œï¼Œæ£åœ¨ç‰å€™æ‚¨çš„å®¡æ ¸ï¼š" mail_subject_reminder: "{{count}} 个问题需è¦å°½å¿«è§£å†³ ({{days}})" mail_body_reminder: "指派给您的 {{count}} 个问题需è¦åœ¨ {{days}} 天内完æˆï¼š" - mail_subject_wiki_content_added: "'{{page}}' wiki页é¢å·²æ·»åŠ " - mail_body_wiki_content_added: "'{{page}}' wiki页é¢å·²ç”± {{author}} æ·»åŠ ã€‚" - mail_subject_wiki_content_updated: "'{{page}}' wiki页é¢å·²æ›´æ–°" - mail_body_wiki_content_updated: "'{{page}}' wiki页é¢å·²ç”± {{author}} 更新。" + mail_subject_wiki_content_added: "'{{id}}' wiki页é¢å·²æ·»åŠ " + mail_body_wiki_content_added: "'{{id}}' wiki页é¢å·²ç”± {{author}} æ·»åŠ ã€‚" + mail_subject_wiki_content_updated: "'{{id}}' wiki页é¢å·²æ›´æ–°" + mail_body_wiki_content_updated: "'{{id}}' wiki页é¢å·²ç”± {{author}} 更新。" gui_validation_error: 1 个错误 gui_validation_error_plural: "{{count}} 个错误" @@ -272,7 +272,6 @@ field_attr_lastname: å§“æ°å±žæ€§ field_attr_mail: 邮件属性 field_onthefly: 峿—¶ç”¨æˆ·ç”Ÿæˆ - field_start_date: 开始 field_done_ratio: 完æˆåº¦ field_auth_source: è®¤è¯æ¨¡å¼ field_hide_mail: éšè—æˆ‘çš„é‚®ä»¶åœ°å€ @@ -721,7 +720,6 @@ label_search_titles_only: ä»…åœ¨æ ‡é¢˜ä¸æœç´¢ label_user_mail_option_all: "æ”¶å–æˆ‘的项目的所有通知" label_user_mail_option_selected: "æ”¶å–选ä¸é¡¹ç›®çš„æ‰€æœ‰é€šçŸ¥..." - label_user_mail_option_none: "åªæ”¶å–我跟踪或å‚与的项目的通知" label_user_mail_no_self_notified: "ä¸è¦å‘é€å¯¹æˆ‘自己æäº¤çš„修改的通知" label_registration_activation_by_email: é€šè¿‡é‚®ä»¶è®¤è¯æ¿€æ´»å¸å· label_registration_manual_activation: 手动激活å¸å· @@ -835,9 +833,9 @@ text_journal_set_to: "{{label}} 被设置为 {{value}}" text_journal_deleted: "{{label}} å·²åˆ é™¤ ({{old}})" text_journal_added: "{{label}} {{value}} å·²æ·»åŠ " - text_tip_task_begin_day: 今天开始的任务 - text_tip_task_end_day: 今天结æŸçš„任务 - text_tip_task_begin_end_day: 今天开始并结æŸçš„任务 + text_tip_issue_begin_day: 今天开始的任务 + text_tip_issue_end_day: 今天结æŸçš„任务 + text_tip_issue_begin_end_day: 今天开始并结æŸçš„任务 text_project_identifier_info: 'åªå…许使用å°å†™å—æ¯ï¼ˆa-z),数å—和连å—符(-)。<br />请注æ„ï¼Œæ ‡è¯†ç¬¦ä¿å˜åŽå°†ä¸å¯ä¿®æ”¹ã€‚' text_caracters_maximum: "最多 {{count}} 个å—符。" text_caracters_minimum: "è‡³å°‘éœ€è¦ {{count}} 个å—符。" @@ -931,8 +929,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/bg.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/bg.yml Fri Nov 19 13:24:41 2010 +0000 @@ -9,12 +9,12 @@ short: "%b %d" long: "%B %d, %Y" - day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] - abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] + day_names: [ÐеделÑ, Понеделник, Вторник, СрÑда, Четвъртък, Петък, Събота] + abbr_day_names: [Ðед, Пон, Вто, СрÑ, Чет, Пет, Съб] # Don't forget the nil at the beginning; there's no such thing as a 0th month - month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] - abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] + month_names: [~, Януари, Февруари, Март, Ðприл, Май, Юни, Юли, ÐвгуÑÑ‚, Септември, Октомври, Ðоември, Декември] + abbr_month_names: [~, Яну, Фев, Мар, Ðпр, Май, Юни, Юли, Ðвг, Сеп, Окт, Ðое, Дек] # Used in date_select and datime_select. order: [ :year, :month, :day ] @@ -31,38 +31,38 @@ distance_in_words: half_a_minute: "half a minute" less_than_x_seconds: - one: "less than 1 second" - other: "less than {{count}} seconds" + one: "по-малко от 1 Ñекунда" + other: "по-малко от {{count}} Ñекунди" x_seconds: - one: "1 second" - other: "{{count}} seconds" + one: "1 Ñекунда" + other: "{{count}} Ñекунди" less_than_x_minutes: - one: "less than a minute" - other: "less than {{count}} minutes" + one: "по-малко от 1 минута" + other: "по-малко от {{count}} минути" x_minutes: - one: "1 minute" - other: "{{count}} minutes" + one: "1 минута" + other: "{{count}} минути" about_x_hours: - one: "about 1 hour" - other: "about {{count}} hours" + one: "около 1 чаÑ" + other: "около {{count}} чаÑа" x_days: - one: "1 day" - other: "{{count}} days" + one: "1 ден" + other: "{{count}} дена" about_x_months: - one: "about 1 month" - other: "about {{count}} months" + one: "около 1 меÑец" + other: "около {{count}} меÑеца" x_months: - one: "1 month" - other: "{{count}} months" + one: "1 меÑец" + other: "{{count}} меÑеца" about_x_years: - one: "about 1 year" - other: "about {{count}} years" + one: "около 1 година" + other: "около {{count}} години" over_x_years: - one: "over 1 year" - other: "over {{count}} years" + one: "над 1 година" + other: "над {{count}} години" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "почти 1 година" + other: "почти {{count}} години" number: format: @@ -87,7 +87,7 @@ # Used in array.to_sentence. support: array: - sentence_connector: "and" + sentence_connector: "и" skip_last_comma: false activerecord: @@ -106,17 +106,16 @@ taken: "вече ÑъщеÑтвува" not_a_number: "не е чиÑло" not_a_date: "е невалидна дата" - greater_than: "must be greater than {{count}}" - greater_than_or_equal_to: "must be greater than or equal to {{count}}" - equal_to: "must be equal to {{count}}" - less_than: "must be less than {{count}}" - less_than_or_equal_to: "must be less than or equal to {{count}}" - odd: "must be odd" - even: "must be even" + greater_than: "трÑбва да бъде по-голÑм[a/о] от {{count}}" + greater_than_or_equal_to: "трÑбва да бъде по-голÑм[a/о] от или равен[a/o] на {{count}}" + equal_to: "трÑбва да бъде равен[a/o] на {{count}}" + less_than: "трÑбва да бъде по-малък[a/o] от {{count}}" + less_than_or_equal_to: "трÑбва да бъде по-малък[a/o] от или равен[a/o] на {{count}}" + odd: "трÑбва да бъде нечетен[a/o]" + even: "трÑбва да бъде четен[a/o]" greater_than_start_date: "трÑбва да е Ñлед началната дата" not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚" circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" actionview_instancetag_blank_option: Изберете @@ -171,7 +170,7 @@ field_mail: Email field_filename: Файл field_filesize: Големина - field_downloads: Downloads + field_downloads: Изтеглени файлове field_author: Ðвтор field_created_on: От дата field_updated_on: Обновена @@ -186,10 +185,10 @@ field_title: Заглавие field_project: Проект field_issue: Задача - field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ + field_status: СъÑтоÑние field_notes: Бележка field_is_closed: Затворена задача - field_is_default: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾ подразбиране + field_is_default: СъÑтоÑние по подразбиране field_tracker: Тракер field_subject: ОтноÑно field_due_date: Крайна дата @@ -217,12 +216,11 @@ field_port: Порт field_account: Профил field_base_dn: Base DN - field_attr_login: Login attribute - field_attr_firstname: Firstname attribute - field_attr_lastname: Lastname attribute - field_attr_mail: Email attribute + field_attr_login: Ðтрибут Login + field_attr_firstname: Ðтрибут Първо име (Firstname) + field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname) + field_attr_mail: Ðтрибут Email field_onthefly: Динамично Ñъздаване на потребител - field_start_date: Ðачална дата field_done_ratio: % ÐŸÑ€Ð¾Ð³Ñ€ÐµÑ field_auth_source: Ðачин на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ field_hide_mail: Скрий e-mail адреÑа ми @@ -249,12 +247,12 @@ setting_login_required: ИзиÑкване за вход в ÑиÑтемата setting_self_registration: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ потребители setting_attachment_max_size: МакÑимална големина на прикачен файл - setting_issues_export_limit: Лимит за екÑпорт на задачи + setting_issues_export_limit: МакÑимален брой задачи за екÑпорт setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии setting_host_name: ХоÑÑ‚ setting_text_formatting: Форматиране на текÑта setting_wiki_compression: Wiki компреÑиране на иÑториÑта - setting_feeds_limit: Лимит на Feeds + setting_feeds_limit: МакÑимален брой за емиÑии setting_autofetch_changesets: Ðвтоматично обработване на ревизиите setting_sys_api_enabled: Разрешаване на WS за управление setting_commit_ref_keywords: ОтбелÑзващи ключови думи @@ -270,9 +268,9 @@ label_project_new: Ðов проект label_project_plural: Проекти label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: 0 проекти + one: 1 проект + other: "{{count}} проекта" label_project_all: Ð’Ñички проекти label_project_latest: ПоÑледни проекти label_issue: Задача @@ -293,9 +291,9 @@ label_tracker_plural: Тракери label_tracker_new: Ðов тракер label_workflow: Работен Ð¿Ñ€Ð¾Ñ†ÐµÑ - label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача - label_issue_status_plural: СтатуÑи на задачи - label_issue_status_new: Ðов ÑÑ‚Ð°Ñ‚ÑƒÑ + label_issue_status: СъÑтоÑние на задача + label_issue_status_plural: СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи + label_issue_status_new: Ðово ÑÑŠÑтоÑние label_issue_category: ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð° label_issue_category_plural: Категории задачи label_issue_category_new: Ðова ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ @@ -323,14 +321,14 @@ label_registered_on: РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ label_activity: ДейноÑÑ‚ label_new: Ðов - label_logged_as: Логнат като + label_logged_as: ВлÑзъл като label_environment: Среда label_authentication: ÐžÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_auth_source: Ðачин на Ð¾Ñ‚Ð¾Ñ€Ð¾Ð·Ð°Ñ†Ð¸Ñ label_auth_source_new: Ðов начин на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_auth_source_plural: Ðачини на Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ label_subproject_plural: Подпроекти - label_min_max_length: Мин. - МакÑ. дължина + label_min_max_length: Минимална - макÑимална дължина label_list: СпиÑък label_date: Дата label_integer: ЦелочиÑлен @@ -339,10 +337,10 @@ label_text: Дълъг текÑÑ‚ label_attribute: Ðтрибут label_attribute_plural: Ðтрибути - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "{{count}} изтеглÑне" + label_download_plural: "{{count}} изтеглÑниÑ" label_no_data: ÐÑма изходни данни - label_change_status: ПромÑна на ÑтатуÑа + label_change_status: ПромÑна на ÑÑŠÑтоÑнието label_history: ИÑÑ‚Ð¾Ñ€Ð¸Ñ label_attachment: Файл label_attachment_new: Ðов файл @@ -369,21 +367,21 @@ label_closed_issues: затворена label_closed_issues_plural: затворени label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: 0 отворени / {{total}} + one: 1 отворена / {{total}} + other: "{{count}} отворени / {{total}}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: 0 отворени + one: 1 отворена + other: "{{count}} отворени" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: 0 затворени + one: 1 затворена + other: "{{count}} затворени" label_total: Общо label_permissions: Права - label_current_status: Текущ ÑÑ‚Ð°Ñ‚ÑƒÑ - label_new_statuses_allowed: Позволени ÑтатуÑи + label_current_status: Текущо ÑÑŠÑтоÑние + label_new_statuses_allowed: Позволени ÑÑŠÑтоÑÐ½Ð¸Ñ label_all: вÑички label_none: никакви label_next: Следващ @@ -394,7 +392,7 @@ label_per_page: Ðа Ñтраница label_calendar: Календар label_months_from: меÑеца от - label_gantt: Gantt + label_gantt: Мрежов график label_internal: Вътрешен label_last_changes: "поÑледни {{count}} промени" label_change_view_all: Виж вÑички промени @@ -402,9 +400,9 @@ label_comment: Коментар label_comment_plural: Коментари label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" + zero: 0 коментари + one: 1 коментар + other: "{{count}} коментари" label_comment_add: ДобавÑне на коментар label_comment_added: Добавен коментар label_comment_delete: Изтриване на коментари @@ -453,13 +451,13 @@ label_wiki: Wiki label_wiki_edit: Wiki Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ label_wiki_edit_plural: Wiki редакции - label_wiki_page: Wiki page - label_wiki_page_plural: Wiki pages + label_wiki_page: Wiki Ñтраница + label_wiki_page_plural: Wiki Ñтраници label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата label_current_version: Текуща верÑÐ¸Ñ label_preview: Преглед - label_feed_plural: Feeds + label_feed_plural: ЕмиÑии label_changes_details: Подробни промени label_issue_tracking: Тракинг label_spent_time: Отделено време @@ -478,7 +476,7 @@ label_permissions_report: Справка за права label_watched_issues: Ðаблюдавани задачи label_related_issues: Свързани задачи - label_applied_status: Промени ÑтатуÑа на + label_applied_status: УÑтановено ÑÑŠÑтоÑние label_loading: Зареждане... label_relation_new: Ðова Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ label_relation_delete: Изтриване на Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ @@ -488,10 +486,10 @@ label_blocked_by: блокирана от label_precedes: предшеÑтва label_follows: изпълнÑва Ñе Ñлед - label_end_to_start: end to start - label_end_to_end: end to end - label_start_to_start: start to start - label_start_to_end: start to end + label_end_to_start: край към начало + label_end_to_end: край към край + label_start_to_start: начало към начало + label_start_to_end: начало към край label_stay_logged_in: Запомни ме label_disabled: забранено label_show_completed_versions: Показване на реализирани верÑии @@ -534,7 +532,7 @@ button_clear: ИзчиÑти button_lock: Заключване button_unlock: Отключване - button_download: Download + button_download: ИзтеглÑне button_list: СпиÑък button_view: Преглед button_move: ПремеÑтване @@ -544,8 +542,8 @@ button_sort: Сортиране button_log_time: ОтделÑне на време button_rollback: Върни Ñе към тази Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ - button_watch: Ðаблюдавай - button_unwatch: Спри наблюдението + button_watch: Ðаблюдаване + button_unwatch: Край на наблюдението button_reply: Отговор button_archive: Ðрхивиране button_unarchive: Разархивиране @@ -582,11 +580,11 @@ default_role_manager: Мениджър default_role_developer: Разработчик default_role_reporter: Публикуващ - default_tracker_bug: Бъг + default_tracker_bug: Грешка default_tracker_feature: ФункционалноÑÑ‚ default_tracker_support: Поддръжка default_issue_status_new: Ðова - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Изпълнение default_issue_status_resolved: Приключена default_issue_status_feedback: Обратна връзка default_issue_status_closed: Затворена @@ -648,7 +646,7 @@ label_age: ВъзраÑÑ‚ notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена. text_load_default_configuration: Зареждане на примерна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ - text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑтатуÑи на задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ." + text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ." error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: {{value}}" button_update: ОбновÑване label_change_properties: ПромÑна на наÑтройки @@ -707,208 +705,221 @@ setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран." label_planning: Планиране - text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." - label_and_its_subprojects: "{{value}} and its subprojects" - mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" - text_user_wrote: "{{value}} wrote:" - label_duplicated_by: duplicated by - setting_enabled_scm: Enabled SCM - text_enumeration_category_reassign_to: 'Reassign them to this value:' - text_enumeration_destroy_question: "{{count}} objects are assigned to this value." - label_incoming_emails: Incoming emails - label_generate_key: Generate a key - setting_mail_handler_api_enabled: Enable WS for incoming emails - setting_mail_handler_api_key: API key - text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them." - field_parent_title: Parent page - label_issue_watchers: Watchers - setting_commit_logs_encoding: Commit messages encoding - button_quote: Quote - setting_sequential_project_identifiers: Generate sequential project identifiers - notice_unable_delete_version: Unable to delete version - label_renamed: renamed - label_copied: copied - setting_plain_text_mail: plain text only (no HTML) - permission_view_files: View files - permission_edit_issues: Edit issues - permission_edit_own_time_entries: Edit own time logs - permission_manage_public_queries: Manage public queries - permission_add_issues: Add issues + text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} Ñъщо ще бъдат изтрити." + label_and_its_subprojects: "{{value}} и неговите подпроекти" + mail_body_reminder: "{{count}} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите {{days}} дни:" + mail_subject_reminder: "{{count}} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите {{days}} дни" + text_user_wrote: "{{value}} напиÑа:" + label_duplicated_by: дублирана от + setting_enabled_scm: Разрешена SCM + text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:' + text_enumeration_destroy_question: "{{count}} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚." + label_incoming_emails: ВходÑщи e-mail-и + label_generate_key: Генериране на ключ + setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и + setting_mail_handler_api_key: API ключ + text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите." + field_parent_title: РодителÑка Ñтраница + label_issue_watchers: Ðаблюдатели + setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване + button_quote: Цитат + setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори + notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑÐ¸Ñ + label_renamed: преименуван + label_copied: копиран + setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML) + permission_view_files: Разглеждане на файлове + permission_edit_issues: Редактиране на задачи + permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs + permission_manage_public_queries: Управление на публичните заÑвки + permission_add_issues: ДобавÑне на задачи permission_log_time: Log spent time - permission_view_changesets: View changesets - permission_view_time_entries: View spent time - permission_manage_versions: Manage versions - permission_manage_wiki: Manage wiki - permission_manage_categories: Manage issue categories - permission_protect_wiki_pages: Protect wiki pages - permission_comment_news: Comment news - permission_delete_messages: Delete messages - permission_select_project_modules: Select project modules - permission_manage_documents: Manage documents - permission_edit_wiki_pages: Edit wiki pages - permission_add_issue_watchers: Add watchers - permission_view_gantt: View gantt chart - permission_move_issues: Move issues - permission_manage_issue_relations: Manage issue relations - permission_delete_wiki_pages: Delete wiki pages - permission_manage_boards: Manage boards - permission_delete_wiki_pages_attachments: Delete attachments - permission_view_wiki_edits: View wiki history - permission_add_messages: Post messages - permission_view_messages: View messages - permission_manage_files: Manage files - permission_edit_issue_notes: Edit notes - permission_manage_news: Manage news - permission_view_calendar: View calendrier - permission_manage_members: Manage members - permission_edit_messages: Edit messages - permission_delete_issues: Delete issues - permission_view_issue_watchers: View watchers list - permission_manage_repository: Manage repository - permission_commit_access: Commit access - permission_browse_repository: Browse repository - permission_view_documents: View documents - permission_edit_project: Edit project - permission_add_issue_notes: Add notes - permission_save_queries: Save queries - permission_view_wiki_pages: View wiki - permission_rename_wiki_pages: Rename wiki pages - permission_edit_time_entries: Edit time logs - permission_edit_own_issue_notes: Edit own notes - setting_gravatar_enabled: Use Gravatar user icons - label_example: Example + permission_view_changesets: Разглеждане на changesets + permission_view_time_entries: Разглеждане на изразходваното време + permission_manage_versions: Управление на верÑиите + permission_manage_wiki: Управление на wiki + permission_manage_categories: Управление на категориите задачи + permission_protect_wiki_pages: Заключване на wiki Ñтраници + permission_comment_news: Коментиране на новини + permission_delete_messages: Изтриване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_select_project_modules: Избор на проектни модули + permission_manage_documents: Управление на документи + permission_edit_wiki_pages: Редактиране на wiki Ñтраници + permission_add_issue_watchers: ДобавÑне на наблюдатели + permission_view_gantt: Разглеждане на мрежов график + permission_move_issues: ПремеÑтване на задачи + permission_manage_issue_relations: Управление на връзките между задачите + permission_delete_wiki_pages: Изтриване на wiki Ñтраници + permission_manage_boards: Управление на boards + permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове + permission_view_wiki_edits: Разглеждане на wiki иÑÑ‚Ð¾Ñ€Ð¸Ñ + permission_add_messages: Публикуване на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_view_messages: Разглеждане на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_manage_files: Управление на файлове + permission_edit_issue_notes: Редактиране на бележки + permission_manage_news: Управление на новини + permission_view_calendar: Разглеждане на календари + permission_manage_members: Управление на членовете (на екип) + permission_edit_messages: Редактиране на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_delete_issues: Изтриване на задачи + permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸ + permission_manage_repository: Управление на хранилища + permission_commit_access: ПоверÑване + permission_browse_repository: Разглеждане на хранилища + permission_view_documents: Разглеждане на документи + permission_edit_project: Редактиране на проект + permission_add_issue_notes: Добаване на бележки + permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries) + permission_view_wiki_pages: Разглеждане на wiki + permission_rename_wiki_pages: Преименуване на wiki Ñтраници + permission_edit_time_entries: Редактиране на time logs + permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки + setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar + label_example: Пример text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." - permission_edit_own_messages: Edit own messages - permission_delete_own_messages: Delete own messages - label_user_activity: "{{value}}'s activity" - label_updated_time_by: "Updated by {{author}} {{age}} ago" - text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' - setting_diff_max_lines_displayed: Max number of diff lines displayed - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' + permission_edit_own_messages: Редактиране на ÑобÑтвени ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + permission_delete_own_messages: Изтриване на ÑобÑтвени ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ + label_user_activity: "ÐктивноÑÑ‚ на {{value}}" + label_updated_time_by: "Обновена от {{author}} преди {{age}}" + text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.' + setting_diff_max_lines_displayed: МакÑимален брой показани diff редове + text_plugin_assets_writable: Папката на приÑтавките е разрешена за Ð·Ð°Ð¿Ð¸Ñ + warning_attachments_not_saved: "{{count}} файла не бÑха запиÑани." + button_create_and_continue: Създаване и продължаване + text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред' label_display: Display field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration + setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла + setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline + field_watcher: Ðаблюдател + setting_openid: Рарешаване на OpenID вход и региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + label_login_with_open_id_option: или вход чрез OpenID + field_content: Съдържание + label_descending: ÐамалÑващ + label_sort: Сортиране + label_ascending: ÐараÑтващ + label_date_from_to: От {{start}} до {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image + text_wiki_page_destroy_question: Тази Ñтраница има {{descendants}} Ñтраници деца и descendant(s). Какво желаете да правите? + text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница + text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници + text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants + setting_password_min_length: Минимална дължина на парола + field_group_by: Групиране на резултатите по + mail_subject_wiki_content_updated: "Wiki Ñтраницата '{{id}}' не беше обновена" + label_wiki_content_added: Wiki Ñтраница беше добавена + mail_subject_wiki_content_added: "Wiki Ñтраницата '{{id}}' беше добавена" + mail_body_wiki_content_added: Wiki Ñтраницата '{{id}}' беше добавена от {{author}}. + label_wiki_content_updated: Wiki Ñтраница беше обновена + mail_body_wiki_content_updated: Wiki Ñтраницата '{{id}}' беше обновена от {{author}}. + permission_add_project: Създаване на проект + setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор + label_view_all_revisions: Разглеждане на вÑички ревизии + label_tag: ВерÑÐ¸Ñ + label_branch: работен вариант + error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта. + error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи"). + text_journal_changed: "{{label}} променен от {{old}} на {{new}}" + text_journal_set_to: "{{label}} уÑтановен на {{value}}" + text_journal_deleted: "{{label}} изтрит ({{old}})" + label_group_plural: Групи + label_group: Група + label_group_new: Ðова група + label_time_entry_plural: Използвано време + text_journal_added: "Добавено {{label}} {{value}}" + field_active: Ðктивен + enumeration_system_activity: СиÑтемна активноÑÑ‚ + permission_delete_issue_watchers: Изтриване на наблюдатели + version_status_closed: затворена + version_status_locked: заключена + version_status_open: отворена + error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново + label_user_anonymous: Ðнонимен + button_move_and_follow: ПремеÑтване и продължаване + setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект + setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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_version_sharing_hierarchy: С проектна Ð¹ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ + label_version_sharing_system: С вÑички проекти + label_version_sharing_descendants: С подпроекти + label_version_sharing_tree: С дърво на проектите + label_version_sharing_none: Ðе Ñподелен + error_can_not_archive_project: Този проект не може да бъде архивиран + button_duplicate: Дублиране + button_copy_and_follow: Копиране и продължаване + label_copy_source: Източник + setting_issue_done_ratio: ИзчиÑление на процента на готово задачи Ñ + setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑниетона задачите + error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен. + error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли). + setting_issue_done_ratio_issue_field: Използване на поле 'задача' + label_copy_same_as_target: Също като целта + label_copy_target: Цел + notice_issue_done_ratios_updated: Обновен процент на завършените задачи. + error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или Ñ€Ð¾Ð»Ñ + label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи + setting_start_of_week: Първи ден на Ñедмицата + permission_view_issues: Разглеждане на задачите + label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер + label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ {{value}} + label_api_access_key: API ключ за доÑтъп + label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди {{value}} + label_feeds_access_key: RSS access ключ + notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен. + setting_rest_api_enabled: Разрешаване на REST web ÑÑŠÑ€Ð²Ð¸Ñ + label_missing_api_access_key: ЛипÑващ API ключ + label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп + button_show: Показване + text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред). + setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове + 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 + label_board_locked: Заключена + permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници setting_cache_formatted_text: Cache formatted text - permission_manage_project_activities: Manage project activities - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + permission_manage_project_activities: Управление на дейноÑтите на проекта + error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача + label_profile: Профил + permission_manage_subtasks: Управление на подзадачите + field_parent_issue: РодителÑка задача + label_subtask_plural: Подзадачи + label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта + error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле + error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ ({{value}}) + error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита. + error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит. field_principal: Principal label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time + notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): {{errors}}." + text_zoom_out: ÐамалÑване + text_zoom_in: Увеличаване + notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log. + label_overall_spent_time: Общо употребено време field_time_entries: Log time + notice_not_authorized_archived_project: The project you're trying to access has been archived. + text_tip_issue_end_day: issue ending this day + field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + field_member_of_group: Assignee's group project_module_gantt: Gantt + text_are_you_sure_with_children: Delete issue and all child issues? + text_tip_issue_begin_end_day: issue beginning and ending this day + setting_default_notification_option: Default notification option project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + text_tip_issue_begin_day: issue beginning this day + label_user_mail_option_only_assigned: Only for things I am assigned to button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + field_assigned_to_role: Assignee's role + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/bs.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/bs.yml Fri Nov 19 13:24:41 2010 +0000 @@ -252,7 +252,6 @@ field_attr_lastname: Atribut za prezime field_attr_mail: Atribut za email field_onthefly: 'Kreiranje korisnika "On-the-fly"' - field_start_date: PoÄetak field_done_ratio: % Realizovano field_auth_source: Mod za authentifikaciju field_hide_mail: Sakrij moju email adresu @@ -676,7 +675,6 @@ label_search_titles_only: Pretraži samo naslove label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj na odabranim projektima..." - label_user_mail_option_none: "Samo za stvari koje ja gledam ili sam u njih ukljuÄen" label_user_mail_no_self_notified: "Ne želim notifikaciju za promjene koje sam ja napravio" label_registration_activation_by_email: aktivacija korisniÄkog raÄuna email-om label_registration_manual_activation: ruÄna aktivacija korisniÄkog raÄuna @@ -750,9 +748,9 @@ text_subprojects_destroy_warning: "Podprojekt(i): {{value}} će takoÄ‘e biti izbrisani." text_workflow_edit: Odaberite ulogu i podruÄje aktivnosti za ispravku toka promjena na aktivnosti text_are_you_sure: Da li ste sigurni ? - text_tip_task_begin_day: zadatak poÄinje danas - text_tip_task_end_day: zadatak zavrÅ¡ava danas - text_tip_task_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas + text_tip_issue_begin_day: zadatak poÄinje danas + text_tip_issue_end_day: zadatak zavrÅ¡ava danas + text_tip_issue_begin_end_day: zadatak zapoÄinje i zavrÅ¡ava danas text_project_identifier_info: 'Samo mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Nakon snimanja, identifikator se ne može mijenjati.' text_caracters_maximum: "maksimum {{count}} karaktera." text_caracters_minimum: "Dužina mora biti najmanje {{count}} znakova." @@ -830,12 +828,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -927,8 +925,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/ca.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/ca.yml Fri Nov 19 13:24:41 2010 +0000 @@ -195,10 +195,10 @@ mail_body_account_activation_request: "S'ha registrat un usuari nou ({{value}}). El seu compte està pendent d'aprovació:" mail_subject_reminder: "{{count}} assumptes venceran els següents {{days}} dies" mail_body_reminder: "{{count}} assumptes que teniu assignades venceran els següents {{days}} dies:" - mail_subject_wiki_content_added: "S'ha afegit la pà gina wiki «{{page}}»" - mail_body_wiki_content_added: "En {{author}} ha afegit la pà gina wiki «{{page}}»." - mail_subject_wiki_content_updated: "S'ha actualitzat la pà gina wiki «{{page}}»" - mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pà gina wiki «{{page}}»." + mail_subject_wiki_content_added: "S'ha afegit la pà gina wiki «{{id}}»" + mail_body_wiki_content_added: "En {{author}} ha afegit la pà gina wiki «{{id}}»." + mail_subject_wiki_content_updated: "S'ha actualitzat la pà gina wiki «{{id}}»" + mail_body_wiki_content_updated: "En {{author}} ha actualitzat la pà gina wiki «{{id}}»." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -264,7 +264,6 @@ field_attr_lastname: Atribut del cognom field_attr_mail: Atribut del correu electrònic field_onthefly: "Creació de l'usuari «al vol»" - field_start_date: Inici field_done_ratio: % realitzat field_auth_source: "Mode d'autenticació" field_hide_mail: "Oculta l'adreça de correu electrònic" @@ -725,7 +724,6 @@ label_search_titles_only: Cerca només en els tÃtols label_user_mail_option_all: "Per qualsevol esdeveniment en tots els meus projectes" label_user_mail_option_selected: "Per qualsevol esdeveniment en els projectes seleccionats..." - label_user_mail_option_none: "Només per les coses que vigilo o hi estic implicat" label_user_mail_no_self_notified: "No vull ser notificat pels canvis que faig jo mateix" label_registration_activation_by_email: activació del compte per correu electrònic label_registration_manual_activation: activació del compte manual @@ -842,9 +840,9 @@ text_journal_set_to: "{{label}} s'ha establert a {{value}}" text_journal_deleted: "{{label}} s'ha suprimit ({{old}})" text_journal_added: "S'ha afegit {{label}} {{value}}" - text_tip_task_begin_day: "tasca que s'inicia aquest dia" - text_tip_task_end_day: tasca que finalitza aquest dia - text_tip_task_begin_end_day: "tasca que s'inicia i finalitza aquest dia" + text_tip_issue_begin_day: "tasca que s'inicia aquest dia" + text_tip_issue_end_day: tasca que finalitza aquest dia + text_tip_issue_begin_end_day: "tasca que s'inicia i finalitza aquest dia" text_project_identifier_info: "Es permeten lletres en minúscules (a-z), números i guions.<br />Un cop desat, l'identificador no es pot modificar." text_caracters_maximum: "{{count}} carà cters com a mà xim." text_caracters_minimum: "Com a mÃnim ha de tenir {{count}} carà cters." @@ -916,8 +914,19 @@ enumeration_activities: Activitats (seguidor de temps) enumeration_system_activity: Activitat del sistema - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/cs.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/cs.yml Fri Nov 19 13:24:41 2010 +0000 @@ -24,8 +24,8 @@ time: "%H:%M" short: "%d %b %H:%M" long: "%B %d, %Y %H:%M" - am: "am" - pm: "pm" + am: "dop." + pm: "odp." datetime: distance_in_words: @@ -61,8 +61,8 @@ one: "vÃce než 1 rok" other: "vÃce než {{count}} roky" almost_x_years: - one: "almost 1 year" - other: "almost {{count}} years" + one: "témeÅ™ 1 rok" + other: "téměř {{count}} roky" number: format: @@ -116,7 +116,7 @@ greater_than_start_date: "musà být vÄ›tšà než poÄáteÄnà datum" not_same_project: "nepatřà stejnému projektu" circular_dependency: "Tento vztah by vytvoÅ™il cyklickou závislost" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jednÃm z jeho dÃlÄÃch úkolů" # Updated by Josef LiÅ¡ka <jl@chl.cz> # CZ translation by Maxim KruÅ¡ina | Massimo Filippi, s.r.o. | maxim@mxm.cz @@ -150,19 +150,19 @@ notice_successful_connection: Úspěšné pÅ™ipojenÃ. notice_file_not_found: Stránka na kterou se snažÃte zobrazit neexistuje nebo byla smazána. notice_locking_conflict: Údaje byly zmÄ›nÄ›ny jiným uživatelem. - notice_scm_error: Entry and/or revision doesn't exist in the repository. + notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři. notice_not_authorized: Nemáte dostateÄná práva pro zobrazenà této stránky. notice_email_sent: "Na adresu {{value}} byl odeslán email" notice_email_error: "PÅ™i odesÃlánà emailu nastala chyba ({{value}})" notice_feeds_access_key_reseted: Váš klÃÄ pro pÅ™Ãstup k RSS byl resetován. - notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + notice_failed_to_save_issues: "Chyba pÅ™i uloženà {{count}} úkolu(ů) z {{total}} vybraných: {{ids}}." notice_no_issue_selected: "Nebyl zvolen žádný úkol. ProsÃm, zvolte úkoly, které chcete editovat" notice_account_pending: "Váš úÄet byl vytvoÅ™en, nynà Äeká na schválenà administrátorem." notice_default_data_loaded: Výchozà konfigurace úspěšnÄ› nahrána. error_can_t_load_default_data: "Výchozà konfigurace nebyla nahrána: {{value}}" - error_scm_not_found: "Položka a/nebo revize neexistujà v repository." - error_scm_command_failed: "PÅ™i pokusu o pÅ™Ãstup k repository doÅ¡lo k chybÄ›: {{value}}" + error_scm_not_found: "Položka a/nebo revize neexistujà v repozitáři." + error_scm_command_failed: "PÅ™i pokusu o pÅ™Ãstup k repozitáři doÅ¡lo k chybÄ›: {{value}}" error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatřà k tomuto projektu' mail_subject_lost_password: "VaÅ¡e heslo ({{value}})" @@ -210,10 +210,10 @@ field_due_date: UzavÅ™Ãt do field_assigned_to: PÅ™iÅ™azeno field_priority: Priorita - field_fixed_version: PÅ™iÅ™azeno k verzi + field_fixed_version: CÃlová verze field_user: Uživatel field_role: Role - field_homepage: Homepage + field_homepage: Domovská stránka field_is_public: VeÅ™ejný field_parent: NadÅ™azený projekt field_is_in_roadmap: Úkoly zobrazené v plánu @@ -237,7 +237,6 @@ field_attr_lastname: PÅ™Ãjemnà (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytvářenà uživatelů - field_start_date: ZaÄátek field_done_ratio: % Hotovo field_auth_source: AutentifikaÄnà mód field_hide_mail: Nezobrazovat můj email @@ -265,18 +264,18 @@ setting_app_subtitle: Podtitulek aplikace setting_welcome_text: UvÃtacà text setting_default_language: Výchozà jazyk - setting_login_required: Auten. vyžadována + setting_login_required: Autentifikace vyžadována setting_self_registration: Povolena automatická registrace setting_attachment_max_size: Maximálnà velikost pÅ™Ãlohy setting_issues_export_limit: Limit pro export úkolů setting_mail_from: OdesÃlat emaily z adresy setting_bcc_recipients: PÅ™Ãjemci skryté kopie (bcc) - setting_host_name: Host name + setting_host_name: Jméno serveru setting_text_formatting: Formátovánà textu - setting_wiki_compression: Komperese historie Wiki - setting_feeds_limit: Feed content limit + setting_wiki_compression: Komprese historie Wiki + setting_feeds_limit: Limit obsahu pÅ™ÃspÄ›vků setting_default_projects_public: Nové projekty nastavovat jako veÅ™ejné - setting_autofetch_changesets: Autofetch commits + setting_autofetch_changesets: Automaticky stahovat commity setting_sys_api_enabled: Povolit WS pro správu repozitory setting_commit_ref_keywords: KlÃÄová slova pro odkazy setting_commit_fix_keywords: KlÃÄová slova pro uzavÅ™enà @@ -290,8 +289,8 @@ setting_protocol: Protokol setting_per_page_options: Povolené poÄty řádků na stránce setting_user_format: Formát zobrazenà uživatele - setting_activity_days_default: Days displayed on project activity - setting_display_subprojects_issues: Display subprojects issues on main projects by default + setting_activity_days_default: Dny zobrazené v Äinnosti projektu + setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavnÃm projektu project_module_issue_tracking: Sledovánà úkolů project_module_time_tracking: Sledovánà Äasu @@ -299,7 +298,7 @@ project_module_documents: Dokumenty project_module_files: Soubory project_module_wiki: Wiki - project_module_repository: Repository + project_module_repository: Repozitář project_module_boards: Diskuse label_user: Uživatel @@ -309,16 +308,16 @@ label_project_new: Nový projekt label_project_plural: Projekty label_x_projects: - zero: no projects - one: 1 project - other: "{{count}} projects" + zero: žádné projekty + one: 1 projekt + other: "{{count}} projekty(ů)" label_project_all: VÅ¡echny projekty label_project_latest: Poslednà projekty label_issue: Úkol label_issue_new: Nový úkol label_issue_plural: Úkoly label_issue_view_all: VÅ¡echny úkoly - label_issues_by: "Úkoly od uživatele {{value}}" + label_issues_by: "Úkoly podle {{value}}" label_issue_added: Úkol pÅ™idán label_issue_updated: Úkol aktualizován label_document: Dokument @@ -335,7 +334,7 @@ label_tracker: Fronta label_tracker_plural: Fronty label_tracker_new: Nová fronta - label_workflow: Workflow + label_workflow: PrůbÄ›h práce label_issue_status: Stav úkolu label_issue_status_plural: Stavy úkolů label_issue_status_new: Nový stav @@ -378,14 +377,14 @@ label_list: Seznam label_date: Datum label_integer: Celé ÄÃslo - label_float: Desetiné ÄÃslo + label_float: Desetinné ÄÃslo label_boolean: Ano/Ne label_string: Text label_text: Dlouhý text label_attribute: Atribut label_attribute_plural: Atributy - label_download: "{{count}} Download" - label_download_plural: "{{count}} Downloads" + label_download: "{{count}} staženÃ" + label_download_plural: "{{count}} staženÃ" label_no_data: Žádné položky label_change_status: ZmÄ›nit stav label_history: Historie @@ -416,17 +415,17 @@ label_closed_issues: uzavÅ™ený label_closed_issues_plural: uzavÅ™ené label_x_open_issues_abbr_on_total: - zero: 0 open / {{total}} - one: 1 open / {{total}} - other: "{{count}} open / {{total}}" + zero: 0 otevÅ™ených / {{total}} + one: 1 otevÅ™ený / {{total}} + other: "{{count}} otevÅ™ených / {{total}}" label_x_open_issues_abbr: - zero: 0 open - one: 1 open - other: "{{count}} open" + zero: 0 otevÅ™ených + one: 1 otevÅ™ený + other: "{{count}} otevÅ™ených" label_x_closed_issues_abbr: - zero: 0 closed - one: 1 closed - other: "{{count}} closed" + zero: 0 uzavÅ™ených + one: 1 uzavÅ™ený + other: "{{count}} uzavÅ™ených" label_total: Celkem label_permissions: Práva label_current_status: Aktuálnà stav @@ -450,9 +449,9 @@ label_comment: Komentář label_comment_plural: Komentáře label_x_comments: - zero: no comments - one: 1 comment - other: "{{count}} comments" + zero: žádné komentáře + one: 1 komentář + other: "{{count}} komentářů" label_comment_add: PÅ™idat komentáře label_comment_added: Komentář pÅ™idán label_comment_delete: Odstranit komentář @@ -482,8 +481,8 @@ label_contains: obsahuje label_not_contains: neobsahuje label_day_plural: dny - label_repository: Repository - label_repository_plural: Repository + label_repository: Repozitář + label_repository_plural: Repozitáře label_browse: Procházet label_modification: "{{count}} zmÄ›na" label_modification_plural: "{{count}} zmÄ›n" @@ -532,7 +531,7 @@ label_diff_inline: uvnitÅ™ label_diff_side_by_side: vedle sebe label_options: Nastavenà - label_copy_workflow_from: KopÃrovat workflow z + label_copy_workflow_from: KopÃrovat průbÄ›h práce z label_permissions_report: PÅ™ehled práv label_watched_issues: Sledované úkoly label_related_issues: SouvisejÃcà úkoly @@ -553,7 +552,7 @@ label_stay_logged_in: Zůstat pÅ™ihlášený label_disabled: zakázán label_show_completed_versions: Ukázat dokonÄené verze - label_me: mÄ› + label_me: já label_board: Fórum label_board_new: Nové fórum label_board_plural: Fóra @@ -576,18 +575,17 @@ label_module_plural: Moduly label_added_time_by: "PÅ™idáno uživatelem {{author}} pÅ™ed {{age}}" label_updated_time: "Aktualizováno pÅ™ed {{value}}" - label_jump_to_a_project: Zvolit projekt... + label_jump_to_a_project: Vyberte projekt... label_file_plural: Soubory label_changeset_plural: Changesety label_default_columns: Výchozà sloupce label_no_change_option: (beze zmÄ›ny) - label_bulk_edit_selected_issues: Bulk edit selected issues + label_bulk_edit_selected_issues: Hromadná úprava vybraných úkolů label_theme: Téma label_default: Výchozà label_search_titles_only: Vyhledávat pouze v názvech label_user_mail_option_all: "Pro vÅ¡echny události vÅ¡ech mých projektů" label_user_mail_option_selected: "Pro vÅ¡echny události vybraných projektů..." - label_user_mail_option_none: "Pouze pro události které sleduji nebo které se mne týkajÃ" label_user_mail_no_self_notified: "NezasÃlat informace o mnou vytvoÅ™ených zmÄ›nách" label_registration_activation_by_email: aktivace úÄtu emailem label_registration_manual_activation: manuálnà aktivace úÄtu @@ -600,7 +598,7 @@ label_scm: SCM label_plugins: Doplňky label_ldap_authentication: Autentifikace LDAP - label_downloads_abbr: D/L + label_downloads_abbr: Staž. label_optional_description: Volitelný popis label_add_another_file: PÅ™idat dalšà soubor label_preferences: Nastavenà @@ -653,33 +651,33 @@ text_regexp_info: napÅ™. ^[A-Z0-9]+$ text_min_max_length_info: 0 znamená bez limitu text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a vÅ¡echna souvisejÃcà data ? - text_workflow_edit: Vyberte roli a frontu k editaci workflow + text_workflow_edit: Vyberte roli a frontu k editaci průbÄ›hu práce text_are_you_sure: Jste si jisti? - text_tip_task_begin_day: úkol zaÄÃná v tento den - text_tip_task_end_day: úkol konÄà v tento den - text_tip_task_begin_end_day: úkol zaÄÃná a konÄà v tento den + text_tip_issue_begin_day: úkol zaÄÃná v tento den + text_tip_issue_end_day: úkol konÄà v tento den + text_tip_issue_begin_end_day: úkol zaÄÃná a konÄà v tento den text_project_identifier_info: 'Jsou povolena malá pÃsmena (a-z), ÄÃsla a pomlÄky.<br />Po uloženà již nenà možné identifikátor zmÄ›nit.' text_caracters_maximum: "{{count}} znaků maximálnÄ›." text_caracters_minimum: "Musà být alespoň {{count}} znaků dlouhé." text_length_between: "Délka mezi {{min}} a {{max}} znaky." - text_tracker_no_workflow: Pro tuto frontu nenà definován žádný workflow + text_tracker_no_workflow: Pro tuto frontu nenà definován žádný průbÄ›h práce text_unallowed_characters: Nepovolené znaky text_comma_separated: Povoleno vÃce hodnot (oddÄ›lÄ›né Äárkou). - text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages + text_issues_ref_in_commit_messages: Odkazovánà a opravovánà úkolů ve zprávách commitů text_issue_added: "Úkol {{id}} byl vytvoÅ™en uživatelem {{author}}." text_issue_updated: "Úkol {{id}} byl aktualizován uživatelem {{author}}." - text_wiki_destroy_confirmation: Opravdu si pÅ™ejete odstranit tuto WIKI a celý jejà obsah? + text_wiki_destroy_confirmation: Opravdu si pÅ™ejete odstranit tuto Wiki a celý jejà obsah? text_issue_category_destroy_question: "NÄ›které úkoly ({{count}}) jsou pÅ™iÅ™azeny k této kategorii. Co s nimi chtete udÄ›lat?" text_issue_category_destroy_assignments: ZruÅ¡it pÅ™iÅ™azenà ke kategorii text_issue_category_reassign_to: PÅ™iÅ™adit úkoly do této kategorie text_user_mail_option: "U projektů, které nebyly vybrány, budete dostávat oznámenà pouze o vaÅ¡ich Äi o sledovaných položkách (napÅ™. o položkách jejichž jste autor nebo ke kterým jste pÅ™iÅ™azen(a))." - text_no_configuration_data: "Role, fronty, stavy úkolů ani workflow nebyly zatÃm nakonfigurovány.\nVelice doporuÄujeme nahrát výchozà konfiguraci.Po té si můžete vÅ¡e upravit" + text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatÃm nakonfigurovány.\nVelice doporuÄujeme nahrát výchozà konfiguraci. Po té si můžete vÅ¡e upravit" text_load_default_configuration: Nahrát výchozà konfiguraci text_status_changed_by_changeset: "Použito v changesetu {{value}}." text_issues_destroy_confirmation: 'Opravdu si pÅ™ejete odstranit vÅ¡echny zvolené úkoly?' text_select_project_modules: 'Aktivnà moduly v tomto projektu:' text_default_administrator_account_changed: Výchozà nastavenà administrátorského úÄtu zmÄ›nÄ›no - text_file_repository_writable: Povolen zápis do repository + text_file_repository_writable: Povolen zápis do adresáře ukládánà souborů text_rmagick_available: RMagick k dispozici (volitelné) text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno {{hours}} práce. Co chete udÄ›lat?" text_destroy_time_entries: Odstranit evidované hodiny. @@ -693,7 +691,7 @@ default_tracker_feature: Požadavek default_tracker_support: Podpora default_issue_status_new: Nový - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Ve vývoji default_issue_status_resolved: VyÅ™eÅ¡ený default_issue_status_feedback: ÄŒeká se default_issue_status_closed: UzavÅ™ený @@ -705,7 +703,7 @@ default_priority_high: Vysoká default_priority_urgent: Urgentnà default_priority_immediate: Okamžitá - default_activity_design: Design + default_activity_design: Návhr default_activity_development: Vývoj enumeration_issue_priorities: Priority úkolů @@ -718,8 +716,8 @@ mail_body_reminder: "{{count}} úkol(ů), které máte pÅ™iÅ™azeny má termÃn bÄ›hem nÄ›kolik dnà ({{days}}):" mail_subject_reminder: "{{count}} úkol(ů) má termÃn bÄ›hem nÄ›kolik dnà ({{days}})" text_user_wrote: "{{value}} napsal:" - label_duplicated_by: duplicated by - setting_enabled_scm: Povoleno SCM + label_duplicated_by: duplikováno od + setting_enabled_scm: Povolené SCM text_enumeration_category_reassign_to: 'PÅ™eÅ™adit je do této:' text_enumeration_destroy_question: "NÄ›kolik ({{count}}) objektů je pÅ™iÅ™azeno k této hodnotÄ›." label_incoming_emails: PÅ™Ãchozà e-maily @@ -745,22 +743,22 @@ permission_view_changesets: Zobrazovánà sady zmÄ›n permission_view_time_entries: Zobrazenà stráveného Äasu permission_manage_versions: Spravovánà verzà - permission_manage_wiki: Spravovánà wiki + permission_manage_wiki: Spravovánà Wiki permission_manage_categories: Spravovánà kategorià úkolů - permission_protect_wiki_pages: ZabezpeÄenà wiki stránek + permission_protect_wiki_pages: ZabezpeÄenà Wiki stránek permission_comment_news: Komentovánà novinek permission_delete_messages: Mazánà zpráv permission_select_project_modules: VýbÄ›r modulů projektu permission_manage_documents: Správa dokumentů - permission_edit_wiki_pages: Upravovánà stránek wiki + permission_edit_wiki_pages: Upravovánà stránek Wiki permission_add_issue_watchers: PÅ™idánà sledujÃcÃch uživatelů permission_view_gantt: Zobrazené Ganttova diagramu permission_move_issues: PÅ™esouvánà úkolů permission_manage_issue_relations: Spravovánà vztahů mezi úkoly - permission_delete_wiki_pages: Mazánà stránek na wiki + permission_delete_wiki_pages: Mazánà stránek na Wiki permission_manage_boards: Správa diskusnÃch fór permission_delete_wiki_pages_attachments: Mazánà pÅ™Ãloh - permission_view_wiki_edits: ProhlÞenà historie wiki + permission_view_wiki_edits: ProhlÞenà historie Wiki permission_add_messages: PosÃlánà zpráv permission_view_messages: ProhlÞenà zpráv permission_manage_files: Spravovánà souborů @@ -772,26 +770,26 @@ permission_delete_issues: Mazánà úkolů permission_view_issue_watchers: Zobrazenà seznamu sledujÃcÃh uživatelů permission_manage_repository: Spravovánà repozitáře - permission_commit_access: Commit access + permission_commit_access: Commit pÅ™Ãstup permission_browse_repository: Procházenà repozitáře permission_view_documents: ProhlÞenà dokumentů permission_edit_project: Úprava projektů permission_add_issue_notes: PÅ™idávánà poznámek permission_save_queries: Ukládánà dotazů - permission_view_wiki_pages: ProhlÞenà wiki - permission_rename_wiki_pages: PÅ™ejmenovávánà wiki stránek + permission_view_wiki_pages: ProhlÞenà Wiki + permission_rename_wiki_pages: PÅ™ejmenovávánà Wiki stránek permission_edit_time_entries: Upravovánà záznamů o stráveném Äasu permission_edit_own_issue_notes: Upravovánà vlastnÃch poznámek setting_gravatar_enabled: PoužÃt uživatelské ikony Gravatar label_example: PÅ™Ãklad - text_repository_usernames_mapping: "Vybrat nebo upravit mapovánà mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživateslkým jménem a uživatelským jménem v repozitáři jsou mapovanà automaticky." + text_repository_usernames_mapping: "Vybrat nebo upravit mapovánà mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovanà automaticky." permission_edit_own_messages: Upravit vlastnà zprávy permission_delete_own_messages: Smazat vlastnà zprávy label_user_activity: "Aktivita uživatele: {{value}}" label_updated_time_by: "Akutualizováno: {{author}} pÅ™ed: {{age}}" text_diff_truncated: '... RozdÃlový soubor je zkrácen, protože jeho délka pÅ™esahuje max. limit.' setting_diff_max_lines_displayed: Maximálnà poÄet zobrazenách řádků rozdÃlů - text_plugin_assets_writable: Plugin assets directory writable + text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets warning_attachments_not_saved: "{{count}} soubor(ů) nebylo možné uložit." button_create_and_continue: VytvoÅ™it a pokraÄovat text_custom_field_possible_values_info: 'Každá hodnota na novém řádku' @@ -810,111 +808,122 @@ label_date_from_to: Od {{start}} do {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions + text_wiki_page_destroy_question: Tato stránka má {{descendants}} podstránek a potomků. Co chcete udÄ›lat? + text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi + text_wiki_page_nullify_children: Ponechat podstránky jako koÅ™enové stránky + text_wiki_page_destroy_children: Smazat podstránky a vÅ¡echny jejich potomky + setting_password_min_length: Minimálnà délka hesla + field_group_by: Seskupovat výsledky podle + mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována" + label_wiki_content_added: Wiki stránka pÅ™idána + mail_subject_wiki_content_added: "'{{id}}' Wiki stránka byla pÅ™idána" + mail_body_wiki_content_added: "'{{id}}' Wiki stránka byla pÅ™idána od {{author}}." + label_wiki_content_updated: Wiki stránka aktualizována + mail_body_wiki_content_updated: "'{{id}}' Wiki stránka byla aktualizována od {{author}}." + permission_add_project: VytvoÅ™it projekt + setting_new_project_user_role_id: Role pÅ™iÅ™azená uživateli bez práv administrátora, který projekt vytvoÅ™il + label_view_all_revisions: Zobrazit vÅ¡echny revize label_tag: Tag label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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 + error_no_tracker_in_project: Žádná fronta nebyla pÅ™iÅ™azena tomuto projektu. ProsÃm zkontroluje nastavenà projektu. + error_no_default_issue_status: Nenà nastaven výchozà stav úkolu. ProsÃm zkontrolujte nastavenà ("Administrace -> Stavy úkolů"). + text_journal_changed: "{{label}} zmÄ›nÄ›n z {{old}} na {{new}}" + text_journal_set_to: "{{label}} nastaven na {{value}}" + text_journal_deleted: "{{label}} smazán ({{old}})" + label_group_plural: Skupiny + label_group: Skupina + label_group_new: Nová skupina + label_time_entry_plural: Strávený Äas + text_journal_added: "{{label}} {{value}} pÅ™idán" + field_active: Aktivnà + enumeration_system_activity: Systémová aktivita + permission_delete_issue_watchers: Smazat pÅ™ihlÞejÃcà + version_status_closed: zavÅ™ený + version_status_locked: uzamÄený + version_status_open: otevÅ™ený + error_can_not_reopen_issue_on_closed_version: Úkol pÅ™iÅ™azený k uzavÅ™ené verzi nemůže být znovu otevÅ™en + label_user_anonymous: Anonymnà + button_move_and_follow: PÅ™esunout a následovat + setting_default_projects_modules: Výchozà zapnutné moduly pro nový projekt + setting_gravatar_default: Výchozà Gravatar + field_sharing: SdÃlenà + label_version_sharing_hierarchy: S hierarchià projektu + label_version_sharing_system: Se vÅ¡emi projekty + label_version_sharing_descendants: S podprojekty + label_version_sharing_tree: Se stromem projektu + label_version_sharing_none: NesdÃleno + error_can_not_archive_project: Tento projekt nemůže být archivován + button_duplicate: Duplikát + button_copy_and_follow: KopÃrovat a následovat + label_copy_source: Zdroj + setting_issue_done_ratio: SpoÄÃtat koeficient dokonÄenà úkolu s + setting_issue_done_ratio_issue_status: PoužÃt stav úkolu + error_issue_done_ratios_not_updated: Koeficient dokonÄenà úkolu nebyl aktualizován. + error_workflow_copy_target: ProsÃm vyberte cÃlovou frontu(y) a roly(e) + setting_issue_done_ratio_issue_field: PoužÃt pole úkolu + label_copy_same_as_target: Stejný jako cÃl + label_copy_target: CÃl + notice_issue_done_ratios_updated: Koeficienty dokonÄenà úkolu byly aktualizovány. + error_workflow_copy_source: ProsÃm vyberte zdrojovou frontu nebo roly + label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄenà úkolů + setting_start_of_week: ZaÄÃnat kalendáře + permission_view_issues: Zobrazit úkoly + label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou + label_revision_id: Revize {{value}} + label_api_access_key: API pÅ™Ãstupový klÃÄ + label_api_access_key_created_on: API pÅ™Ãstupový klÃÄ vytvoÅ™en {{value}} + label_feeds_access_key: RSS pÅ™Ãstupový klÃÄ + notice_api_access_key_reseted: Váš API pÅ™Ãstupový klÃÄ byl resetován. + setting_rest_api_enabled: Zapnout službu REST + label_missing_api_access_key: ChybÄ›jÃcà pÅ™Ãstupový klÃÄ API + label_missing_feeds_access_key: ChybÄ›jÃcà pÅ™Ãstupový klÃÄ RSS + button_show: Zobrazit + text_line_separated: VÃce hodnot povoleno (jeden řádek pro každou hodnotu). + setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z tÄ›chto řádků + permission_add_subprojects: VytvoÅ™it podprojekty + label_subproject_new: Nový podprojekt 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_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 - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. - field_principal: Principal - label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time - field_time_entries: Log time + Chystáte se odebrat si nÄ›která nebo vÅ¡echny svá oprávnÄ›nà a potom již nemusÃte být schopni upravit tento projekt. + Opravdu chcete pokraÄovat? + label_close_versions: ZavÅ™Ãt dokonÄené verze + label_board_sticky: Nálepka + label_board_locked: UzamÄeno + permission_export_wiki_pages: Exportovat Wiki stránky + setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávacà pamÄ›ti + permission_manage_project_activities: Spravovat aktivity projektu + error_unable_delete_issue_status: Nelze smazat stavy úkolů + label_profile: Profil + permission_manage_subtasks: Spravovat podúkoly + field_parent_issue: RodiÄovský úkol + label_subtask_plural: Podúkol + label_project_copy_notifications: Odeslat email oznámenà v průbÄ›hu kopie projektu + error_can_not_delete_custom_field: Nelze smazat volitelné pole + error_unable_to_connect: Nelze se pÅ™ipojit ({{value}}) + error_can_not_remove_role: Tato role je právÄ› použÃvaná a nelze ji smazat. + error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán. + field_principal: Hlavnà + label_my_page_block: Bloky na mé stránce + notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): {{errors}}." + text_zoom_out: Oddálit + text_zoom_in: PÅ™iblÞit + notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu. + label_overall_spent_time: CelkovÄ› strávený Äas + field_time_entries: Zaznamenaný Äas project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Kalendář + button_edit_associated_wikipage: "Upravit pÅ™iÅ™azenou Wiki stránku: {{page_title}}" + text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů? + field_text: Textové pole + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/da.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/da.yml Fri Nov 19 13:24:41 2010 +0000 @@ -250,7 +250,6 @@ field_attr_lastname: Efternavn attribut field_attr_mail: Email attribut field_onthefly: løbende brugeroprettelse - field_start_date: Start field_done_ratio: % Færdig field_auth_source: Sikkerhedsmetode field_hide_mail: Skjul min email @@ -594,7 +593,6 @@ label_search_titles_only: Søg kun i titler label_user_mail_option_all: "For alle hændelser på mine projekter" label_user_mail_option_selected: "For alle hændelser på de valgte projekter..." - label_user_mail_option_none: "Kun for ting jeg overvåger eller jeg er involveret i" label_user_mail_no_self_notified: "Jeg ønsker ikke besked om ændring foretaget af mig selv" label_registration_activation_by_email: kontoaktivering på email label_registration_manual_activation: manuel kontoaktivering @@ -657,9 +655,9 @@ text_project_destroy_confirmation: Er du sikker på at du vil slette dette projekt og alle relaterede data? text_workflow_edit: Vælg en rolle samt en type, for at redigere arbejdsgangen text_are_you_sure: Er du sikker? - text_tip_task_begin_day: opgaven begynder denne dag - text_tip_task_end_day: opaven slutter denne dag - text_tip_task_begin_end_day: opgaven begynder og slutter denne dag + text_tip_issue_begin_day: opgaven begynder denne dag + text_tip_issue_end_day: opaven slutter denne dag + text_tip_issue_begin_end_day: opgaven begynder og slutter denne dag text_project_identifier_info: 'Små bogstaver (a-z), numre og bindestreg er tilladt.<br />Denne er en unik identifikation for projektet, og kan defor ikke rettes senere.' text_caracters_maximum: "max {{count}} karakterer." text_caracters_minimum: "Skal være mindst {{count}} karakterer lang." @@ -832,12 +830,12 @@ text_wiki_page_destroy_children: Slet undersider ogalle deres afledte sider. setting_password_min_length: Mindste længde på kodeord field_group_by: Gruppér resultater efter - mail_subject_wiki_content_updated: "'{{page}}' wikisiden er blevet opdateret" + mail_subject_wiki_content_updated: "'{{id}}' wikisiden er blevet opdateret" label_wiki_content_added: Wiki side tilføjet - mail_subject_wiki_content_added: "'{{page}}' wikisiden er blevet tilføjet" - mail_body_wiki_content_added: The '{{page}}' wikiside er blevet tilføjet af {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wikisiden er blevet tilføjet" + mail_body_wiki_content_added: The '{{id}}' wikiside er blevet tilføjet af {{author}}. label_wiki_content_updated: Wikiside opdateret - mail_body_wiki_content_updated: Wikisiden '{{page}}' er blevet opdateret af {{author}}. + mail_body_wiki_content_updated: Wikisiden '{{id}}' er blevet opdateret af {{author}}. permission_add_project: Opret projekt setting_new_project_user_role_id: Denne rolle gives til en bruger, som ikke er administrator, og som opretter et projekt label_view_all_revisions: Se alle revisioner @@ -929,8 +927,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/de.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/de.yml Fri Nov 19 13:24:41 2010 +0000 @@ -211,10 +211,10 @@ mail_body_account_activation_request: "Ein neuer Benutzer ({{value}}) hat sich registriert. Sein Konto wartet auf Ihre Genehmigung:" mail_subject_reminder: "{{count}} Tickets müssen in den nächsten {{days}} Tagen abgegeben werden" mail_body_reminder: "{{count}} Tickets, die Ihnen zugewiesen sind, müssen in den nächsten {{days}} Tagen abgegeben werden:" - mail_subject_wiki_content_added: "Wiki-Seite '{{page}}' hinzugefügt" - mail_body_wiki_content_added: "Die Wiki-Seite '{{page}}' wurde von {{author}} hinzugefügt." - mail_subject_wiki_content_updated: "Wiki-Seite '{{page}}' erfolgreich aktualisiert" - mail_body_wiki_content_updated: "Die Wiki-Seite '{{page}}' wurde von {{author}} aktualisiert." + mail_subject_wiki_content_added: "Wiki-Seite '{{id}}' hinzugefügt" + mail_body_wiki_content_added: "Die Wiki-Seite '{{id}}' wurde von {{author}} hinzugefügt." + mail_subject_wiki_content_updated: "Wiki-Seite '{{id}}' erfolgreich aktualisiert" + mail_body_wiki_content_updated: "Die Wiki-Seite '{{id}}' wurde von {{author}} aktualisiert." gui_validation_error: 1 Fehler gui_validation_error_plural: "{{count}} Fehler" @@ -280,7 +280,6 @@ field_attr_lastname: Name-Attribut field_attr_mail: E-Mail-Attribut field_onthefly: On-the-fly-Benutzererstellung - field_start_date: Beginn field_done_ratio: % erledigt field_auth_source: Authentifizierungs-Modus field_hide_mail: E-Mail-Adresse nicht anzeigen @@ -741,7 +740,6 @@ label_search_titles_only: Nur Titel durchsuchen label_user_mail_option_all: "Für alle Ereignisse in all meinen Projekten" label_user_mail_option_selected: "Für alle Ereignisse in den ausgewählten Projekten..." - label_user_mail_option_none: "Nur für Dinge, die ich beobachte oder an denen ich beteiligt bin" label_user_mail_no_self_notified: "Ich möchte nicht über Änderungen benachrichtigt werden, die ich selbst durchführe." label_registration_activation_by_email: Kontoaktivierung durch E-Mail label_registration_manual_activation: Manuelle Kontoaktivierung @@ -792,6 +790,8 @@ label_profile: Profil label_subtask_plural: Unteraufgaben label_project_copy_notifications: Sende Mailbenachrichtigungen beim Kopieren des Projekts. + label_principal_search: "Nach Benutzer oder Gruppe suchen:" + label_user_search: "Nach Benutzer suchen:" button_login: Anmelden button_submit: OK @@ -800,7 +800,7 @@ button_uncheck_all: Alles abwählen button_delete: Löschen button_create: Anlegen - button_create_and_continue: Anlegen + nächstes Ticket + button_create_and_continue: Anlegen und weiter button_test: Testen button_edit: Bearbeiten button_edit_associated_wikipage: "Zugehörige Wikiseite bearbeiten: {{page_title}}" @@ -832,7 +832,7 @@ button_copy: Kopieren button_copy_and_follow: Kopieren und Ticket anzeigen button_annotate: Annotieren - button_update: Aktualisieren + button_update: Bearbeiten button_configure: Konfigurieren button_quote: Zitieren button_duplicate: Duplizieren @@ -859,9 +859,9 @@ text_journal_set_to: "{{label}} wurde auf {{value}} gesetzt" text_journal_deleted: "{{label}} {{old}} wurde gelöscht" text_journal_added: "{{label}} {{value}} wurde hinzugefügt" - text_tip_task_begin_day: Aufgabe, die an diesem Tag beginnt - text_tip_task_end_day: Aufgabe, die an diesem Tag endet - text_tip_task_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet + text_tip_issue_begin_day: Aufgabe, die an diesem Tag beginnt + text_tip_issue_end_day: Aufgabe, die an diesem Tag endet + text_tip_issue_begin_end_day: Aufgabe, die an diesem Tag beginnt und endet text_project_identifier_info: 'Kleinbuchstaben (a-z), Ziffern und Bindestriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geändert werden.' text_caracters_maximum: "Max. {{count}} Zeichen." text_caracters_minimum: "Muss mindestens {{count}} Zeichen lang sein." @@ -933,7 +933,16 @@ enumeration_activities: Aktivitäten (Zeiterfassung) enumeration_system_activity: System-Aktivität - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + notice_not_authorized_archived_project: The project you're trying to access has been archived. + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + field_start_date: Start date + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/el.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/el.yml Fri Nov 19 13:24:41 2010 +0000 @@ -179,10 +179,10 @@ mail_body_account_activation_request: "'Ένας νÎος χÏήστης ({{value}}) Îχει εγγÏαφεί. Ο λογαÏιασμός είναι σε στάδιο αναμονής της ÎγκÏισης σας:" mail_subject_reminder: "{{count}} θÎμα(τα) με Ï€Ïοθεσμία στις επόμενες {{days}} ημÎÏες" mail_body_reminder: "{{count}}θÎμα(τα) που Îχουν ανατεθεί σε σας, με Ï€Ïοθεσμία στις επόμενες {{days}} ημÎÏες:" - mail_subject_wiki_content_added: "'Ï€ÏοστÎθηκε η σελίδα wiki {{page}}' " - mail_body_wiki_content_added: "Η σελίδα wiki '{{page}}' Ï€ÏοστÎθηκε από τον {{author}}." - mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{page}}' " - mail_body_wiki_content_updated: "Η σελίδα wiki '{{page}}' ενημεÏώθηκε από τον {{author}}." + mail_subject_wiki_content_added: "'Ï€ÏοστÎθηκε η σελίδα wiki {{id}}' " + mail_body_wiki_content_added: "Η σελίδα wiki '{{id}}' Ï€ÏοστÎθηκε από τον {{author}}." + mail_subject_wiki_content_updated: "'ενημεÏώθηκε η σελίδα wiki {{id}}' " + mail_body_wiki_content_updated: "Η σελίδα wiki '{{id}}' ενημεÏώθηκε από τον {{author}}." gui_validation_error: 1 σφάλμα gui_validation_error_plural: "{{count}} σφάλματα" @@ -247,7 +247,6 @@ field_attr_lastname: Ιδιότητα επωνÏμου field_attr_mail: Ιδιότητα email field_onthefly: Άμεση δημιουÏγία χÏήστη - field_start_date: Εκκίνηση field_done_ratio: % επιτεÏχθη field_auth_source: ΤÏόπος πιστοποίησης field_hide_mail: ΑπόκÏυψη διεÏθυνσης email @@ -678,7 +677,6 @@ label_search_titles_only: Αναζήτηση τίτλων μόνο label_user_mail_option_all: "Για όλες τις εξελίξεις σε όλα τα ÎÏγα μου" label_user_mail_option_selected: "Για όλες τις εξελίξεις μόνο στα επιλεγμÎνα ÎÏγα..." - label_user_mail_option_none: "Μόνο για Ï€Ïάγματα που παÏακολουθώ ή συμμετÎχω ενεÏγά" label_user_mail_no_self_notified: "Δεν θÎλω να ειδοποιοÏμαι για τις δικÎÏ‚ μου αλλαγÎÏ‚" label_registration_activation_by_email: ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Î¼Îµ email label_registration_manual_activation: χειÏοκίνητη ενεÏγοποίηση λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï @@ -761,9 +759,9 @@ text_subprojects_destroy_warning: "Επίσης το(α) επιμÎÏους ÎÏγο(α): {{value}} θα διαγÏαφοÏν." text_workflow_edit: ΕπιλÎξτε Îνα Ïόλο και Îναν ανιχνευτή για να επεξεÏγαστείτε τη Ïοή εÏγασίας text_are_you_sure: Είστε σίγουÏος ; - text_tip_task_begin_day: καθήκοντα που ξεκινάνε σήμεÏα - text_tip_task_end_day: καθήκοντα που τελειώνουν σήμεÏα - text_tip_task_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα + text_tip_issue_begin_day: καθήκοντα που ξεκινάνε σήμεÏα + text_tip_issue_end_day: καθήκοντα που τελειώνουν σήμεÏα + text_tip_issue_begin_end_day: καθήκοντα που ξεκινάνε και τελειώνουν σήμεÏα text_project_identifier_info: 'ΕπιτÏÎπονται μόνο μικÏά πεζά γÏάμματα (a-z), αÏιθμοί και παÏλες. <br /> Μετά την αποθήκευση, το αναγνωÏιστικό δεν μποÏεί να αλλάξει.' text_caracters_maximum: "μÎγιστος αÏιθμός {{count}} χαÏακτήÏες." text_caracters_minimum: "Î ÏÎπει να πεÏιÎχει τουλάχιστον {{count}} χαÏακτήÏες." @@ -913,8 +911,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/en-GB.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/en-GB.yml Fri Nov 19 13:24:41 2010 +0000 @@ -84,7 +84,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -189,10 +189,10 @@ mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -257,7 +257,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Start + field_start_date: Start date field_done_ratio: % Done field_auth_source: Authentication mode field_hide_mail: Hide my email address @@ -711,7 +711,7 @@ label_search_titles_only: Search titles only label_user_mail_option_all: "For any event on all my projects" label_user_mail_option_selected: "For any event on the selected projects only..." - label_user_mail_option_none: "Only for things I watch or I'm involved in" + label_user_mail_option_none: "No events" label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -825,9 +825,9 @@ text_journal_set_to: "{{label}} set to {{value}}" text_journal_deleted: "{{label}} deleted ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: task beginning this day - text_tip_task_end_day: task ending this day - text_tip_task_begin_end_day: task beginning and ending this day + text_tip_issue_begin_day: task beginning this day + text_tip_issue_end_day: task ending this day + text_tip_issue_begin_end_day: task beginning and ending this day text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.' text_caracters_maximum: "{{count}} characters maximum." text_caracters_minimum: "Must be at least {{count}} characters long." @@ -922,3 +922,12 @@ button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + notice_not_authorized_archived_project: The project you're trying to access has been archived. + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/en.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/en.yml Fri Nov 19 13:24:41 2010 +0000 @@ -81,7 +81,7 @@ byte: one: "Byte" other: "Bytes" - kb: "KB" + kb: "kB" mb: "MB" gb: "GB" tb: "TB" @@ -150,6 +150,7 @@ notice_file_not_found: The page you were trying to access doesn't exist or has been removed. notice_locking_conflict: Data has been updated by another user. notice_not_authorized: You are not authorized to access this page. + notice_not_authorized_archived_project: The project you're trying to access has been archived. notice_email_sent: "An email was sent to {{value}}" notice_email_error: "An error occurred while sending mail ({{value}})" notice_feeds_access_key_reseted: Your RSS access key was reset. @@ -192,10 +193,10 @@ mail_body_account_activation_request: "A new user ({{value}}) has registered. The account is pending your approval:" mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 error gui_validation_error_plural: "{{count}} errors" @@ -261,7 +262,7 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Start + field_start_date: Start date field_done_ratio: % Done field_auth_source: Authentication mode field_hide_mail: Hide my email address @@ -293,9 +294,10 @@ field_group_by: Group results by field_sharing: Sharing field_parent_issue: Parent task - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role + field_member_of_group: "Assignee's group" + field_assigned_to_role: "Assignee's role" field_text: Text field + field_visible: Visible setting_app_title: Application title setting_app_subtitle: Application subtitle @@ -324,6 +326,7 @@ setting_issue_list_default_columns: Default columns displayed on the issue list setting_repositories_encodings: Repositories encodings setting_commit_logs_encoding: Commit messages encoding + setting_emails_header: Emails header setting_emails_footer: Emails footer setting_protocol: Protocol setting_per_page_options: Objects per page options @@ -350,6 +353,7 @@ setting_start_of_week: Start calendars on setting_rest_api_enabled: Enable REST web service setting_cache_formatted_text: Cache formatted text + setting_default_notification_option: Default notification option permission_add_project: Create project permission_add_subprojects: Create subprojects @@ -725,7 +729,10 @@ label_search_titles_only: Search titles only label_user_mail_option_all: "For any event on all my projects" label_user_mail_option_selected: "For any event on the selected projects only..." - label_user_mail_option_none: "Only for things I watch or I'm involved in" + label_user_mail_option_none: "No events" + label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in" + label_user_mail_option_only_assigned: "Only for things I am assigned to" + label_user_mail_option_only_owner: "Only for things I am the owner of" label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -776,6 +783,8 @@ label_profile: Profile label_subtask_plural: Subtasks label_project_copy_notifications: Send email notifications during the project copy + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" button_login: Login button_submit: Submit @@ -844,9 +853,9 @@ text_journal_set_to: "{{label}} set to {{value}}" text_journal_deleted: "{{label}} deleted ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: task beginning this day - text_tip_task_end_day: task ending this day - text_tip_task_begin_end_day: task beginning and ending this day + text_tip_issue_begin_day: issue beginning this day + text_tip_issue_end_day: issue ending this day + text_tip_issue_begin_end_day: issue beginning and ending this day text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.' text_caracters_maximum: "{{count}} characters maximum." text_caracters_minimum: "Must be at least {{count}} characters long."
--- a/config/locales/es.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/es.yml Fri Nov 19 13:24:41 2010 +0000 @@ -313,7 +313,6 @@ field_role: Perfil field_searchable: Incluir en las búsquedas field_spent_on: Fecha - field_start_date: Fecha de inicio field_start_page: Página principal field_status: Estado field_subject: Tema @@ -636,7 +635,6 @@ label_user_activity: "Actividad de {{value}}" label_user_mail_no_self_notified: "No quiero ser avisado de cambios hechos por mÃ" label_user_mail_option_all: "Para cualquier evento en todos mis proyectos" - label_user_mail_option_none: "Sólo para elementos monitorizados o relacionados conmigo" label_user_mail_option_selected: "Para cualquier evento de los proyectos seleccionados..." label_user_new: Nuevo usuario label_user_plural: Usuarios @@ -821,9 +819,9 @@ text_select_project_modules: 'Seleccione los módulos a activar para este proyecto:' text_status_changed_by_changeset: "Aplicado en los cambios {{value}}" text_subprojects_destroy_warning: "Los proyectos secundarios: {{value}} también se eliminarán" - text_tip_task_begin_day: tarea que comienza este dÃa - text_tip_task_begin_end_day: tarea que comienza y termina este dÃa - text_tip_task_end_day: tarea que termina este dÃa + text_tip_issue_begin_day: tarea que comienza este dÃa + text_tip_issue_begin_end_day: tarea que comienza y termina este dÃa + text_tip_issue_end_day: tarea que termina este dÃa text_tracker_no_workflow: No hay ningún flujo de trabajo definido para este tipo de petición text_unallowed_characters: Caracteres no permitidos text_user_mail_option: "De los proyectos no seleccionados, sólo recibirá notificaciones sobre elementos monitorizados o elementos en los que esté involucrado (por ejemplo, peticiones de las que usted sea autor o asignadas a usted)." @@ -855,12 +853,12 @@ text_wiki_page_destroy_children: Eliminar páginas hijas y todos sus descendientes setting_password_min_length: Longitud mÃnima de la contraseña field_group_by: Agrupar resultados por - mail_subject_wiki_content_updated: "La página wiki '{{page}}' ha sido actualizada" + mail_subject_wiki_content_updated: "La página wiki '{{id}}' ha sido actualizada" label_wiki_content_added: Página wiki añadida - mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{page}}'." - mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{page}}'." + mail_subject_wiki_content_added: "Se ha añadido la página wiki '{{id}}'." + mail_body_wiki_content_added: "{{author}} ha añadido la página wiki '{{id}}'." label_wiki_content_updated: Página wiki actualizada - mail_body_wiki_content_updated: La página wiki '{{page}}' ha sido actualizada por {{author}}. + mail_body_wiki_content_updated: La página wiki '{{id}}' ha sido actualizada por {{author}}. permission_add_project: Crear proyecto setting_new_project_user_role_id: Permiso asignado a un usuario no-administrador para crear proyectos label_view_all_revisions: Ver todas las revisiones @@ -953,8 +951,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/eu.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/eu.yml Fri Nov 19 13:24:41 2010 +0000 @@ -188,10 +188,10 @@ mail_body_account_activation_request: "Erabiltzaile berri bat ({{value}}) erregistratu da. Kontua zure onarpenaren zain dago:" mail_subject_reminder: "{{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a" mail_body_reminder: "Zuri esleituta dauden {{count}} arazo hurrengo {{days}} egunetan amaitzen d(ir)a:" - mail_subject_wiki_content_added: "'{{page}}' wiki orria gehitu da" - mail_body_wiki_content_added: "{{author}}-(e)k '{{page}}' wiki orria gehitu du." - mail_subject_wiki_content_updated: "'{{page}}' wiki orria eguneratu da" - mail_body_wiki_content_updated: "{{author}}-(e)k '{{page}}' wiki orria eguneratu du." + mail_subject_wiki_content_added: "'{{id}}' wiki orria gehitu da" + mail_body_wiki_content_added: "{{author}}-(e)k '{{id}}' wiki orria gehitu du." + mail_subject_wiki_content_updated: "'{{id}}' wiki orria eguneratu da" + mail_body_wiki_content_updated: "{{author}}-(e)k '{{id}}' wiki orria eguneratu du." gui_validation_error: akats 1 gui_validation_error_plural: "{{count}} akats" @@ -257,7 +257,6 @@ field_attr_lastname: Abizenak atributua field_attr_mail: Eposta atributua field_onthefly: Zuzeneko erabiltzaile sorrera - field_start_date: Hasiera field_done_ratio: Egindako % field_auth_source: Autentikazio modua field_hide_mail: Nire eposta helbidea ezkutatu @@ -707,7 +706,6 @@ label_search_titles_only: Izenburuetan bakarrik bilatu label_user_mail_option_all: "Nire proiektu guztietako gertakari guztientzat" label_user_mail_option_selected: "Hautatutako proiektuetako edozein gertakarientzat..." - label_user_mail_option_none: "Nik behatu edo parte hartze dudan gauzetarako bakarrik" label_user_mail_no_self_notified: "Ez dut nik egiten ditudan aldeketen jakinarazpenik jaso nahi" label_registration_activation_by_email: kontuak epostaz gaitu label_registration_manual_activation: kontuak eskuz gaitu @@ -821,9 +819,9 @@ text_journal_set_to: "{{label}}-k {{value}} balioa hartu du" text_journal_deleted: "{{label}} ezabatuta ({{old}})" text_journal_added: "{{label}} {{value}} gehituta" - text_tip_task_begin_day: gaur hasten diren atazak - text_tip_task_end_day: gaur bukatzen diren atazak - text_tip_task_begin_end_day: gaur hasi eta bukatzen diren atazak + text_tip_issue_begin_day: gaur hasten diren atazak + text_tip_issue_end_day: gaur bukatzen diren atazak + text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.' text_caracters_maximum: "{{count}} karaktere gehienez." text_caracters_minimum: "Gutxienez {{count}} karaktereetako luzerakoa izan behar du." @@ -917,8 +915,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/fi.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/fi.yml Fri Nov 19 13:24:41 2010 +0000 @@ -262,7 +262,6 @@ field_attr_lastname: Sukunimenmääre field_attr_mail: Sähköpostinmääre field_onthefly: Automaattinen käyttäjien luonti - field_start_date: Alku field_done_ratio: % Tehty field_auth_source: Varmennusmuoto field_hide_mail: Piiloita sähköpostiosoitteeni @@ -579,7 +578,6 @@ label_search_titles_only: Hae vain otsikot label_user_mail_option_all: "Kaikista tapahtumista kaikissa projekteistani" label_user_mail_option_selected: "Kaikista tapahtumista vain valitsemistani projekteista..." - label_user_mail_option_none: "Vain tapahtumista joita valvon tai olen mukana" label_user_mail_no_self_notified: "En halua muistutusta muutoksista joita itse teen" label_registration_activation_by_email: tilin aktivointi sähköpostitse label_registration_manual_activation: tilin aktivointi käsin @@ -636,9 +634,9 @@ text_project_destroy_confirmation: Oletko varma että haluat poistaa tämän projektin ja kaikki siihen kuuluvat tiedot? text_workflow_edit: Valitse rooli ja tapahtuma muokataksesi työnkulkua text_are_you_sure: Oletko varma? - text_tip_task_begin_day: tehtävä joka alkaa tänä päivänä - text_tip_task_end_day: tehtävä joka loppuu tänä päivänä - text_tip_task_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä + text_tip_issue_begin_day: tehtävä joka alkaa tänä päivänä + text_tip_issue_end_day: tehtävä joka loppuu tänä päivänä + text_tip_issue_begin_end_day: tehtävä joka alkaa ja loppuu tänä päivänä text_project_identifier_info: 'Pienet kirjaimet (a-z), numerot ja viivat ovat sallittu.<br />Tallentamisen jälkeen tunnistetta ei voi muuttaa.' text_caracters_maximum: "{{count}} merkkiä enintään." text_caracters_minimum: "Täytyy olla vähintään {{count}} merkkiä pitkä." @@ -841,12 +839,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -938,8 +936,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/fr.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/fr.yml Fri Nov 19 13:24:41 2010 +0000 @@ -169,6 +169,7 @@ notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée." notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible. notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page." + notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé. notice_email_sent: "Un email a été envoyé à {{value}}" notice_email_error: "Erreur lors de l'envoi de l'email ({{value}})" notice_feeds_access_key_reseted: "Votre clé d'accès aux flux RSS a été réinitialisée." @@ -203,10 +204,10 @@ mail_body_account_activation_request: "Un nouvel utilisateur ({{value}}) s'est inscrit. Son compte nécessite votre approbation :" mail_subject_reminder: "{{count}} demande(s) arrivent à échéance ({{days}})" mail_body_reminder: "{{count}} demande(s) qui vous sont assignées arrivent à échéance dans les {{days}} prochains jours :" - mail_subject_wiki_content_added: "Page wiki '{{page}}' ajoutée" - mail_body_wiki_content_added: "La page wiki '{{page}}' a été ajoutée par {{author}}." - mail_subject_wiki_content_updated: "Page wiki '{{page}}' mise à jour" - mail_body_wiki_content_updated: "La page wiki '{{page}}' a été mise à jour par {{author}}." + mail_subject_wiki_content_added: "Page wiki '{{id}}' ajoutée" + mail_body_wiki_content_added: "La page wiki '{{id}}' a été ajoutée par {{author}}." + mail_subject_wiki_content_updated: "Page wiki '{{id}}' mise à jour" + mail_body_wiki_content_updated: "La page wiki '{{id}}' a été mise à jour par {{author}}." gui_validation_error: 1 erreur gui_validation_error_plural: "{{count}} erreurs" @@ -271,7 +272,6 @@ field_attr_lastname: Attribut Nom field_attr_mail: Attribut Email field_onthefly: Création des utilisateurs à la volée - field_start_date: Début field_done_ratio: % réalisé field_auth_source: Mode d'authentification field_hide_mail: Cacher mon adresse mail @@ -303,6 +303,7 @@ field_sharing: Partage field_active: Actif field_parent_issue: Tâche parente + field_visible: Visible setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application @@ -718,7 +719,6 @@ label_search_titles_only: Uniquement dans les titres label_user_mail_option_all: "Pour tous les événements de tous mes projets" label_user_mail_option_selected: "Pour tous les événements des projets sélectionnés..." - label_user_mail_option_none: "Seulement pour ce que je surveille ou à quoi je participe" label_user_mail_no_self_notified: "Je ne veux pas être notifié des changements que j'effectue" label_registration_activation_by_email: activation du compte par email label_registration_manual_activation: activation manuelle du compte @@ -773,6 +773,8 @@ label_profile: Profil label_subtask_plural: Sous-tâches label_project_copy_notifications: Envoyer les notifications durant la copie du projet + label_principal_search: "Rechercher un utilisateur ou un groupe :" + label_user_search: "Rechercher un utilisateur :" button_login: Connexion button_submit: Soumettre @@ -833,9 +835,9 @@ text_subprojects_destroy_warning: "Ses sous-projets : {{value}} seront également supprimés." text_workflow_edit: Sélectionner un tracker et un rôle pour éditer le workflow text_are_you_sure: Êtes-vous sûr ? - text_tip_task_begin_day: tâche commençant ce jour - text_tip_task_end_day: tâche finissant ce jour - text_tip_task_begin_end_day: tâche commençant et finissant ce jour + text_tip_issue_begin_day: tâche commençant ce jour + text_tip_issue_end_day: tâche finissant ce jour + text_tip_issue_begin_end_day: tâche commençant et finissant ce jour text_project_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres et tirets sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.' text_caracters_maximum: "{{count}} caractères maximum." text_caracters_minimum: "{{count}} caractères minimum." @@ -930,9 +932,16 @@ label_overall_spent_time: Temps passé global field_time_entries: Log time project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Modifier la page de Wiki associée: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Calendrier + button_edit_associated_wikipage: "Modifier la page wiki associée: {{page_title}}" + text_are_you_sure_with_children: Supprimer la demande et toutes ses sous-demandes ? + field_text: Champ texte + label_user_mail_option_only_owner: Seulement pour ce que j'ai créé + setting_default_notification_option: Option de notification par défaut + label_user_mail_option_only_my_events: Seulement pour ce que je surveille + label_user_mail_option_only_assigned: Seulement pour ce qui m'est assigné + label_user_mail_option_none: Aucune notification + field_member_of_group: Groupe de l'assigné + field_assigned_to_role: Rôle de l'assigné + field_start_date: Start date + setting_emails_header: Emails header
--- a/config/locales/gl.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/gl.yml Fri Nov 19 13:24:41 2010 +0000 @@ -290,7 +290,6 @@ field_role: Perfil field_searchable: IncluÃr nas búsquedas field_spent_on: Data - field_start_date: Data de inicio field_start_page: Páxina principal field_status: Estado field_subject: Tema @@ -613,7 +612,6 @@ label_user_activity: "Actividade de {{value}}" label_user_mail_no_self_notified: "Non quero ser avisado de cambios feitos por min" label_user_mail_option_all: "Para calquera evento en tódolos proxectos" - label_user_mail_option_none: "Só para elementos monitorizados ou relacionados comigo" label_user_mail_option_selected: "Para calquera evento dos proxectos seleccionados..." label_user_new: Novo usuario label_user_plural: Usuarios @@ -798,9 +796,9 @@ text_select_project_modules: 'Seleccione os módulos a activar para este proxecto:' text_status_changed_by_changeset: "Aplicado nos cambios {{value}}" text_subprojects_destroy_warning: "Os proxectos secundarios: {{value}} tamén se eliminarán" - text_tip_task_begin_day: tarefa que comeza este dÃa - text_tip_task_begin_end_day: tarefa que comeza e remata este dÃa - text_tip_task_end_day: tarefa que remata este dÃa + text_tip_issue_begin_day: tarefa que comeza este dÃa + text_tip_issue_begin_end_day: tarefa que comeza e remata este dÃa + text_tip_issue_end_day: tarefa que remata este dÃa text_tracker_no_workflow: Non hai ningún fluxo de traballo definido para este tipo de petición text_unallowed_characters: Caracteres non permitidos text_user_mail_option: "Dos proxectos non seleccionados, só recibirá notificacións sobre elementos monitorizados ou elementos nos que estea involucrado (por exemplo, peticións das que vostede sexa autor ou asignadas a vostede)." @@ -832,12 +830,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -929,8 +927,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/he.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/he.yml Fri Nov 19 13:24:41 2010 +0000 @@ -104,7 +104,7 @@ inclusion: "×œ× × ×›×œ×œ ברשימה" exclusion: "×œ× ×–×ž×™×Ÿ" invalid: "×œ× ×•×œ×™×“×™" - confirmation: "×œ× ×ª×•×× ×œ×ישורו" + confirmation: "×œ× ×ª×•×× ×œ×ישור" accepted: "חייב ב×ישור" empty: "חייב להכלל" blank: "חייב להכלל" @@ -122,8 +122,8 @@ even: "חייב להיות זוגי" greater_than_start_date: "חייב להיות מ×וחר יותר מת×ריך ההתחלה" not_same_project: "×œ× ×©×™×™×š ל×ותו הפרויקט" - circular_dependency: "הקשר ×”×–×” יצור תלות מעגלית" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + circular_dependency: "קשר ×–×” יצור תלות מעגלית" + cant_link_an_issue_with_a_descendant: "×œ× × ×™×ª×Ÿ לקשר × ×•×©× ×œ×ª×ªÖ¾×ž×©×™×ž×” שלו" actionview_instancetag_blank_option: בחר בבקשה @@ -144,7 +144,7 @@ notice_account_wrong_password: סיסמה שגויה notice_account_register_done: החשבון × ×•×¦×¨ בהצלחה. להפעלת החשבון לחץ על הקישור ×©× ×©×œ×— לדו×"ל שלך. notice_account_unknown_email: משתמש ×œ× ×ž×•×›×¨. - notice_can_t_change_password: החשבון ×”×–×” משתמש במקור ×ימות ×—×™×¦×•× ×™. ×©×™× ×•×™ סיסמה ×”×™× ×• בילתי ×פשר + notice_can_t_change_password: החשבון ×”×–×” משתמש במקור הזדהות ×—×™×¦×•× ×™. ×©×™× ×•×™ סיסמה ×”×™× ×• בילתי ×פשר notice_account_lost_email_sent: דו×"ל ×¢× ×”×•×¨×ות לבחירת סיסמה חדשה × ×©×œ×— ×ליך. notice_account_activated: ×—×©×‘×•× ×š הופעל. ×תה יכול להתחבר כעת. notice_successful_create: יצירה מוצלחת. @@ -154,8 +154,9 @@ notice_file_not_found: הדף ש×תה ×ž× ×¡×” לגשת ×ליו ××™× ×• ×§×™×™× ×ו שהוסר. notice_locking_conflict: המידע עודכן על ידי משתמש ×חר. notice_not_authorized: ××™× ×š מורשה לר×ות דף ×–×”. + notice_not_authorized_archived_project: הפרויקט ש×תה ×ž× ×¡×” לגשת ×ליו × ×ž×¦× ×‘×רכיון. notice_email_sent: "דו×ל × ×©×œ×— לכתובת {{value}}" - notice_email_error: "×רעה שגי××” בעט שליחת הדו×ל ({{value}})" + notice_email_error: "×רעה שגי××” בעת שליחת הדו×ל ({{value}})" notice_feeds_access_key_reseted: מפתח ×”Ö¾RSS שלך ×ופס. notice_api_access_key_reseted: מפתח הגישה שלך ל־API ×ופס. notice_failed_to_save_issues: "× ×›×©×¨×ª בשמירת {{count}} × ×•×©×\×™× ×‘ {{total}} × ×‘×—×¨×•: {{ids}}." @@ -168,7 +169,7 @@ notice_issue_done_ratios_updated: ×חוזי התקדמות ×œ× ×•×©× ×¢×•×“×›× ×•. error_can_t_load_default_data: "×פשרויות ברירת המחדל ×œ× ×”×¦×œ×™×—×• להיטען: {{value}}" - error_scm_not_found: ×›× ×™×¡×” ו\×ו גירסה ××™× × ×§×™×™×ž×™× ×‘×ž×גר. + error_scm_not_found: ×›× ×™×¡×” ו\×ו מהדורה ××™× × ×§×™×™×ž×™× ×‘×ž×גר. error_scm_command_failed: "×רעה שגי××” בעת × ×™×¡×•×Ÿ גישה למ×גר: {{value}}" error_scm_annotate: "×”×›× ×™×¡×” ×œ× ×§×™×™×ž×ª ×ו ×©×œ× × ×™×ª×Ÿ לת×ר ×ותה." error_issue_not_found_in_project: '×”× ×•×©××™× ×œ× × ×ž×¦×ו ×ו ××™× × ×©×™×›×™× ×œ×¤×¨×•×™×§×˜' @@ -194,12 +195,12 @@ mail_body_account_information: פרטי החשבון שלך mail_subject_account_activation_request: "בקשת הפעלה לחשבון {{value}}" mail_body_account_activation_request: "משתמש חדש ({{value}}) × ×¨×©×. החשבון שלו מחכה ל×ישור שלך:" - mail_subject_reminder: "{{count}} × ×•×©××™× ×ž×™×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})" + mail_subject_reminder: "{{count}} × ×•×©××™× ×ž×™×•×¢×“×™× ×œ×”×’×©×” ×‘×™×ž×™× ×”×§×¨×•×‘×™× ({{days}})" mail_body_reminder: "{{count}} × ×•×©××™× ×©×ž×™×•×¢×“×™× ×ליך ×ž×™×•×¢×“×™× ×œ×”×’×©×” בתוך {{days}} ימי×:" - mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{page}}' × ×•×¡×£" - mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{page}}' × ×•×¡×£ ×¢"×™ {{author}}. - mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{page}}' עודכן" - mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{page}}' עודכן ×¢"×™ {{author}}. + mail_subject_wiki_content_added: "דף ×”Ö¾wiki â€'{{id}}' × ×•×¡×£" + mail_body_wiki_content_added: דף ×”Ö¾wiki â€'{{id}}' × ×•×¡×£ ×¢"×™ {{author}}. + mail_subject_wiki_content_updated: "דף ×”Ö¾wiki â€'{{id}}' עודכן" + mail_body_wiki_content_updated: דף ×”Ö¾wiki â€'{{id}}' עודכן ×¢"×™ {{author}}. gui_validation_error: שגי××” 1 gui_validation_error_plural: "{{count}} שגי×ות" @@ -248,7 +249,7 @@ field_login: ×©× ×ž×©×ª×ž×© field_mail_notification: הודעות דו×"ל field_admin: × ×™×”×•×œ - field_last_login_on: חיבור ×חרון + field_last_login_on: התחברות ××—×¨×•× ×” field_language: שפה field_effective_date: ת×ריך field_password: סיסמה @@ -265,9 +266,8 @@ field_attr_lastname: ×ª×›×•× ×ª ×©× ×ž×©×¤×—×” field_attr_mail: ×ª×›×•× ×ª דו×"ל field_onthefly: יצירת ×ž×©×ª×ž×©×™× ×–×¨×™×–×” - field_start_date: ת×ריך התחלה field_done_ratio: % גמור - field_auth_source: מצב ×ימות + field_auth_source: מקור הזדהות field_hide_mail: ×”×—×‘× ×ת כתובת הדו×"ל שלי field_comments: הערות field_url: URL @@ -284,6 +284,7 @@ field_redirect_existing_links: העבר ×§×™×©×•×¨×™× ×§×™×™×ž×™× field_estimated_hours: זמן משוער field_column_names: עמודות + field_time_entries: ×¨×™×©×•× ×–×ž× ×™× field_time_zone: ×יזור זמן field_searchable: × ×™×ª×Ÿ לחיפוש field_default_value: ערך ברירת מחדל @@ -296,13 +297,14 @@ field_group_by: קבץ ×ת התוצ×ות לפי field_sharing: שיתוף field_parent_issue: משימת ×ב + field_text: שדה טקסט setting_app_title: כותרת ×™×©×•× setting_app_subtitle: תת־כותרת ×™×©×•× setting_welcome_text: טקסט "ברוך הב×" setting_default_language: שפת ברירת מחדל - setting_login_required: דרוש ×ימות - setting_self_registration: ×פשר הרשמות עצמית + setting_login_required: דרושה הזדהות + setting_self_registration: ×פשר הרשמה עצמית setting_attachment_max_size: גודל דבוקה מקסימ×לי setting_issues_export_limit: גבול ×™×¦×•× × ×•×©××™× setting_mail_from: כתובת שליחת דו×"ל @@ -310,14 +312,14 @@ setting_plain_text_mail: טקסט פשוט בלבד (×œ×œ× HTML) setting_host_name: ×©× ×©×¨×ª setting_text_formatting: עיצוב טקסט - setting_wiki_compression: כיווץ היסטורית WIKI + setting_wiki_compression: כיווץ היסטורית wiki setting_feeds_limit: גבול תוכן ×”×–× ×•×ª setting_default_projects_public: ×¤×¨×•×™×§×˜×™× ×—×“×©×™× ×”×™× × ×¤×•×ž×‘×™×™× ×›×‘×¨×™×¨×ª מחדל - setting_autofetch_changesets: משיכה ×וטומטית של ×¢×™×“×›×•× ×™× + setting_autofetch_changesets: משיכה ×וטומטית של ×©×™× ×•×™×™× setting_sys_api_enabled: ×פשר שירות רשת ×œ× ×™×”×•×œ המ×גר setting_commit_ref_keywords: מילות מפתח מקשרות setting_commit_fix_keywords: מילות מפתח ×ž×ª×§× ×•×ª - setting_autologin: חיבור ×וטומטי + setting_autologin: התחברות ×וטומטית setting_date_format: פורמט ת×ריך setting_time_format: פורמט זמן setting_cross_project_issue_relations: הרשה קישור × ×•×©××™× ×‘×™×Ÿ ×¤×¨×•×™×§×˜×™× @@ -339,17 +341,18 @@ setting_gravatar_default: ×ª×ž×•× ×ª Gravatar ברירת מחדל setting_diff_max_lines_displayed: מספר מירבי של שורות בתצוגת ×©×™× ×•×™×™× setting_file_max_size_displayed: גודל מירבי של מלל המוצג בתוך השורה - setting_repository_log_display_limit: מספר מירבי של גירס×ות המוצגות ביומן קובץ + setting_repository_log_display_limit: מספר מירבי של מהדורות המוצגות ביומן קובץ setting_openid: ×פשר התחברות ×•×¨×™×©×•× ×‘×מצעות OpenID - setting_password_min_length: ×ורך ×¡×™×¡×ž× ×ž×™× ×™×ž×לי + setting_password_min_length: ×ורך סיסמה ×ž×™× ×™×ž×לי setting_new_project_user_role_id: התפקיד שמוגדר למשתמש פשוט ×שר יוצר פרויקט setting_default_projects_modules: ×ž×•×“×•×œ×™× ×ž××•×¤×©×¨×™× ×‘×‘×¨×™×¨×ª מחדל עבור ×¤×¨×•×™×§×˜×™× ×—×“×©×™× setting_issue_done_ratio: חשב ×חוז התקדמות ×‘× ×•×©× ×¢× setting_issue_done_ratio_issue_field: השתמש בשדה ×”× ×•×©× setting_issue_done_ratio_issue_status: השתמש במצב ×”× ×•×©× - setting_start_of_week: התחל ×™×•×ž× ×™× ×œ×¤×™ + setting_start_of_week: השבוע מתחיל ×‘×™×•× setting_rest_api_enabled: ×פשר שירות רשת REST setting_cache_formatted_text: שמור טקסט מעוצב במטמון + setting_default_notification_option: ×פשרות התר××” ברירת־מחדל permission_add_project: יצירת פרויקט permission_add_subprojects: יצירת תתי־פרויקט @@ -376,9 +379,9 @@ permission_add_issue_watchers: הוספת ×¦×•×¤×™× permission_delete_issue_watchers: הסרת ×¦×•×¤×™× permission_log_time: תיעוד זמן שהושקע - permission_view_time_entries: צפיה בזמן שהושקע + permission_view_time_entries: צפיה ×‘×¨×™×©×•× ×–×ž× ×™× permission_edit_time_entries: עריכת ×¨×™×©×•× ×–×ž× ×™× - permission_edit_own_time_entries: עריכת לוג הזמן של עצמו + permission_edit_own_time_entries: עריכת ×¨×™×©×•× ×”×–×ž× ×™× ×©×œ עצמו permission_manage_news: × ×™×”×•×œ חדשות permission_comment_news: תגובה לחדשות permission_manage_documents: × ×™×”×•×œ ×ž×¡×ž×›×™× @@ -395,7 +398,7 @@ permission_protect_wiki_pages: ×”×’× ×” על כל דפי wiki permission_manage_repository: × ×™×”×•×œ מ×גר permission_browse_repository: סיור במ×גר - permission_view_changesets: צפיה בקבוצות ×©×™× ×•×™×™× + permission_view_changesets: צפיה בסדרות ×©×™× ×•×™×™× permission_commit_access: ×ישור הפקדות permission_manage_boards: × ×™×”×•×œ לוחות permission_view_messages: צפיה בהודעות @@ -415,6 +418,8 @@ project_module_wiki: Wiki project_module_repository: מ×גר project_module_boards: לוחות + project_module_calendar: לוח ×©× ×” + project_module_gantt: ×’×× ×˜ label_user: משתמש label_user_plural: ×ž×©×ª×ž×©×™× @@ -439,7 +444,7 @@ label_document: מסמך label_document_new: מסמך חדש label_document_plural: ×ž×¡×ž×›×™× - label_document_added: מוסמך × ×•×¡×£ + label_document_added: מסמך × ×•×¡×£ label_role: תפקיד label_role_plural: ×ª×¤×§×™×“×™× label_role_new: תפקיד חדש @@ -464,7 +469,7 @@ label_enumeration_new: ערך חדש label_information: מידע label_information_plural: מידע - label_please_login: התחבר בבקשה + label_please_login: × × ×”×ª×—×‘×¨ label_register: הרשמה label_login_with_open_id_option: ×ו התחבר ב×מצעות OpenID label_password_lost: ×בדה הסיסמה? @@ -479,7 +484,7 @@ label_help: עזרה label_reported_issues: × ×•×©××™× ×©×“×•×•×—×• label_assigned_to_me_issues: × ×•×©××™× ×©×”×•×¦×‘×• לי - label_last_login: חיבור ×חרון + label_last_login: התחברות ××—×¨×•× ×” label_registered_on: × ×¨×©× ×‘×ª×ריך label_activity: פעילות label_overall_activity: פעילות כוללת @@ -487,10 +492,10 @@ label_new: חדש label_logged_as: מחובר ×› label_environment: סביבה - label_authentication: ×ישור - label_auth_source: מצב ×ישור - label_auth_source_new: מצב ×ישור חדש - label_auth_source_plural: מצבי ×ישור + label_authentication: הזדהות + label_auth_source: מקור הזדהות + label_auth_source_new: מקור הזדהות חדש + label_auth_source_plural: מקורות הזדהות label_subproject_plural: ×ª×ªÖ¾×¤×¨×•×™×§×˜×™× label_subproject_new: תת־פרויקט חדש label_and_its_subprojects: "{{value}} וכל ×ª×ª×™Ö¾×”×¤×¨×•×™×§×˜×™× ×©×œ×•" @@ -521,7 +526,7 @@ label_news_plural: חדשות label_news_latest: חדשות ××—×¨×•× ×•×ª label_news_view_all: צפה בכל החדשות - label_news_added: חדשות הוספו + label_news_added: חדשות × ×•×¡×¤×• label_settings: הגדרות label_overview: מבט רחב label_version: גירסה @@ -575,7 +580,7 @@ one: הערה ×חת other: "{{count}} הערות" label_comment_add: הוסף תגובה - label_comment_added: תגובה הוספה + label_comment_added: תגובה × ×•×¡×¤×” label_comment_delete: מחק תגובות label_query: ש×ילתה ×ישית label_query_plural: ש×ילתות ×ישיות @@ -593,7 +598,7 @@ label_all_time: תמיד label_yesterday: ×תמול label_this_week: השבוע - label_last_week: שבוע שעבר + label_last_week: השבוע שעבר label_last_n_days: "ב־{{count}} ×™×ž×™× ××—×¨×•× ×™×" label_this_month: החודש label_last_month: חודש שעבר @@ -612,19 +617,19 @@ label_modification_plural: "{{count}} ×©×™× ×•×™×™×" label_branch: ×¢× ×£ label_tag: סימון - label_revision: גירסה - label_revision_plural: גירס×ות - label_revision_id: גירסה {{value}} - label_associated_revisions: גירס×ות קשורות + label_revision: מהדורה + label_revision_plural: מהדורות + label_revision_id: מהדורה {{value}} + label_associated_revisions: מהדורות קשורות label_added: × ×•×¡×£ label_modified: ×©×•× ×” label_copied: הועתק label_renamed: ×”×©× ×©×•× ×” label_deleted: × ×ž×—×§ - label_latest_revision: גירסה ××—×¨×•× ×” - label_latest_revision_plural: גירס×ות ××—×¨×•× ×•×ª - label_view_revisions: צפה בגירס×ות - label_view_all_revisions: צפה בכל הגירס×ות + label_latest_revision: מהדורה ××—×¨×•× ×” + label_latest_revision_plural: מהדורות ××—×¨×•× ×•×ª + label_view_revisions: צפה במהדורות + label_view_all_revisions: צפה בכל המהדורות label_max_size: גודל מקסימ×לי label_sort_highest: ×”×–×– לר×שית label_sort_higher: ×”×–×– למעלה @@ -638,10 +643,10 @@ label_result_plural: תוצ×ות label_all_words: כל ×”×ž×™×œ×™× label_wiki: Wiki - label_wiki_edit: ערוך Wiki - label_wiki_edit_plural: עריכות Wiki + label_wiki_edit: ערוך wiki + label_wiki_edit_plural: עריכות wiki label_wiki_page: דף Wiki - label_wiki_page_plural: דפי Wiki + label_wiki_page_plural: דפי wiki label_index_by_title: סדר על פי כותרת label_index_by_date: סדר על פי ת×ריך label_current_version: גירסה × ×•×›×—×™×ª @@ -694,7 +699,7 @@ label_message_plural: הודעות label_message_last: הודעה ××—×¨×•× ×” label_message_new: הודעה חדשה - label_message_posted: הודעה הוספה + label_message_posted: הודעה × ×•×¡×¤×” label_reply_plural: השבות label_send_information: שלח מידע על חשבון למשתמש label_year: ×©× ×” @@ -703,18 +708,18 @@ label_date_from: מת×ריך label_date_to: עד label_language_based: מבוסס שפה - label_sort_by: "מין לפי {{value}}" + label_sort_by: "מיין לפי {{value}}" label_send_test_email: שלח דו×"ל בדיקה label_feeds_access_key: מפתח גישה ל־RSS label_missing_feeds_access_key: חסר מפתח גישה ל־RSS label_feeds_access_key_created_on: "מפתח ×”×–× ×ª RSS × ×•×¦×¨ ×œ×¤× ×™{{value}}" label_module_plural: ×ž×•×“×•×œ×™× - label_added_time_by: "× ×•×¡×£ על ידי {{author}} ×œ×¤× ×™ {{age}} " + label_added_time_by: '× ×•×¡×£ ×¢"×™ {{author}} ×œ×¤× ×™ {{age}}' label_updated_time_by: 'עודכן ×¢"×™ {{author}} ×œ×¤× ×™ {{age}}' label_updated_time: "עודכן ×œ×¤× ×™ {{value}} " label_jump_to_a_project: קפוץ לפרויקט... label_file_plural: ×§×‘×¦×™× - label_changeset_plural: ×וסף ×©×™× ×•×™× + label_changeset_plural: סדרות ×©×™× ×•×™×™× label_default_columns: עמודת ברירת מחדל label_no_change_option: (×ין ×©×™× ×•×™×) label_bulk_edit_selected_issues: ערוך ×ת ×”× ×•×©××™× ×”×ž×¡×•×ž× ×™× @@ -723,7 +728,9 @@ label_search_titles_only: חפש בכותרות בלבד label_user_mail_option_all: "לכל ×ירוע בכל ×”×¤×¨×•×™×§×˜×™× ×©×œ×™" label_user_mail_option_selected: "לכל ×ירוע ×‘×¤×¨×•×™×§×˜×™× ×©×‘×—×¨×ª×™ בלבד..." - label_user_mail_option_none: "רק ×œ× ×•×©××™× ×©×× ×™ צופה ×ו קשור ×ליה×" + label_user_mail_option_only_my_events: עבור ×“×‘×¨×™× ×©×× ×™ צופה ×ו מעורב ×‘×”× ×‘×œ×‘×“ + label_user_mail_option_only_assigned: עבור ×“×‘×¨×™× ×©×× ×™ ×חר××™ ×¢×œ×™×”× ×‘×œ×‘×“ + label_user_mail_option_only_owner: עבור ×“×‘×¨×™× ×©×× ×™ ×”×‘×¢×œ×™× ×©×œ×”× ×‘×œ×‘×“ label_user_mail_no_self_notified: "×× ×™ ×œ× ×¨×•×¦×” שיודיעו לי על ×©×™× ×•×™×™× ×©×× ×™ מבצע" label_registration_activation_by_email: הפעל חשבון ב×מצעות דו×"ל label_registration_manual_activation: הפעלת חשבון ×™×“× ×™×ª @@ -735,7 +742,7 @@ label_more: עוד label_scm: מערכת × ×™×”×•×œ תצורה label_plugins: ×ª×•×¡×¤×™× - label_ldap_authentication: ×ימות LDAP + label_ldap_authentication: הזדהות LDAP label_downloads_abbr: D/L label_optional_description: תי×ור רשות label_add_another_file: הוסף עוד קובץ @@ -752,8 +759,8 @@ label_ascending: בסדר עולה label_descending: בסדר יורד label_date_from_to: 'מת×ריך {{start}} ועד ת×ריך {{end}}' - label_wiki_content_added: הדף × ×•×¡×£ ל־wiki - label_wiki_content_updated: דף ×”Ö¾wiki עודכן + label_wiki_content_added: × ×•×¡×£ דף ל־wiki + label_wiki_content_updated: דף wiki עודכן label_group: קבוצה label_group_plural: קבוצות label_group_new: קבוצה חדשה @@ -785,6 +792,7 @@ button_create_and_continue: צור ופתח חדש button_test: בדוק button_edit: ערוך + button_edit_associated_wikipage: "ערוך דף wiki מקושר: {{page_title}}" button_add: הוסף button_change: ×©× ×” button_apply: החל @@ -800,8 +808,8 @@ button_cancel: בטל button_activate: הפעל button_sort: מיין - button_log_time: זמן לוג - button_rollback: חזור לגירסה זו + button_log_time: ×¨×™×©×•× ×–×ž× ×™× + button_rollback: חזור למהדורה זו button_watch: צפה button_unwatch: בטל צפיה button_reply: השב @@ -809,7 +817,7 @@ button_unarchive: ×”×•×¦× ×ž×”×רכיון button_reset: ×פס button_rename: ×©× ×” ×©× - button_change_password: ×©× ×” ×¡×™×¡×ž× + button_change_password: ×©× ×” סיסמה button_copy: העתק button_copy_and_follow: העתק ועקוב button_annotate: הוסף תי×ור מסגרת @@ -836,13 +844,14 @@ text_subprojects_destroy_warning: "תת־הפרויקט\×™×: {{value}} ימחקו ×’× ×›×Ÿ." text_workflow_edit: בחר תפקיד וסיווג כדי לערוך ×ת זרימת העבודה text_are_you_sure: ×”×× ×תה בטוח? + text_are_you_sure_with_children: ×”×× ×œ×ž×—×•×§ ×ת ×”× ×•×©× ×•×ת כל ×‘× ×™×•? text_journal_changed: "{{label}} ×”×©×ª× ×” מ{{old}} ל{{new}}" text_journal_set_to: "{{label}} × ×§×‘×¢ ל{{value}}" text_journal_deleted: "{{label}} × ×ž×—×§ ({{old}})" text_journal_added: "{{label}} {{value}} × ×•×¡×£" - text_tip_task_begin_day: מטלה המתחילה ×”×™×•× - text_tip_task_end_day: מטלה המסתיימת ×”×™×•× - text_tip_task_begin_end_day: מטלה המתחילה ומסתיימת ×”×™×•× + text_tip_issue_begin_day: מטלה המתחילה ×”×™×•× + text_tip_issue_end_day: מטלה המסתיימת ×”×™×•× + text_tip_issue_begin_end_day: מטלה המתחילה ומסתיימת ×”×™×•× text_project_identifier_info: '×ותיות ×œ×˜×™× ×™×•×ª (a-z), ×ž×¡×¤×¨×™× ×•×ž×§×¤×™×.<br />ברגע ×©× ×©×ž×¨, ×œ× × ×™×ª×Ÿ ×œ×©× ×•×ª ×ת המזהה.' text_caracters_maximum: "×ž×§×¡×™×ž×•× {{count}} תווי×." text_caracters_minimum: "חייב להיות לפחות ב×ורך של {{count}} תווי×." @@ -852,8 +861,8 @@ text_comma_separated: ×”×›× ×¡×ª ×¢×¨×›×™× ×ž×¨×•×‘×™× ×ž×•×ª×¨×ª (×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×). text_line_separated: × ×™×ª×Ÿ להזין מספר ×¢×¨×›×™× (שורה ×חת לכל ערך). text_issues_ref_in_commit_messages: קישור ×•×ª×™×§×•× × ×•×©××™× ×‘×”×•×“×¢×•×ª הפקדה - text_issue_added: "×”× ×•×©× {{id}} דווח (by {{author}})." - text_issue_updated: "×”× ×•×©× {{id}} עודכן (by {{author}})." + text_issue_added: "×”× ×•×©× {{id}} דווח (בידי {{author}})." + text_issue_updated: "×”× ×•×©× {{id}} עודכן (בידי {{author}})." text_wiki_destroy_confirmation: ×”×× ×תה בטוח ×©×‘×¨×¦×•× ×š למחוק ×ת ×”WIKI ×”×–×” ו×ת כל ×ª×•×›× ×•? text_issue_category_destroy_question: "כמה × ×•×©××™× ({{count}}) ×ž×•×¦×‘×™× ×œ×§×˜×’×•×¨×™×” הזו. מה ×‘×¨×¦×•× ×š לעשות?" text_issue_category_destroy_assignments: הסר הצבת קטגוריה @@ -875,7 +884,7 @@ text_user_wrote: "{{value}} כתב:" text_enumeration_destroy_question: "{{count}} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”." text_enumeration_category_reassign_to: 'הצב מחדש לערך ×”×–×”:' - text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ config/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.' + text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/<instance>/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.' text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי." text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.' text_custom_field_possible_values_info: שורה ×חת לכל ערך @@ -915,11 +924,11 @@ enumeration_doc_categories: קטגוריות ×ž×¡×ž×›×™× enumeration_activities: פעילויות (מעקב ×חר ×–×ž× ×™×) enumeration_system_activity: פעילות מערכת - field_time_entries: Log time - project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/hr.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/hr.yml Fri Nov 19 13:24:41 2010 +0000 @@ -184,10 +184,10 @@ mail_body_account_activation_request: "Novi korisnik ({{value}}) je registriran. Njegov korisniÄki raÄun Äeka vaÅ¡e odobrenje:" mail_subject_reminder: "{{count}} predmet(a) dospijeva sljedećih {{days}} dana" mail_body_reminder: "{{count}} vama dodijeljen(ih) predmet(a) dospijeva u sljedećih {{days}} dana:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 pogreÅ¡ka gui_validation_error_plural: "{{count}} pogreÅ¡aka" @@ -253,7 +253,6 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-poÅ¡te field_onthefly: "Izrada korisnika \"u hodu\"" - field_start_date: Pocetak field_done_ratio: % UÄinjeno field_auth_source: Vrsta prijavljivanja field_hide_mail: Sakrij moju adresu e-poÅ¡te @@ -701,7 +700,6 @@ label_search_titles_only: Pretraživanje samo naslova label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj samo za izabrane projekte..." - label_user_mail_option_none: "Samo za stvari koje pratim ili u kojima sudjelujem" label_user_mail_no_self_notified: "Ne želim primati obavijesti o promjenama koje sam napravim" label_registration_activation_by_email: aktivacija putem e-poÅ¡te label_registration_manual_activation: ruÄna aktivacija @@ -815,9 +813,9 @@ text_journal_set_to: "{{label}} postavi na {{value}}" text_journal_deleted: "{{label}} izbrisano ({{old}})" text_journal_added: "{{label}} {{value}} added" - text_tip_task_begin_day: Zadaci koji poÄinju ovog dana - text_tip_task_end_day: zadaci koji se zavrÅ¡avaju ovog dana - text_tip_task_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana + text_tip_issue_begin_day: Zadaci koji poÄinju ovog dana + text_tip_issue_end_day: zadaci koji se zavrÅ¡avaju ovog dana + text_tip_issue_begin_end_day: Zadaci koji poÄinju i zavrÅ¡avaju se ovog dana text_project_identifier_info: 'mala slova (a-z), brojevi i crtice su dozvoljeni.<br />Jednom snimljen identifikator se ne može mijenjati!' text_caracters_maximum: "NajviÅ¡e {{count}} znakova." text_caracters_minimum: "Mora biti dugaÄko najmanje {{count}} znakova." @@ -920,8 +918,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/hu.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/hu.yml Fri Nov 19 13:24:41 2010 +0000 @@ -260,7 +260,6 @@ field_attr_lastname: Vezetéknév field_attr_mail: E-mail field_onthefly: On-the-fly felhasználó létrehozás - field_start_date: Kezdés dátuma field_done_ratio: Elkészült (%) field_auth_source: AzonosÃtási mód field_hide_mail: Rejtse el az e-mail cÃmem @@ -612,7 +611,6 @@ label_search_titles_only: Keresés csak a cÃmekben label_user_mail_option_all: "Minden eseményrÅ‘l minden saját projektemben" label_user_mail_option_selected: "Minden eseményrÅ‘l a kiválasztott projektekben..." - label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek" label_user_mail_no_self_notified: "Nem kérek értesÃtést az általam végzett módosÃtásokról" label_registration_activation_by_email: Fiók aktiválása e-mailben label_registration_manual_activation: Manuális fiók aktiválás @@ -682,9 +680,9 @@ text_subprojects_destroy_warning: "Az alprojekt(ek): {{value}} szintén törlésre kerülnek." text_workflow_edit: Válasszon egy szerepkört, és egy feladat tÃpust a workflow szerkesztéséhez text_are_you_sure: Biztos benne ? - text_tip_task_begin_day: a feladat ezen a napon kezdÅ‘dik - text_tip_task_end_day: a feladat ezen a napon ér véget - text_tip_task_begin_end_day: a feladat ezen a napon kezdÅ‘dik és ér véget + text_tip_issue_begin_day: a feladat ezen a napon kezdÅ‘dik + text_tip_issue_end_day: a feladat ezen a napon ér véget + text_tip_issue_begin_end_day: a feladat ezen a napon kezdÅ‘dik és ér véget text_project_identifier_info: 'Kis betűk (a-z), számok és kötÅ‘jel megengedett.<br />Mentés után az azonosÃtót megváltoztatni nem lehet.' text_caracters_maximum: "maximum {{count}} karakter." text_caracters_minimum: "Legkevesebb {{count}} karakter hosszúnek kell lennie." @@ -839,12 +837,12 @@ text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése setting_password_min_length: Minimum jelszó hosszúság field_group_by: Szerint csoportosÃtva - mail_subject_wiki_content_updated: "'{{page}}' wiki oldal frissÃtve" + mail_subject_wiki_content_updated: "'{{id}}' wiki oldal frissÃtve" label_wiki_content_added: Wiki oldal hozzáadva - mail_subject_wiki_content_added: "Új wiki oldal: '{{page}}'" - mail_body_wiki_content_added: A '{{page}}' wiki oldalt {{author}} hozta létre. + mail_subject_wiki_content_added: "Új wiki oldal: '{{id}}'" + mail_body_wiki_content_added: A '{{id}}' wiki oldalt {{author}} hozta létre. label_wiki_content_updated: Wiki oldal frissÃtve - mail_body_wiki_content_updated: A '{{page}}' wiki oldalt {{author}} frissÃtette. + mail_body_wiki_content_updated: A '{{id}}' wiki oldalt {{author}} frissÃtette. permission_add_project: Projekt létrehozása setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak label_view_all_revisions: Minden revÃzió megtekintése @@ -936,8 +934,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/id.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/id.yml Fri Nov 19 13:24:41 2010 +0000 @@ -181,10 +181,10 @@ mail_body_account_activation_request: "Pengguna baru ({{value}}) sudan didaftarkan. Akun tersebut menunggu persetujuan anda:" mail_subject_reminder: "{{count}} masalah harus selesai pada hari berikutnya ({{days}})" mail_body_reminder: "{{count}} masalah yang ditugaskan pada anda harus selesai dalam {{days}} hari kedepan:" - mail_subject_wiki_content_added: "'{{page}}' halaman wiki sudah ditambahkan" - mail_body_wiki_content_added: "The '{{page}}' halaman wiki sudah ditambahkan oleh {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' halaman wiki sudah diperbarui" - mail_body_wiki_content_updated: "The '{{page}}' halaman wiki sudah diperbarui oleh {{author}}." + mail_subject_wiki_content_added: "'{{id}}' halaman wiki sudah ditambahkan" + mail_body_wiki_content_added: "The '{{id}}' halaman wiki sudah ditambahkan oleh {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' halaman wiki sudah diperbarui" + mail_body_wiki_content_updated: "The '{{id}}' halaman wiki sudah diperbarui oleh {{author}}." gui_validation_error: 1 kesalahan gui_validation_error_plural: "{{count}} kesalahan" @@ -251,7 +251,6 @@ field_attr_lastname: Atribut nama belakang field_attr_mail: Atribut email field_onthefly: Pembuatan pengguna seketika - field_start_date: Mulai field_done_ratio: % Selesai field_auth_source: Mode otentikasi field_hide_mail: Sembunyikan email saya @@ -688,7 +687,6 @@ label_search_titles_only: Cari judul saja label_user_mail_option_all: "Untuk semua kejadian pada semua proyek saya" label_user_mail_option_selected: "Hanya untuk semua kejadian pada proyek yang saya pilih ..." - label_user_mail_option_none: "Hanya pada hal-hal yang saya pantau atau saya terlibat di dalamnya" label_user_mail_no_self_notified: "Saya tak ingin diberitahu untuk perubahan yang saya buat sendiri" label_user_mail_assigned_only_mail_notification: "Kirim email hanya bila saya ditugaskan untuk masalah terkait" label_user_mail_block_mail_notification: "Saya tidak ingin menerima email. Terima kasih." @@ -796,9 +794,9 @@ text_journal_set_to: "{{label}} di set ke {{value}}" text_journal_deleted: "{{label}} dihapus ({{old}})" text_journal_added: "{{label}} {{value}} ditambahkan" - text_tip_task_begin_day: tugas dimulai hari itu - text_tip_task_end_day: tugas berakhir hari itu - text_tip_task_begin_end_day: tugas dimulai dan berakhir hari itu + text_tip_issue_begin_day: tugas dimulai hari itu + text_tip_issue_end_day: tugas berakhir hari itu + text_tip_issue_begin_end_day: tugas dimulai dan berakhir hari itu text_project_identifier_info: 'Yang diijinkan hanya huruf kecil (a-z), angka dan tanda minus.<br />Sekali disimpan, pengenal tidak bisa diubah.' text_caracters_maximum: "maximum {{count}} karakter." text_caracters_minimum: "Setidaknya harus sepanjang {{count}} karakter." @@ -921,8 +919,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/it.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/it.yml Fri Nov 19 13:24:41 2010 +0000 @@ -232,7 +232,6 @@ field_attr_lastname: Attributo cognome field_attr_mail: Attributo email field_onthefly: Creazione utente "al volo" - field_start_date: Inizio field_done_ratio: % completato field_auth_source: Modalità di autenticazione field_hide_mail: Nascondi il mio indirizzo email @@ -572,9 +571,9 @@ text_project_destroy_confirmation: Sei sicuro di voler eliminare il progetto e tutti i dati ad esso collegati? text_workflow_edit: Seleziona un ruolo ed un tracker per modificare il workflow text_are_you_sure: Sei sicuro ? - text_tip_task_begin_day: attività che iniziano in questa giornata - text_tip_task_end_day: attività che terminano in questa giornata - text_tip_task_begin_end_day: attività che iniziano e terminano in questa giornata + text_tip_issue_begin_day: attività che iniziano in questa giornata + text_tip_issue_end_day: attività che terminano in questa giornata + text_tip_issue_begin_end_day: attività che iniziano e terminano in questa giornata text_project_identifier_info: "Lettere minuscole (a-z), numeri e trattini permessi.<br />Una volta salvato, l'identificativo non può essere modificato." text_caracters_maximum: "massimo {{count}} caratteri." text_length_between: "Lunghezza compresa tra {{min}} e {{max}} caratteri." @@ -632,7 +631,6 @@ text_user_mail_option: "Per i progetti non selezionati, riceverai solo le notifiche riguardanti le cose che osservi o nelle quali sei coinvolto (per esempio segnalazioni che hai creato o che ti sono state assegnate)." label_user_mail_option_selected: "Solo per gli eventi relativi ai progetti selezionati..." label_user_mail_option_all: "Per ogni evento relativo ad uno dei miei progetti" - label_user_mail_option_none: "Solo per argomenti che osservo o che mi riguardano" setting_emails_footer: Piè di pagina email label_float: Decimale button_copy: Copia @@ -820,12 +818,12 @@ text_wiki_page_destroy_children: Elimina le pagine figlie e tutta la discendenza setting_password_min_length: Lunghezza minima password field_group_by: Raggruppa risultati per - mail_subject_wiki_content_updated: "La pagina wiki '{{page}}' è stata aggiornata" + mail_subject_wiki_content_updated: "La pagina wiki '{{id}}' è stata aggiornata" label_wiki_content_added: Aggiunta pagina al wiki - mail_subject_wiki_content_added: "La pagina '{{page}}' è stata aggiunta al wiki" - mail_body_wiki_content_added: La pagina '{{page}}' è stata aggiunta al wiki da {{author}}. + mail_subject_wiki_content_added: "La pagina '{{id}}' è stata aggiunta al wiki" + mail_body_wiki_content_added: La pagina '{{id}}' è stata aggiunta al wiki da {{author}}. label_wiki_content_updated: Aggiornata pagina wiki - mail_body_wiki_content_updated: La pagina '{{page}}' wiki è stata aggiornata da{{author}}. + mail_body_wiki_content_updated: La pagina '{{id}}' wiki è stata aggiornata da{{author}}. permission_add_project: Crea progetto setting_new_project_user_role_id: Ruolo assegnato agli utenti non amministratori che creano un progetto label_view_all_revisions: Mostra tutte le revisioni @@ -917,8 +915,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/ja.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/ja.yml Fri Nov 19 13:24:41 2010 +0000 @@ -175,6 +175,7 @@ notice_file_not_found: アクセスã—よã†ã¨ã—ãŸãƒšãƒ¼ã‚¸ã¯å˜åœ¨ã—ãªã„ã‹å‰Šé™¤ã•れã¦ã„ã¾ã™ã€‚ notice_locking_conflict: 別ã®ãƒ¦ãƒ¼ã‚¶ãŒãƒ‡ãƒ¼ã‚¿ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™ã€‚ notice_not_authorized: ã“ã®ãƒšãƒ¼ã‚¸ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯èªè¨¼ãŒå¿…è¦ã§ã™ã€‚ + notice_not_authorized_archived_project: プãƒã‚¸ã‚§ã‚¯ãƒˆã¯æ›¸åº«ã«ä¿å˜ã•れã¦ã„ã¾ã™ã€‚ notice_email_sent: "{{value}} å®›ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚" notice_email_error: "メールé€ä¿¡ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠({{value}})" notice_feeds_access_key_reseted: RSSアクセスã‚ãƒ¼ã‚’åˆæœŸåŒ–ã—ã¾ã—ãŸã€‚ @@ -218,10 +219,10 @@ mail_body_account_activation_request: "æ–°ã—ã„ユーザ {{value}} ãŒç™»éŒ²ã•れã¾ã—ãŸã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã‚ãªãŸã®æ‰¿èªå¾…ã¡ã§ã™ï¼š" mail_subject_reminder: "{{count}}ä»¶ã®ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™" mail_body_reminder: "{{count}}ä»¶ã®æ‹…当ãƒã‚±ãƒƒãƒˆã®æœŸæ—¥ãŒ{{days}}日以内ã«åˆ°æ¥ã—ã¾ã™:" - mail_subject_wiki_content_added: "Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸ" - mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" - mail_subject_wiki_content_updated: "Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸ" - mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{page}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚" + mail_subject_wiki_content_added: "Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸ" + mail_body_wiki_content_added: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚" + mail_subject_wiki_content_updated: "Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸ" + mail_body_wiki_content_updated: "{{author}} ã«ã‚ˆã£ã¦Wikiページ {{id}} ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚" gui_validation_error: 1ä»¶ã®ã‚¨ãƒ©ãƒ¼ gui_validation_error_plural: "{{count}}ä»¶ã®ã‚¨ãƒ©ãƒ¼" @@ -287,7 +288,6 @@ field_attr_lastname: è‹—å—属性 field_attr_mail: メール属性 field_onthefly: ã‚ã‚ã›ã¦ãƒ¦ãƒ¼ã‚¶ã‚’ä½œæˆ - field_start_date: é–‹å§‹æ—¥ field_done_ratio: é€²æ— % field_auth_source: èªè¨¼æ–¹å¼ field_hide_mail: ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’éš ã™ @@ -376,6 +376,7 @@ setting_issue_done_ratio_issue_status: ãƒã‚±ãƒƒãƒˆã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’使用ã™ã‚‹ setting_start_of_week: 週ã®é–‹å§‹æ›œæ—¥ setting_rest_api_enabled: RESTã«ã‚ˆã‚‹Webサービスを有効ã«ã™ã‚‹ + setting_default_notification_option: デフォルトã®ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã‚ªãƒ—ション permission_add_project: プãƒã‚¸ã‚§ã‚¯ãƒˆã®è¿½åŠ permission_add_subprojects: サブプãƒã‚¸ã‚§ã‚¯ãƒˆã®è¿½åŠ @@ -701,7 +702,7 @@ label_relation_delete: 関連ã®å‰Šé™¤ label_relates_to: 関係ã—ã¦ã„ã‚‹ label_duplicates: é‡è¤‡ã—ã¦ã„ã‚‹ - label_duplicated_by: é‡è¤‡ã—ã¦ã„ã‚‹ + label_duplicated_by: é‡è¤‡ã•れã¦ã„ã‚‹ label_blocks: ブãƒãƒƒã‚¯ã—ã¦ã„ã‚‹ label_blocked_by: ブãƒãƒƒã‚¯ã•れã¦ã„ã‚‹ label_precedes: 先行ã™ã‚‹ @@ -752,7 +753,10 @@ label_search_titles_only: タイトルã®ã¿ label_user_mail_option_all: "å‚åŠ ã—ã¦ã„るプãƒã‚¸ã‚§ã‚¯ãƒˆã®å…¨ã¦ã®é€šçŸ¥" label_user_mail_option_selected: "é¸æŠžã—ãŸãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã®å…¨ã¦ã®é€šçŸ¥..." - label_user_mail_option_none: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_none: "通知ã—ãªã„" + label_user_mail_option_only_my_events: "ウォッãƒã¾ãŸã¯é–¢ä¿‚ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_only_assigned: "è‡ªåˆ†ãŒæ‹…当ã—ã¦ã„る事柄ã®ã¿" + label_user_mail_option_only_owner: "自分ãŒä½œæˆã—ãŸäº‹æŸ„ã®ã¿" label_user_mail_no_self_notified: 自分自身ã«ã‚ˆã‚‹å¤‰æ›´ã®é€šçŸ¥ã¯ä¸è¦ label_registration_activation_by_email: メールã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化 label_registration_manual_activation: 手動ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’有効化 @@ -870,9 +874,9 @@ text_journal_set_to: "{{label}} ã‚’ {{value}} ã«ã‚»ãƒƒãƒˆ" text_journal_deleted: "{{label}} を削除 ({{old}})" text_journal_added: "{{label}} {{value}} ã‚’è¿½åŠ " - text_tip_task_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯ - text_tip_task_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ - text_tip_task_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_begin_day: ã“ã®æ—¥ã«é–‹å§‹ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_end_day: ã“ã®æ—¥ã«çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ + text_tip_issue_begin_end_day: ã“ã®æ—¥ã®ã†ã¡ã«é–‹å§‹ã—ã¦çµ‚了ã™ã‚‹ã‚¿ã‚¹ã‚¯ text_project_identifier_info: 'è‹±å°æ–‡å—(a-z)ã¨æ•°å—ã¨ãƒ€ãƒƒã‚·ãƒ¥(-)ãŒä½¿ãˆã¾ã™ã€‚<br />一度ä¿å˜ã™ã‚‹ã¨ã€è˜åˆ¥åã¯å¤‰æ›´ã§ãã¾ã›ã‚“。' text_caracters_maximum: "最大{{count}}æ–‡å—ã§ã™ã€‚" text_caracters_minimum: "最低{{count}}æ–‡å—ã®é•·ã•ãŒå¿…è¦ã§ã™" @@ -943,3 +947,8 @@ enumeration_doc_categories: 文書カテゴリ enumeration_activities: 作æ¥åˆ†é¡ž (時間トラッã‚ング) enumeration_system_activity: システム作æ¥åˆ†é¡ž + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/ko.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/ko.yml Fri Nov 19 13:24:41 2010 +0000 @@ -231,10 +231,10 @@ mail_body_account_activation_request: "새 사용ìž({{value}})ê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤. 관리ìžë‹˜ì˜ 승ì¸ì„ ê¸°ë‹¤ë¦¬ê³ ìžˆìŠµë‹ˆë‹¤.:" mail_body_reminder: "ë‹¹ì‹ ì´ ë§¡ê³ ìžˆëŠ” ì¼ê° {{count}}ê°œì˜ ì™„ë£Œ ê¸°í•œì´ {{days}}ì¼ í›„ 입니다." mail_subject_reminder: "ë‚´ì¼ì´ ë§Œê¸°ì¸ ì¼ê° {{count}}ê°œ ({{days}})" - mail_subject_wiki_content_added: "위키페ì´ì§€ '{{page}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤." - mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{page}}'ì´(ê°€) ìˆ˜ì •ë˜ì—ˆìŠµë‹ˆë‹¤." - mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) 추가하였습니다." - mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{page}}'ì„(를) ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤." + mail_subject_wiki_content_added: "위키페ì´ì§€ '{{id}}'ì´(ê°€) 추가ë˜ì—ˆìŠµë‹ˆë‹¤." + mail_subject_wiki_content_updated: "'위키페ì´ì§€ {{id}}'ì´(ê°€) ìˆ˜ì •ë˜ì—ˆìŠµë‹ˆë‹¤." + mail_body_wiki_content_added: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) 추가하였습니다." + mail_body_wiki_content_updated: "{{author}}ì´(ê°€) 위키페ì´ì§€ '{{id}}'ì„(를) ìˆ˜ì •í•˜ì˜€ìŠµë‹ˆë‹¤." gui_validation_error: ì—러 gui_validation_error_plural: "{{count}}ê°œ ì—러" @@ -299,7 +299,6 @@ field_attr_lastname: 성 ì†ì„± field_attr_mail: ë©”ì¼ ì†ì„± field_onthefly: ë™ì ì‚¬ìš©ìž ìƒì„± - field_start_date: 시작시간 field_done_ratio: ì§„ì²™ë„ field_auth_source: ì¸ì¦ ê³µê¸‰ìž field_hide_mail: ë©”ì¼ ì£¼ì†Œ 숨기기 @@ -727,7 +726,6 @@ label_search_titles_only: ì œëª©ì—서만 찾기 label_user_mail_option_all: "ë‚´ê°€ ì†í•œ 프로ì 트로들부터 ëª¨ë“ ë©”ì¼ ë°›ê¸°" label_user_mail_option_selected: "ì„ íƒí•œ 프로ì 트들로부터 ëª¨ë“ ë©”ì¼ ë°›ê¸°.." - label_user_mail_option_none: "ë‚´ê°€ ì†í•˜ê±°ë‚˜ ê°ì‹œ ì¤‘ì¸ ì‚¬í•ì— ëŒ€í•´ì„œë§Œ" label_user_mail_no_self_notified: "ë‚´ê°€ ë§Œë“ ë³€ê²½ì‚¬í•ë“¤ì— ëŒ€í•´ì„œëŠ” 알림메ì¼ì„ 받지 않습니다." label_registration_activation_by_email: ë©”ì¼ë¡œ ê³„ì •ì„ í™œì„±í™”í•˜ê¸° label_registration_automatic_activation: ìžë™ ê³„ì • 활성화 @@ -810,9 +808,9 @@ text_subprojects_destroy_warning: "하위 프로ì 트({{value}})ì´(ê°€) ìžë™ìœ¼ë¡œ 지워질 것입니다." text_workflow_edit: 업무í름 ìˆ˜ì •í•˜ë ¤ë©´ ì—í• ê³¼ ì¼ê°ìœ í˜•ì„ ì„ íƒí•˜ì„¸ìš”. text_are_you_sure: ê³„ì† ì§„í–‰ í•˜ì‹œê² ìŠµë‹ˆê¹Œ? - text_tip_task_begin_day: 오늘 시작하는 업무(task) - text_tip_task_end_day: 오늘 종료하는 업무(task) - text_tip_task_begin_end_day: 오늘 ì‹œìž‘í•˜ê³ ì¢…ë£Œí•˜ëŠ” 업무(task) + text_tip_issue_begin_day: 오늘 시작하는 업무(task) + text_tip_issue_end_day: 오늘 종료하는 업무(task) + text_tip_issue_begin_end_day: 오늘 ì‹œìž‘í•˜ê³ ì¢…ë£Œí•˜ëŠ” 업무(task) text_project_identifier_info: 'ì˜ë¬¸ 소문ìž(a-z) ë° ìˆ«ìž, 대쉬(-) 가능.<br />ì €ìž¥ëœí›„ì—는 ì‹ë³„ìž ë³€ê²½ 불가능.' text_caracters_maximum: "최대 {{count}} ê¸€ìž ê°€ëŠ¥" text_caracters_minimum: "최소한 {{count}} ê¸€ìž ì´ìƒì´ì–´ì•¼ 합니다." @@ -969,8 +967,19 @@ field_time_entries: 기ë¡ëœ 시간 project_module_gantt: Gantt ì± íŠ¸ project_module_calendar: ë‹¬ë ¥ - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/lt.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/lt.yml Fri Nov 19 13:24:41 2010 +0000 @@ -241,10 +241,10 @@ mail_body_account_activation_request: "Užsiregistravo naujas vartotojas ({{value}}). Jo paskyra laukia jÅ«sų patvirtinimo:" mail_subject_reminder: "{{count}} darbas(ai) po kelių {{days}} dienų" mail_body_reminder: "{{count}} darbas(ai), kurie yra jums priskirti, baigiasi po {{days}} dienų(os):" - mail_subject_wiki_content_added: "'{{page}}' pridÄ—tas wiki puslapis" - mail_body_wiki_content_added: "The '{{page}}' wiki puslapi pridÄ—jo {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' atnaujintas wiki puslapis" - mail_body_wiki_content_updated: "The '{{page}}' wiki puslapį atnaujino {{author}}." + mail_subject_wiki_content_added: "'{{id}}' pridÄ—tas wiki puslapis" + mail_body_wiki_content_added: "The '{{id}}' wiki puslapi pridÄ—jo {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' atnaujintas wiki puslapis" + mail_body_wiki_content_updated: "The '{{id}}' wiki puslapį atnaujino {{author}}." gui_validation_error: 1 klaida gui_validation_error_plural: "{{count}} klaidų(os)" @@ -310,7 +310,6 @@ field_attr_lastname: PavardÄ—s priskiria field_attr_mail: Elektroninio paÅ¡to požymis field_onthefly: Automatinis vartotojų registravimas - field_start_date: PradÄ—ti field_done_ratio: % atlikta field_auth_source: AutentiÅ¡kumo nustatymo bÅ«das field_hide_mail: PaslÄ—pkite mano elektroninio paÅ¡to adresÄ… @@ -742,7 +741,6 @@ label_search_titles_only: IeÅ¡koti pavadinimų tiktai label_user_mail_option_all: "Bet kokiam įvykiui visuose mano projektuose" label_user_mail_option_selected: "Bet kokiam įvykiui tiktai pasirinktuose projektuose ..." - label_user_mail_option_none: "Tiktai dalykai kuriuos aÅ¡ stebiu ar aÅ¡ esu įtrauktas į" label_user_mail_no_self_notified: "Nenoriu bÅ«ti informuotas apie pakeitimus, kuriuos pats atlieku" label_registration_activation_by_email: "paskyros aktyvacija per e-paÅ¡tÄ…" label_registration_manual_activation: "rankinÄ— paskyros aktyvacija" @@ -852,9 +850,9 @@ text_journal_set_to: "{{label}} pakeista į {{value}}" text_journal_deleted: "{{label}} iÅ¡trintas ({{old}})" text_journal_added: "{{label}} {{value}} pridÄ—tas" - text_tip_task_begin_day: užduotis, prasidedanti Å¡iÄ… dienÄ… - text_tip_task_end_day: užduotis, pasibaigianti Å¡iÄ… dienÄ… - text_tip_task_begin_end_day: užduotis, prasidedanti ir pasibaigianti Å¡iÄ… dienÄ… + text_tip_issue_begin_day: užduotis, prasidedanti Å¡iÄ… dienÄ… + text_tip_issue_end_day: užduotis, pasibaigianti Å¡iÄ… dienÄ… + text_tip_issue_begin_end_day: užduotis, prasidedanti ir pasibaigianti Å¡iÄ… dienÄ… text_project_identifier_info: 'Mažosios raidÄ—s (a-z), skaiÄiai ir brÅ«kÅ¡niai galimi.<br/>IÅ¡saugojus, identifikuotojas negali bÅ«ti keiÄiamas.' text_caracters_maximum: "{{count}} simbolių maksimumas." text_caracters_minimum: "Turi bÅ«ti mažiausiai {{count}} simbolių ilgio." @@ -977,8 +975,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/lv.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/lv.yml Fri Nov 19 13:24:41 2010 +0000 @@ -180,10 +180,10 @@ mail_body_account_activation_request: "Jauns lietotÄjs ({{value}}) ir reÄ£istrÄ“ts. LietotÄja konts gaida JÅ«su apstiprinÄjumu:" mail_subject_reminder: "{{count}} uzdevums(i) sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs" mail_body_reminder: "{{count}} uzdevums(i), kurÅ¡(i) ir nozÄ«mÄ“ts(i) Jums, sagaidÄms(i) tuvÄkajÄs {{days}} dienÄs:" - mail_subject_wiki_content_added: "'{{page}}' Wiki lapa pievienota" - mail_body_wiki_content_added: "The '{{page}}' Wiki lapu pievienojis {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' Wiki lapa atjaunota" - mail_body_wiki_content_updated: "The '{{page}}' Wiki lapu atjaunojis {{author}}." + mail_subject_wiki_content_added: "'{{id}}' Wiki lapa pievienota" + mail_body_wiki_content_added: "The '{{id}}' Wiki lapu pievienojis {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' Wiki lapa atjaunota" + mail_body_wiki_content_updated: "The '{{id}}' Wiki lapu atjaunojis {{author}}." gui_validation_error: 1 kļūda gui_validation_error_plural: "{{count}} kļūdas" @@ -248,7 +248,6 @@ field_attr_lastname: UzvÄrda atribÅ«ts field_attr_mail: "E-pasta atribÅ«ts" field_onthefly: "LietotÄja izveidoÅ¡ana on-the-fly" - field_start_date: SÄkuma datums field_done_ratio: % padarÄ«ti field_auth_source: PilnvaroÅ¡anas režīms field_hide_mail: "PaslÄ“pt manu e-pasta adresi" @@ -702,7 +701,6 @@ label_search_titles_only: MeklÄ“t tikai nosaukumos label_user_mail_option_all: "Par visiem notikumiem visos manos projektos" label_user_mail_option_selected: "Par visiem notikumiem tikai izvÄ“lÄ“tajos projektos..." - label_user_mail_option_none: "Tikai par lietÄm, kuras es vÄ“roju un kurÄs esmu iesaistÄ«ts" label_user_mail_no_self_notified: "Neziņot man par izmaiņÄm, kuras veicu es pats" label_registration_activation_by_email: "konta aktivizÄcija caur e-pastu" label_registration_manual_activation: manuÄlÄ konta aktivizÄcija @@ -816,9 +814,9 @@ text_journal_set_to: "{{label}} iestatÄ«ts uz {{value}}" text_journal_deleted: "{{label}} dzÄ“sts ({{old}})" text_journal_added: "{{label}} {{value}} pievienots" - text_tip_task_begin_day: uzdevums sÄkas Å¡odien - text_tip_task_end_day: uzdevums beidzas Å¡odien - text_tip_task_begin_end_day: uzdevums sÄkas un beidzas Å¡odien + text_tip_issue_begin_day: uzdevums sÄkas Å¡odien + text_tip_issue_end_day: uzdevums beidzas Å¡odien + text_tip_issue_begin_end_day: uzdevums sÄkas un beidzas Å¡odien text_project_identifier_info: 'Tikai mazie burti (a-z), cipari un domuzÄ«mes ir atļauti.<br />Kad saglabÄts, identifikators nevar tikt mainÄ«ts.' text_caracters_maximum: "{{count}} simboli maksimÄli." text_caracters_minimum: "JÄbÅ«t vismaz {{count}} simbolu garumÄ." @@ -908,8 +906,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/locales/mk.yml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,929 @@ +mk: + # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl) + direction: ltr + date: + formats: + # Use the strftime parameters for formats. + # When no format has been given, it uses default. + # You can provide other formats here if you like! + default: "%d/%m/%Y" + short: "%d %b" + long: "%d %B, %Y" + + day_names: [недела, понеделник, вторник, Ñреда, четврток, петок, Ñабота] + abbr_day_names: [нед, пон, вто, Ñре, чет, пет, Ñаб] + + # Don't forget the nil at the beginning; there's no such thing as a 0th month + month_names: [~, јануари, февруари, март, април, мај, јуни, јули, авгуÑÑ‚, Ñептември, октомври, ноември, декември] + abbr_month_names: [~, јан, фев, мар, апр, мај, јун, јул, авг, Ñеп, окт, ное, дек] + # Used in date_select and datime_select. + order: [ :day, :month, :year ] + + time: + formats: + default: "%d/%m/%Y %H:%M" + time: "%H:%M" + short: "%d %b %H:%M" + long: "%d %B, %Y %H:%M" + am: "предпладне" + pm: "попладне" + + datetime: + distance_in_words: + half_a_minute: "пола минута" + less_than_x_seconds: + one: "помалку од 1 Ñекунда" + other: "помалку од {{count}} Ñекунди" + x_seconds: + one: "1 Ñекунда" + other: "{{count}} Ñекунди" + less_than_x_minutes: + one: "помалку од 1 минута" + other: "помалку од {{count}} минути" + x_minutes: + one: "1 минута" + other: "{{count}} минути" + about_x_hours: + one: "околу 1 чаÑ" + other: "околу {{count}} чаÑа" + x_days: + one: "1 ден" + other: "{{count}} дена" + about_x_months: + one: "околу 1 меÑец" + other: "околу {{count}} меÑеци" + x_months: + one: "1 меÑец" + other: "{{count}} меÑеци" + about_x_years: + one: "околу 1 година" + other: "околу {{count}} години" + over_x_years: + one: "преку 1 година" + other: "преку {{count}} години" + almost_x_years: + one: "Ñкоро 1 година" + other: "Ñкоро {{count}} години" + + number: + # Default format for numbers + format: + separator: "." + delimiter: "" + precision: 3 + human: + format: + delimiter: "" + precision: 1 + storage_units: + format: "%n %u" + units: + byte: + one: "Byte" + other: "Bytes" + kb: "KB" + mb: "MB" + gb: "GB" + tb: "TB" + + +# Used in array.to_sentence. + support: + array: + sentence_connector: "и" + skip_last_comma: false + + activerecord: + errors: + messages: + inclusion: "не е вклучено во лиÑтата" + exclusion: "е резервирано" + invalid: "е невалидно" + confirmation: "не Ñе Ñовпаѓа Ñо потврдата" + accepted: "мора да е прифатено" + empty: "неможе да е празно" + blank: "неможе да е празно" + too_long: "е предолго (макÑ. {{count}} знаци)" + too_short: "е прекратко (мин. {{count}} знаци)" + wrong_length: "е погрешна должина (треба да е {{count}} знаци)" + taken: "е веќе зафатено" + not_a_number: "не е број" + not_a_date: "не е валидна дата" + greater_than: "мора да е поголемо од {{count}}" + greater_than_or_equal_to: "мора да е поголемо или еднакво на {{count}}" + equal_to: "мора да е еднакво на {{count}}" + less_than: "мора да е помало од {{count}}" + less_than_or_equal_to: "мора да е помало или еднакво на {{count}}" + odd: "мора да е непарно" + even: "мора да е парно" + greater_than_start_date: "мора да е поголема од почетната дата" + not_same_project: "не припаѓа на иÑтиот проект" + circular_dependency: "Оваа врÑка ќе креира кружна завиÑноÑÑ‚" + cant_link_an_issue_with_a_descendant: "Задача неможе да Ñе поврзе Ñо една од нејзините подзадачи" + + actionview_instancetag_blank_option: Изберете + + general_text_No: 'Ðе' + general_text_Yes: 'Да' + general_text_no: 'не' + general_text_yes: 'да' + general_lang_name: 'Macedonian (МакедонÑки)' + general_csv_separator: ',' + general_csv_decimal_separator: '.' + general_csv_encoding: UTF-8 + general_pdf_encoding: UTF-8 + general_first_day_of_week: '1' + + notice_account_updated: Профилот е уÑпешно ажуриран. + notice_account_invalid_creditentials: Ðеточен кориÑник или лозинка + notice_account_password_updated: Лозинката е уÑпешно ажурирана. + notice_account_wrong_password: Погрешна лозинка + notice_account_register_done: Профилот е уÑпешно креиран. За активација, клкнете на врÑката што ви е пратена по е-пошта. + notice_account_unknown_email: Ðепознат кориÑник. + notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password. + notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you. + notice_account_activated: Your account has been activated. You can now log in. + notice_successful_create: УÑпешно креирање. + notice_successful_update: УÑпешно ажурирање. + notice_successful_delete: УÑпешно бришење. + notice_successful_connection: УÑпешна конекција. + notice_file_not_found: The page you were trying to access doesn't exist or has been removed. + notice_locking_conflict: Data has been updated by another user. + notice_not_authorized: You are not authorized to access this page. + notice_email_sent: "Е-порака е пратена на {{value}}" + notice_email_error: "Се Ñлучи грешка при праќање на е-пораката ({{value}})" + notice_feeds_access_key_reseted: Вашиот RSS клуч за приÑтап е reset. + notice_api_access_key_reseted: Вашиот API клуч за приÑтап е reset. + notice_failed_to_save_issues: "Failed to save {{count}} issue(s) on {{total}} selected: {{ids}}." + notice_failed_to_save_members: "Failed to save member(s): {{errors}}." + notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit." + notice_account_pending: "Your account was created and is now pending administrator approval." + notice_default_data_loaded: Default configuration successfully loaded. + notice_unable_delete_version: Unable to delete version. + notice_unable_delete_time_entry: Unable to delete time log entry. + notice_issue_done_ratios_updated: Issue done ratios updated. + + error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}" + error_scm_not_found: "The entry or revision was not found in the repository." + error_scm_command_failed: "An error occurred when trying to access the repository: {{value}}" + error_scm_annotate: "The entry does not exist or can not be annotated." + error_issue_not_found_in_project: 'The issue was not found or does not belong to this project' + error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.' + error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").' + error_can_not_delete_custom_field: Unable to delete custom field + error_can_not_delete_tracker: "This tracker contains issues and can't be deleted." + error_can_not_remove_role: "This role is in use and can not be deleted." + error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened' + error_can_not_archive_project: This project can not be archived + error_issue_done_ratios_not_updated: "Issue done ratios not updated." + error_workflow_copy_source: 'Please select a source tracker or role' + error_workflow_copy_target: 'Please select target tracker(s) and role(s)' + error_unable_delete_issue_status: 'Unable to delete issue status' + error_unable_to_connect: "Unable to connect ({{value}})" + warning_attachments_not_saved: "{{count}} file(s) could not be saved." + + mail_subject_lost_password: "Вашата {{value}} лозинка" + mail_body_lost_password: 'To change your password, click on the following link:' + mail_subject_register: "Your {{value}} account activation" + mail_body_register: 'To activate your account, click on the following link:' + mail_body_account_information_external: "You can use your {{value}} account to log in." + mail_body_account_information: Your account information + mail_subject_account_activation_request: "{{value}} account activation request" + mail_body_account_activation_request: "Ðов кориÑник ({{value}}) е региÑтриран. The account is pending your approval:" + mail_subject_reminder: "{{count}} issue(s) due in the next {{days}} days" + mail_body_reminder: "{{count}} issue(s) that are assigned to you are due in the next {{days}} days:" + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." + + gui_validation_error: 1 грешка + gui_validation_error_plural: "{{count}} грешки" + + field_name: Име + field_description: ÐžÐ¿Ð¸Ñ + field_summary: Краток Ð¾Ð¿Ð¸Ñ + field_is_required: Задолжително + field_firstname: Име + field_lastname: Презиме + field_mail: Е-пошта + field_filename: Датотека + field_filesize: Големина + field_downloads: Превземања + field_author: Ðвтор + field_created_on: Креиран + field_updated_on: Ðжурирано + field_field_format: Формат + field_is_for_all: За Ñите проекти + field_possible_values: Можни вредноÑти + field_regexp: Regular expression + field_min_length: Минимална должина + field_max_length: МакÑимална должина + field_value: ВредноÑÑ‚ + field_category: Категорија + field_title: ÐаÑлов + field_project: Проект + field_issue: Задача + field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ + field_notes: Белешки + field_is_closed: Задачата е затворена + field_is_default: Default value + field_tracker: Tracker + field_subject: ÐаÑлов + field_due_date: Краен рок + field_assigned_to: Доделена на + field_priority: Приоритет + field_fixed_version: Target version + field_user: КориÑник + field_principal: Principal + field_role: Улога + field_homepage: Веб Ñтрана + field_is_public: Јавен + field_parent: Подпроект на + field_is_in_roadmap: Issues displayed in roadmap + field_login: КориÑник + field_mail_notification: ИзвеÑтувања по e-пошта + field_admin: ÐдминиÑтратор + field_last_login_on: ПоÑледна најава + field_language: Јазик + field_effective_date: Дата + field_password: Лозинка + field_new_password: Ðова лозинка + field_password_confirmation: Потврда + field_version: Верзија + field_type: Тип + field_host: ХоÑÑ‚ + field_port: Порт + field_account: Account + field_base_dn: Base DN + field_attr_login: Login attribute + field_attr_firstname: Firstname attribute + field_attr_lastname: Lastname attribute + field_attr_mail: Email attribute + field_onthefly: Моментално (On-the-fly) креирање на кориÑници + field_done_ratio: % Завршено + field_auth_source: Режим на автентикација + field_hide_mail: Криј ја мојата адреÑа на е-пошта + field_comments: Коментар + field_url: URL + field_start_page: Почетна Ñтрана + field_subproject: Подпроект + field_hours: ЧаÑови + field_activity: ÐктивноÑÑ‚ + field_spent_on: Дата + field_identifier: Идентификатор + field_is_filter: КориÑти како филтер + field_issue_to: Поврзана задача + field_delay: Доцнење + field_assignable: Ðа оваа улога може да Ñе доделуваат задачи + field_redirect_existing_links: ПренаÑочи ги поÑтоечките врÑки + field_estimated_hours: Проценето време + field_column_names: Колони + field_time_entries: Бележи време + field_time_zone: ВременÑка зона + field_searchable: Може да Ñе пребарува + field_default_value: Default value + field_comments_sorting: Прикажувај коментари + field_parent_title: Parent page + field_editable: Може да Ñе уредува + field_watcher: Watcher + field_identity_url: OpenID URL + field_content: Содржина + field_group_by: Групирај ги резултатите Ñпоред + field_sharing: Споделување + field_parent_issue: Parent task + + setting_app_title: ÐаÑлов на апликацијата + setting_app_subtitle: ПоднаÑлов на апликацијата + setting_welcome_text: ТекÑÑ‚ за добредојде + setting_default_language: Default јазик + setting_login_required: Задолжителна автентикација + setting_self_registration: Само-региÑтрација + setting_attachment_max_size: МакÑ. големина на прилог + setting_issues_export_limit: Issues export limit + setting_mail_from: Emission email address + setting_bcc_recipients: Blind carbon copy recipients (bcc) + setting_plain_text_mail: ТекÑтуални е-пораки (без HTML) + setting_host_name: Име на хоÑÑ‚ и патека + setting_text_formatting: Форматирање на текÑÑ‚ + setting_wiki_compression: КомпреÑија на иÑторијата на вики + setting_feeds_limit: Feed content limit + setting_default_projects_public: Ðовите проекти Ñе иницијално јавни + setting_autofetch_changesets: Autofetch commits + setting_sys_api_enabled: Enable WS for repository management + setting_commit_ref_keywords: Referencing keywords + setting_commit_fix_keywords: Fixing keywords + setting_autologin: ÐвтоматÑка најава + setting_date_format: Формат на дата + setting_time_format: Формат на време + setting_cross_project_issue_relations: Дозволи релации на задачи меѓу проекти + setting_issue_list_default_columns: Default columns displayed on the issue list + setting_repositories_encodings: Repositories encodings + setting_commit_logs_encoding: Commit messages encoding + setting_emails_footer: Emails footer + setting_protocol: Протокол + setting_per_page_options: Objects per page options + setting_user_format: Приказ на кориÑниците + setting_activity_days_default: Денови прикажана во активноÑта на проектот + setting_display_subprojects_issues: Прикажи ги задачите на подпроектите во главните проекти + setting_enabled_scm: Овозможи SCM + setting_mail_handler_body_delimiters: "Truncate emails after one of these lines" + setting_mail_handler_api_enabled: Enable WS for incoming emails + setting_mail_handler_api_key: API клуч + setting_sequential_project_identifiers: Генерирај поÑледователни идентификатори на проекти + setting_gravatar_enabled: КориÑти Gravatar кориÑнички икони + setting_gravatar_default: Default Gravatar image + setting_diff_max_lines_displayed: Max number of diff lines displayed + setting_file_max_size_displayed: Max size of text files displayed inline + setting_repository_log_display_limit: Maximum number of revisions displayed on file log + setting_openid: Дозволи OpenID најава и региÑтрација + setting_password_min_length: Мин. должина на лозинка + setting_new_project_user_role_id: Улога доделена на неадминиÑтраторÑки кориÑник кој креира проект + setting_default_projects_modules: Default enabled modules for new projects + setting_issue_done_ratio: Calculate the issue done ratio with + setting_issue_done_ratio_issue_field: Use the issue field + 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: Креирај проекти + permission_add_subprojects: Креирај подпроекти + permission_edit_project: Уреди проект + permission_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: Прегледај задачи + permission_add_issues: Додавај задачи + permission_edit_issues: Уредувај задачи + permission_manage_issue_relations: Manage issue relations + permission_add_issue_notes: Додавај белешки + permission_edit_issue_notes: Уредувај белешки + permission_edit_own_issue_notes: Уредувај ÑопÑтвени белешки + permission_move_issues: ПремеÑтувај задачи + permission_delete_issues: Бриши задачи + permission_manage_public_queries: Manage public queries + permission_save_queries: Save queries + permission_view_gantt: View gantt chart + permission_view_calendar: View calendar + permission_view_issue_watchers: View watchers list + permission_add_issue_watchers: Add watchers + permission_delete_issue_watchers: Delete watchers + permission_log_time: Бележи потрошено време + permission_view_time_entries: Прегледај потрошено време + permission_edit_time_entries: Уредувај белешки за потрошено време + permission_edit_own_time_entries: Уредувај ÑопÑтвени белешки за потрошено време + permission_manage_news: Manage news + permission_comment_news: Коментирај на веÑти + permission_manage_documents: Manage documents + permission_view_documents: Прегледувај документи + permission_manage_files: Manage files + permission_view_files: Прегледувај датотеки + permission_manage_wiki: Manage wiki + permission_rename_wiki_pages: Преименувај вики Ñтраници + permission_delete_wiki_pages: Бриши вики Ñтраници + permission_view_wiki_pages: Прегледувај вики + permission_view_wiki_edits: Прегледувај вики иÑторија + permission_edit_wiki_pages: Уредувај вики Ñтраници + permission_delete_wiki_pages_attachments: Бриши прилози + permission_protect_wiki_pages: Заштитувај вики Ñтраници + permission_manage_repository: Manage repository + permission_browse_repository: Browse repository + permission_view_changesets: View changesets + permission_commit_access: Commit access + permission_manage_boards: Manage boards + permission_view_messages: View messages + permission_add_messages: Post messages + permission_edit_messages: Уредувај пораки + permission_edit_own_messages: Уредувај ÑопÑтвени пораки + permission_delete_messages: Бриши пораки + permission_delete_own_messages: Бриши ÑопÑтвени пораки + permission_export_wiki_pages: Export wiki pages + permission_manage_subtasks: Manage subtasks + + project_module_issue_tracking: Следење на задачи + project_module_time_tracking: Следење на време + project_module_news: ВеÑти + project_module_documents: Документи + project_module_files: Датотеки + project_module_wiki: Вики + project_module_repository: Repository + project_module_boards: Форуми + project_module_calendar: Календар + project_module_gantt: Gantt + + label_user: КориÑник + label_user_plural: КориÑници + label_user_new: Ðов кориÑник + label_user_anonymous: Ðнонимен + label_project: Проект + label_project_new: Ðов проект + label_project_plural: Проекти + label_x_projects: + zero: нема проекти + one: 1 проект + other: "{{count}} проекти" + label_project_all: Сите проекти + label_project_latest: ПоÑледните проекти + label_issue: Задача + label_issue_new: Ðова задача + label_issue_plural: Задачи + label_issue_view_all: Прегледај ги Ñите задачи + label_issues_by: "Задачи по {{value}}" + label_issue_added: Задачата е додадена + label_issue_updated: Задачата е ажурирана + label_document: Документ + label_document_new: Ðов документ + label_document_plural: Документи + label_document_added: Документот е додаден + label_role: Улога + label_role_plural: Улоги + label_role_new: Ðова улога + label_role_and_permissions: Улоги и овлаÑтувања + label_member: Член + label_member_new: Ðов член + label_member_plural: Членови + label_tracker: Tracker + label_tracker_plural: Trackers + label_tracker_new: New tracker + label_workflow: Workflow + label_issue_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð½Ð° задача + label_issue_status_plural: СтатуÑи на задачи + label_issue_status_new: Ðов ÑÑ‚Ð°Ñ‚ÑƒÑ + label_issue_category: Категорија на задача + label_issue_category_plural: Категории на задачи + label_issue_category_new: Ðова категорија + label_custom_field: Прилагодено поле + label_custom_field_plural: Прилагодени полиња + label_custom_field_new: Ðово прилагодено поле + label_enumerations: Enumerations + label_enumeration_new: Ðова вредноÑÑ‚ + label_information: Информација + label_information_plural: Информации + label_please_login: Ðајави Ñе + label_register: РегиÑтрирај Ñе + label_login_with_open_id_option: или најави Ñе Ñо OpenID + label_password_lost: Изгубена лозинка + label_home: Почетна + label_my_page: Мојата Ñтрана + label_my_account: Мојот профил + label_my_projects: Мои проекти + label_my_page_block: Блок елемент + label_administration: ÐдминиÑтрација + label_login: Ðајави Ñе + label_logout: Одјави Ñе + label_help: Помош + label_reported_issues: Пријавени задачи + label_assigned_to_me_issues: Задачи доделени на мене + label_last_login: ПоÑледна најава + label_registered_on: РегиÑтриран на + label_activity: ÐктивноÑÑ‚ + label_overall_activity: Севкупна активноÑÑ‚ + label_user_activity: "ÐктивноÑÑ‚ на {{value}}" + label_new: Ðова + label_logged_as: Ðајавени Ñте како + label_environment: Опкружување + label_authentication: Ðвтентикација + label_auth_source: Режим на автентикација + label_auth_source_new: Ðов режим на автентикација + label_auth_source_plural: Режими на автентикација + label_subproject_plural: Подпроекти + label_subproject_new: Ðов подпроект + label_and_its_subprojects: "{{value}} и неговите подпроекти" + label_min_max_length: Мин. - МакÑ. должина + label_list: ЛиÑта + label_date: Дата + label_integer: Integer + label_float: Float + label_boolean: Boolean + label_string: ТекÑÑ‚ + label_text: Долг текÑÑ‚ + label_attribute: Ðтрибут + label_attribute_plural: Ðтрибути + label_download: "{{count}} превземање" + label_download_plural: "{{count}} превземања" + label_no_data: Ðема податоци за прикажување + label_change_status: Промени ÑÑ‚Ð°Ñ‚ÑƒÑ + label_history: ИÑторија + label_attachment: Датотека + label_attachment_new: Ðова датотека + label_attachment_delete: Избриши датотека + label_attachment_plural: Датотеки + label_file_added: Датотеката е додадена + label_report: Извештај + label_report_plural: Извештаи + label_news: ÐовоÑÑ‚ + label_news_new: Додади новоÑÑ‚ + label_news_plural: ÐовоÑти + label_news_latest: ПоÑледни новоÑти + label_news_view_all: Прегледај ги Ñите новоÑти + label_news_added: ÐовоÑтта е додадена + label_settings: Settings + label_overview: Преглед + label_version: Верзија + label_version_new: Ðова верзија + label_version_plural: Верзии + label_close_versions: Затвори ги завршените врзии + label_confirmation: Потврда + label_export_to: 'ДоÑтапно и во:' + label_read: Прочитај... + label_public_projects: Јавни проекти + label_open_issues: отворена + label_open_issues_plural: отворени + label_closed_issues: затворена + label_closed_issues_plural: затворени + label_x_open_issues_abbr_on_total: + zero: 0 отворени / {{total}} + one: 1 отворена / {{total}} + other: "{{count}} отворени / {{total}}" + label_x_open_issues_abbr: + zero: 0 отворени + one: 1 отворена + other: "{{count}} отворени" + label_x_closed_issues_abbr: + zero: 0 затворени + one: 1 затворена + other: "{{count}} затворени" + label_total: Вкупно + label_permissions: ОвлаÑтувања + label_current_status: Моментален ÑÑ‚Ð°Ñ‚ÑƒÑ + label_new_statuses_allowed: Дозволени нови ÑтатуÑи + label_all: Ñите + label_none: ниеден + label_nobody: никој + label_next: Следно + label_previous: Претходно + label_used_by: КориÑтено од + label_details: Детали + label_add_note: Додади белешка + label_per_page: По Ñтрана + label_calendar: Календар + label_months_from: меÑеци од + label_gantt: Gantt + label_internal: Internal + label_last_changes: "поÑледни {{count}} промени" + label_change_view_all: Прегледај ги Ñите промени + label_personalize_page: Прилагоди ја Ñтранава + label_comment: Коментар + label_comment_plural: Коментари + label_x_comments: + zero: нема коментари + one: 1 коментар + other: "{{count}} коментари" + label_comment_add: Додади коментар + label_comment_added: Коментарот е додаден + label_comment_delete: Избриши коментари + label_query: Custom query + label_query_plural: Custom queries + label_query_new: New query + label_filter_add: Додади филтер + label_filter_plural: Филтри + label_equals: е + label_not_equals: не е + label_in_less_than: за помалку од + label_in_more_than: за повеќе од + label_greater_or_equal: '>=' + label_less_or_equal: '<=' + label_in: во + label_today: Ð´ÐµÐ½ÐµÑ + label_all_time: цело време + label_yesterday: вчера + label_this_week: оваа недела + label_last_week: минатата недела + label_last_n_days: "поÑледните {{count}} дена" + label_this_month: овој меÑец + label_last_month: минатиот меÑец + label_this_year: оваа година + label_date_range: Date range + label_less_than_ago: пред помалку од денови + label_more_than_ago: пред повеќе од денови + label_ago: пред денови + label_contains: Ñодржи + label_not_contains: не Ñодржи + label_day_plural: денови + label_repository: Складиште + label_repository_plural: Складишта + label_browse: ПрелиÑтувај + label_modification: "{{count}} промени" + label_modification_plural: "{{count}} промени" + label_branch: Гранка + label_tag: Tag + label_revision: Ревизија + label_revision_plural: Ревизии + label_revision_id: "Ревизија {{value}}" + label_associated_revisions: Associated revisions + label_added: added + label_modified: modified + label_copied: copied + label_renamed: renamed + label_deleted: deleted + label_latest_revision: ПоÑледна ревизија + label_latest_revision_plural: ПоÑледни ревизии + label_view_revisions: Прегледај ги ревизиите + label_view_all_revisions: Прегледај ги Ñите ревизии + label_max_size: МакÑ. големина + label_sort_highest: ПремеÑти најгоре + label_sort_higher: ПремеÑти нагоре + label_sort_lower: ПремеÑти надоле + label_sort_lowest: ПремеÑти најдоле + label_roadmap: Roadmap + label_roadmap_due_in: "Due in {{value}}" + label_roadmap_overdue: "КаÑни {{value}}" + label_roadmap_no_issues: Ðема задачи за оваа верзија + label_search: Барај + label_result_plural: Резултати + label_all_words: Сите зборови + label_wiki: Вики + label_wiki_edit: Вики уредување + label_wiki_edit_plural: Вики уредувања + label_wiki_page: Вики Ñтраница + label_wiki_page_plural: Вики Ñтраници + label_index_by_title: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ наÑлов + label_index_by_date: Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ дата + label_current_version: Current version + label_preview: Preview + label_feed_plural: Feeds + label_changes_details: Детали за Ñите промени + label_issue_tracking: Следење на задачи + label_spent_time: Потрошено време + label_overall_spent_time: Вкупно потрошено време + label_f_hour: "{{value}} чаÑ" + label_f_hour_plural: "{{value}} чаÑа" + label_time_tracking: Следење на време + label_change_plural: Промени + label_statistics: СтатиÑтики + label_commits_per_month: Commits per month + label_commits_per_author: Commits per author + label_view_diff: View differences + label_diff_inline: inline + label_diff_side_by_side: side by side + label_options: Опции + label_copy_workflow_from: Copy workflow from + label_permissions_report: Permissions report + label_watched_issues: Watched issues + label_related_issues: Поврзани задачи + label_applied_status: Applied status + label_loading: Loading... + label_relation_new: Ðова релација + label_relation_delete: Избриши релација + label_relates_to: related to + label_duplicates: дупликати + label_duplicated_by: duplicated by + label_blocks: blocks + label_blocked_by: блокирано од + label_precedes: претходи + label_follows: Ñледи + label_end_to_start: крај до почеток + label_end_to_end: крај до крај + label_start_to_start: почеток до почеток + label_start_to_end: почеток до крај + label_stay_logged_in: ОÑтанете најавени + label_disabled: disabled + label_show_completed_versions: Show completed versions + label_me: Ñ˜Ð°Ñ + label_board: Форум + label_board_new: Ðов форум + label_board_plural: Форуми + label_board_locked: Заклучен + label_board_sticky: Sticky + label_topic_plural: Теми + label_message_plural: Пораки + label_message_last: ПоÑледна порака + label_message_new: Ðова порака + label_message_posted: Поракате е додадена + label_reply_plural: Одговори + label_send_information: ИÑпрати ги информациите за профилот на кориÑникот + label_year: Година + label_month: МеÑец + label_week: Ðедела + label_date_from: Од + label_date_to: До + label_language_based: Според јазикот на кориÑникот + label_sort_by: "Подреди Ñпоред {{value}}" + label_send_test_email: ИÑпрати теÑÑ‚ е-порака + label_feeds_access_key: RSS клуч за приÑтап + label_missing_feeds_access_key: ÐедоÑтика RSS клуч за приÑтап + label_feeds_access_key_created_on: "RSS клучот за приÑтап креиран пред {{value}}" + label_module_plural: Модули + label_added_time_by: "Додадено од {{author}} пред {{age}}" + label_updated_time_by: "Ðжурирано од {{author}} пред {{age}}" + label_updated_time: "Ðжурирано пред {{value}}" + label_jump_to_a_project: Префрли Ñе на проект... + label_file_plural: Датотеки + label_changeset_plural: Changesets + label_default_columns: ОÑновни колони + label_no_change_option: (Без промена) + label_bulk_edit_selected_issues: Групно уредување на задачи + label_theme: Тема + label_default: Default + label_search_titles_only: Пребарувај Ñамо наÑлови + label_user_mail_option_all: "За било кој наÑтан во Ñите мои проекти" + label_user_mail_option_selected: "За било кој наÑтан Ñамо во избраните проекти..." + label_user_mail_no_self_notified: "Ðе ме извеÑтувај за промените што Ñ˜Ð°Ñ Ð³Ð¸ правам" + label_registration_activation_by_email: активација на профил преку е-пошта + label_registration_manual_activation: мануелна активација на профил + label_registration_automatic_activation: автоматÑка активација на профил + label_display_per_page: "По Ñтрана: {{value}}" + label_age: Age + label_change_properties: Change properties + label_general: Општо + label_more: Повеќе + label_scm: SCM + label_plugins: Додатоци + label_ldap_authentication: LDAP автентикација + label_downloads_abbr: Превземања + label_optional_description: ÐžÐ¿Ð¸Ñ (незадолжително) + label_add_another_file: Додади уште една датотека + label_preferences: Preferences + label_chronological_order: Во хронолошки ред + label_reverse_chronological_order: In reverse chronological order + label_planning: Планирање + label_incoming_emails: Дојдовни е-пораки + label_generate_key: Генерирај клуч + label_issue_watchers: Watchers + label_example: Пример + label_display: Прикажи + label_sort: Подреди + label_ascending: РаÑтечки + label_descending: Опаѓачки + label_date_from_to: Од {{start}} до {{end}} + label_wiki_content_added: Вики Ñтраница додадена + label_wiki_content_updated: Вики Ñтраница ажурирана + label_group: Група + label_group_plural: Групи + label_group_new: Ðова група + label_time_entry_plural: Потрошено време + label_version_sharing_none: Ðе Ñподелено + label_version_sharing_descendants: Со Ñите подпроекти + label_version_sharing_hierarchy: Со хиерархијата на проектот + label_version_sharing_tree: Со дрвото на проектот + label_version_sharing_system: Со Ñите проекти + label_update_issue_done_ratios: Update issue done ratios + label_copy_source: Извор + label_copy_target: ДеÑтинација + label_copy_same_as_target: ИÑто како деÑтинацијата + label_display_used_statuses_only: Only display statuses that are used by this tracker + label_api_access_key: API клуч за приÑтап + label_missing_api_access_key: ÐедоÑтига API клуч за приÑтап + label_api_access_key_created_on: "API клучот за приÑтап е креиран пред {{value}}" + label_profile: Профил + label_subtask_plural: Подзадачи + label_project_copy_notifications: Праќај извеÑтувања по е-пошта при копирање на проект + + button_login: Ðајави Ñе + button_submit: ИÑпрати + button_save: Зачувај + button_check_all: Штиклирај ги Ñите + button_uncheck_all: Одштиклирај ги Ñите + button_delete: Избриши + button_create: Креирај + button_create_and_continue: Креирај и продолжи + button_test: ТеÑÑ‚ + button_edit: Уреди + button_add: Додади + button_change: Промени + button_apply: Примени + button_clear: Избриши + button_lock: Заклучи + button_unlock: Отклучи + button_download: Превземи + button_list: List + button_view: Прегледај + button_move: ПремеÑти + button_move_and_follow: ПремеÑти и Ñледи + button_back: Back + button_cancel: Откажи + button_activate: Ðктивирај + button_sort: Подреди + button_log_time: Бележи време + button_rollback: Rollback to this version + button_watch: Следи + button_unwatch: Ðе Ñледи + button_reply: Одговори + button_archive: Ðрхивирај + button_unarchive: Одархивирај + button_reset: Reset + button_rename: Преименувај + button_change_password: Промени лозинка + button_copy: Копирај + button_copy_and_follow: Копирај и Ñледи + button_annotate: Annotate + button_update: Ðжурирај + button_configure: Конфигурирај + button_quote: Цитирај + button_duplicate: Копирај + button_show: Show + + status_active: активни + status_registered: региÑтрирани + status_locked: заклучени + + version_status_open: отворени + version_status_locked: заклучени + version_status_closed: затворени + + field_active: Active + + text_select_mail_notifications: Изберете за кои наÑтани да Ñе праќаат извеÑтувања по е-пошта да Ñе праќаат. + text_regexp_info: eg. ^[A-Z0-9]+$ + text_min_max_length_info: 0 значи без ограничување + text_project_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете проектот и Ñите поврзани податоци? + text_subprojects_destroy_warning: "Ðеговите подпроекти: {{value}} иÑто така ќе бидат избришани." + text_workflow_edit: Select a role and a tracker to edit the workflow + text_are_you_sure: Дали Ñте Ñигурни? + text_journal_changed: "{{label}} променето од {{old}} во {{new}}" + text_journal_set_to: "{{label}} set to {{value}}" + text_journal_deleted: "{{label}} избришан ({{old}})" + text_journal_added: "{{label}} {{value}} додаден" + text_tip_issue_begin_day: задачи што почнуваат овој ден + text_tip_issue_end_day: задачи што завршуваат овој ден + text_tip_issue_begin_end_day: задачи што почнуваат и завршуваат овој ден + text_project_identifier_info: 'Само мали букви (a-z), бројки и dashes Ñе дозволени<br />По зачувувањето, идентификаторот неможе да Ñе Ñмени.' + text_caracters_maximum: "{{count}} знаци макÑимум." + text_caracters_minimum: "Мора да е најмалку {{count}} знаци долго." + text_length_between: "Должина помеѓу {{min}} и {{max}} знаци." + text_tracker_no_workflow: No workflow defined for this tracker + text_unallowed_characters: Ðедозволени знаци + text_comma_separated: Дозволени Ñе повеќе вредноÑти (разделени Ñо запирка). + text_line_separated: Дозволени Ñе повеќе вредноÑти (една линија за Ñекоја вредноÑÑ‚). + text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages + text_issue_added: "Задачата {{id}} е пријавена од {{author}}." + text_issue_updated: "Задачата {{id}} е ажурирана од {{author}}." + text_wiki_destroy_confirmation: Дали Ñте Ñигурни дека Ñакате да го избришете ова вики и целата негова Ñодржина? + text_issue_category_destroy_question: "Ðекои задачи ({{count}}) Ñе доделени на оваа категорија. Што Ñакате да правите?" + text_issue_category_destroy_assignments: Remove category assignments + text_issue_category_reassign_to: Додели ги задачите на оваа категорија + text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)." + text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded." + text_load_default_configuration: Load the default configuration + text_status_changed_by_changeset: "Applied in changeset {{value}}." + text_issues_destroy_confirmation: 'Дали Ñте Ñигурни дека Ñакате да ги избришете избраните задачи?' + text_select_project_modules: 'Изберете модули за овој проект:' + text_default_administrator_account_changed: Default administrator account changed + text_file_repository_writable: Во папката за прилози може да Ñе запишува + text_plugin_assets_writable: Во папката за додатоци може да Ñе запишува + text_rmagick_available: RMagick available (незадолжително) + text_destroy_time_entries_question: "{{hours}} hours were reported on the issues you are about to delete. What do you want to do ?" + text_destroy_time_entries: Delete reported hours + text_assign_time_entries_to_project: Додели ги пријавените чаÑови на проектот + text_reassign_time_entries: 'Reassign reported hours to this issue:' + text_user_wrote: "{{value}} напиша:" + text_enumeration_destroy_question: "{{count}} objects are assigned to this value." + text_enumeration_category_reassign_to: 'Reassign them to this value:' + text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата." + text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." + text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' + text_custom_field_possible_values_info: 'One line for each value' + text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" + text_wiki_page_nullify_children: "Keep child pages as root pages" + text_wiki_page_destroy_children: "Delete child pages and all their descendants" + text_wiki_page_reassign_children: "Reassign child pages to this parent page" + 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.\nAre you sure you want to continue?" + text_zoom_in: Zoom in + text_zoom_out: Zoom out + + default_role_manager: Менаџер + default_role_developer: Developer + default_role_reporter: Reporter + default_tracker_bug: Грешка + default_tracker_feature: ФункционалноÑÑ‚ + default_tracker_support: Поддршка + default_issue_status_new: Ðова + default_issue_status_in_progress: Во Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑ + default_issue_status_resolved: Разрешена + default_issue_status_feedback: Feedback + default_issue_status_closed: Затворена + default_issue_status_rejected: Одбиена + default_doc_category_user: КориÑничка документација + default_doc_category_tech: Техничка документација + default_priority_low: Ðизок + default_priority_normal: Ðормален + default_priority_high: ВиÑок + default_priority_urgent: Итно + default_priority_immediate: Веднаш + default_activity_design: Дизајн + default_activity_development: Развој + + enumeration_issue_priorities: Приоритети на задача + enumeration_doc_categories: Категории на документ + enumeration_activities: ÐктивноÑти (Ñледење на време) + enumeration_system_activity: СиÑтемÑка активноÑÑ‚ + + button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" + text_are_you_sure_with_children: Delete issue and all child issues? + field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/mn.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/mn.yml Fri Nov 19 13:24:41 2010 +0000 @@ -184,10 +184,10 @@ mail_body_account_activation_request: "Ð¨Ð¸Ð½Ñ Ñ…ÑÑ€ÑглÑгч ({{value}}) бүртгүүлÑÑн байна. Таны баталгаажуулахыг хүлÑÑж байна:" mail_subject_reminder: "Дараагийн өдрүүдÑд {{count}} аÑуудлыг шийдÑÑ… Ñ…ÑÑ€ÑгтÑй ({{days}})" mail_body_reminder: "Танд оноогдÑон {{count}} аÑуудлуудыг дараагийн {{days}} өдрүүдÑд шийдÑÑ… Ñ…ÑÑ€ÑгтÑй:" - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: "The '{{page}}' wiki page has been added by {{author}}." - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - mail_body_wiki_content_updated: "The '{{page}}' wiki page has been updated by {{author}}." + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: "The '{{id}}' wiki page has been added by {{author}}." + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" + mail_body_wiki_content_updated: "The '{{id}}' wiki page has been updated by {{author}}." gui_validation_error: 1 алдаа gui_validation_error_plural: "{{count}} алдаа" @@ -252,7 +252,6 @@ field_attr_lastname: Овог аттрибут field_attr_mail: ИмÑйл аттрибут field_onthefly: Ð¥Ò¯ÑÑÑн үедÑÑ Ñ…ÑÑ€ÑглÑгч Ò¯Ò¯ÑгÑÑ… - field_start_date: ÐхлÑл field_done_ratio: %% ГүйцÑтгÑÑÑн field_auth_source: ÐÑвтрÑÑ… арга field_hide_mail: Миний имÑйл хаÑгийг нуу @@ -707,7 +706,6 @@ label_search_titles_only: Зөвхөн гарчиг хайх label_user_mail_option_all: "Миний бүх төÑөл дÑÑрх бүх үзÑгдлүүдийн хувьд" label_user_mail_option_selected: "СонгогдÑон төÑлүүдийн хувьд бүх үзÑгдÑл дÑÑÑ€..." - label_user_mail_option_none: "Зөвхөн миний ажиглаж байгаа Ð·Ò¯Ð¹Ð»Ñ ÑŽÐ¼ÑƒÑƒ надад хамаатай бол" label_user_mail_no_self_notified: "Миний өөрийн хийÑÑн өөрчлөлтүүдийн тухай надад мÑдÑгдÑÑ… Ñ…ÑÑ€Ñггүй" label_registration_activation_by_email: данÑыг имÑйлÑÑÑ€ идÑвхжүүлÑÑ… label_registration_manual_activation: данÑыг гараар идÑвхжүүлÑÑ… @@ -821,9 +819,9 @@ text_journal_set_to: "{{label}} {{value}} болгож өөрчиллөө" text_journal_deleted: "{{label}} уÑÑ‚Ñан ({{old}})" text_journal_added: "{{label}} {{value}} нÑмÑгдÑÑн" - text_tip_task_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил - text_tip_task_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил - text_tip_task_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил + text_tip_issue_begin_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑ… ажил + text_tip_issue_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ дууÑах ажил + text_tip_issue_begin_end_day: ÑÐ½Ñ Ó©Ð´Ó©Ñ€ ÑхлÑÑд мөн дууÑч байгаа ажил text_project_identifier_info: 'Зөвхөн жижиг Ò¯Ñгүүд болон (a-z), тоо and дундуур Ð·ÑƒÑ€Ð°Ð°Ñ Ð°ÑˆÐ¸Ð³Ð»Ð°Ð¶ болно.<br />ÐÑгÑнт хадгалÑан хойно, төÑлийн глобал нÑрийг өөрлчөх боломжгүй.' text_caracters_maximum: "дÑÑд тал нь {{count}} Ò¯ÑÑг." text_caracters_minimum: "Хамгийн багадаа Ñдаж {{count}} Ñ‚ÑмдÑгт байх." @@ -914,8 +912,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/nl.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/nl.yml Fri Nov 19 13:24:41 2010 +0000 @@ -256,7 +256,6 @@ field_role: Rol field_searchable: Doorzoekbaar field_spent_on: Datum - field_start_date: Startdatum field_start_page: Startpagina field_status: Status field_subject: Onderwerp @@ -579,7 +578,6 @@ label_user_activity: "{{value}}'s activiteit" label_user_mail_no_self_notified: "Ik wil niet op de hoogte gehouden worden van wijzigingen die ik zelf maak." label_user_mail_option_all: "Bij elk gebeurtenis in al mijn projecten..." - label_user_mail_option_none: "Alleen in de dingen die ik monitor of in betrokken ben" label_user_mail_option_selected: "Enkel bij elke gebeurtenis op het geselecteerde project..." label_user_new: Nieuwe gebruiker label_user_plural: Gebruikers @@ -765,9 +763,9 @@ text_select_project_modules: 'Selecteer de modules die u wilt gebruiken voor dit project:' text_status_changed_by_changeset: "Toegepast in changeset {{value}}." text_subprojects_destroy_warning: "De subprojecten: {{value}} zullen ook verwijderd worden." - text_tip_task_begin_day: taak die op deze dag begint - text_tip_task_begin_end_day: taak die op deze dag begint en eindigt - text_tip_task_end_day: taak die op deze dag eindigt + text_tip_issue_begin_day: issue die op deze dag begint + text_tip_issue_begin_end_day: issue die op deze dag begint en eindigt + text_tip_issue_end_day: issue die op deze dag eindigt text_tracker_no_workflow: Geen workflow gedefinieerd voor deze tracker text_unallowed_characters: Niet toegestane tekens text_user_mail_option: "Bij niet-geselecteerde projecten zult u enkel notificaties ontvangen voor issues die u monitort of waar u bij betrokken bent (als auteur of toegewezen persoon)." @@ -798,12 +796,12 @@ text_wiki_page_destroy_children: Verwijder alle subpagina's en onderliggende pagina's setting_password_min_length: Minimum wachtwoord lengte field_group_by: Groepeer resultaten per - mail_subject_wiki_content_updated: "'{{page}}' wiki pagina is bijgewerkt" + mail_subject_wiki_content_updated: "'{{id}}' wiki pagina is bijgewerkt" label_wiki_content_added: Wiki pagina toegevoegd - mail_subject_wiki_content_added: "'{{page}}' wiki pagina is toegevoegd" - mail_body_wiki_content_added: The '{{page}}' wiki pagina is toegevoegd door {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki pagina is toegevoegd" + mail_body_wiki_content_added: The '{{id}}' wiki pagina is toegevoegd door {{author}}. label_wiki_content_updated: Wiki pagina bijgewerkt - mail_body_wiki_content_updated: The '{{page}}' wiki pagina is bijgewerkt door {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki pagina is bijgewerkt door {{author}}. permission_add_project: Maak project setting_new_project_user_role_id: Rol van gebruiker die een project maakt label_view_all_revisions: Bekijk alle revisies @@ -895,8 +893,19 @@ field_time_entries: Log tijd project_module_gantt: Gantt project_module_calendar: Kalender - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/no.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/no.yml Fri Nov 19 13:24:41 2010 +0000 @@ -231,7 +231,6 @@ field_attr_lastname: Etternavnsattributt field_attr_mail: E-post-attributt field_onthefly: On-the-fly brukeropprettelse - field_start_date: Start field_done_ratio: % Ferdig field_auth_source: Autentifikasjonsmodus field_hide_mail: Skjul min e-post-adresse @@ -584,7 +583,6 @@ label_search_titles_only: Søk bare i titler label_user_mail_option_all: "For alle hendelser på mine prosjekter" label_user_mail_option_selected: "For alle hendelser på valgte prosjekt..." - label_user_mail_option_none: "Bare for ting jeg overvåker eller er involvert i" label_user_mail_no_self_notified: "Jeg vil ikke bli varslet om endringer jeg selv gjør" label_registration_activation_by_email: kontoaktivering pr. e-post label_registration_manual_activation: manuell kontoaktivering @@ -654,9 +652,9 @@ text_subprojects_destroy_warning: "Underprojekt(ene): {{value}} vil også bli slettet." text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten text_are_you_sure: Er du sikker ? - text_tip_task_begin_day: oppgaven starter denne dagen - text_tip_task_end_day: oppgaven avsluttes denne dagen - text_tip_task_begin_end_day: oppgaven starter og avsluttes denne dagen + text_tip_issue_begin_day: oppgaven starter denne dagen + text_tip_issue_end_day: oppgaven avsluttes denne dagen + text_tip_issue_begin_end_day: oppgaven starter og avsluttes denne dagen text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.<br />Identifikatoren kan ikke endres etter den er lagret.' text_caracters_maximum: "{{count}} tegn maksimum." text_caracters_minimum: "Må være minst {{count}} tegn langt." @@ -807,12 +805,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -904,8 +902,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/pl.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/pl.yml Fri Nov 19 13:24:41 2010 +0000 @@ -277,7 +277,6 @@ field_role: Rola field_searchable: Przeszukiwalne field_spent_on: Data - field_start_date: Start field_start_page: Strona startowa field_status: Status field_subject: Temat @@ -614,7 +613,6 @@ label_user: Użytkownik label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam." label_user_mail_option_all: "Dla każdego zdarzenia w każdym moim projekcie" - label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorę udział" label_user_mail_option_selected: "Tylko dla każdego zdarzenia w wybranych projektach..." label_user_new: Nowy użytkownik label_user_plural: Użytkownicy @@ -797,9 +795,9 @@ text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:' text_status_changed_by_changeset: "Zastosowane w zmianach {{value}}." text_subprojects_destroy_warning: "Podprojekt(y): {{value}} zostaną także usunięte." - text_tip_task_begin_day: zadanie zaczynające się dzisiaj - text_tip_task_begin_end_day: zadanie zaczynające i kończące się dzisiaj - text_tip_task_end_day: zadanie kończące się dzisiaj + text_tip_issue_begin_day: zadanie zaczynające się dzisiaj + text_tip_issue_begin_end_day: zadanie zaczynające i kończące się dzisiaj + text_tip_issue_end_day: zadanie kończące się dzisiaj text_tracker_no_workflow: Brak przepływu zdefiniowanego dla tego typu zagadnienia text_unallowed_characters: Niedozwolone znaki text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnień, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)." @@ -836,12 +834,12 @@ text_wiki_page_destroy_children: Usuń wszystkie podstrony setting_password_min_length: Minimalna długość hasła field_group_by: Grupuj wyniki wg - mail_subject_wiki_content_updated: "Strona wiki '{{page}}' została uaktualniona" + mail_subject_wiki_content_updated: "Strona wiki '{{id}}' została uaktualniona" label_wiki_content_added: Dodano stronę wiki - mail_subject_wiki_content_added: "Strona wiki '{{page}}' została dodana" - mail_body_wiki_content_added: Strona wiki '{{page}}' została dodana przez {{author}}. + mail_subject_wiki_content_added: "Strona wiki '{{id}}' została dodana" + mail_body_wiki_content_added: Strona wiki '{{id}}' została dodana przez {{author}}. label_wiki_content_updated: Uaktualniono stronę wiki - mail_body_wiki_content_updated: Strona wiki '{{page}}' została uaktualniona przez {{author}}. + mail_body_wiki_content_updated: Strona wiki '{{id}}' została uaktualniona przez {{author}}. permission_add_project: Tworzenie projektu setting_new_project_user_role_id: Rola nadawana twórcom projektów, którzy nie posiadają uprawnień administatora label_view_all_revisions: Pokaż wszystkie rewizje @@ -934,8 +932,19 @@ field_time_entries: Dziennik project_module_gantt: Diagram Gantta project_module_calendar: Kalendarz - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/pt-BR.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/pt-BR.yml Fri Nov 19 13:24:41 2010 +0000 @@ -264,7 +264,6 @@ field_attr_lastname: Atributo para sobrenome field_attr_mail: Atributo para e-mail field_onthefly: Criar usuários dinamicamente ("on-the-fly") - field_start_date: InÃcio field_done_ratio: % Terminado field_auth_source: Modo de autenticação field_hide_mail: Ocultar meu e-mail @@ -622,7 +621,6 @@ label_search_titles_only: Pesquisar somente tÃtulos label_user_mail_option_all: "Para qualquer evento em todos os meus projetos" label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..." - label_user_mail_option_none: "Somente tarefas que eu acompanho ou estou envolvido" label_user_mail_no_self_notified: "Eu não quero ser notificado de minhas próprias modificações" label_registration_activation_by_email: ativação de conta por e-mail label_registration_manual_activation: ativação manual de conta @@ -696,9 +694,9 @@ text_subprojects_destroy_warning: "Seu(s) subprojeto(s): {{value}} também serão excluÃdos." text_workflow_edit: Selecione um papel e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Você tem certeza? - text_tip_task_begin_day: tarefa inicia neste dia - text_tip_task_end_day: tarefa termina neste dia - text_tip_task_begin_end_day: tarefa inicia e termina neste dia + text_tip_issue_begin_day: tarefa inicia neste dia + text_tip_issue_end_day: tarefa termina neste dia + text_tip_issue_begin_end_day: tarefa inicia e termina neste dia text_project_identifier_info: 'Letras minúsculas (a-z), números e hÃfens permitidos.<br />Uma vez salvo, o identificador não poderá ser alterado.' text_caracters_maximum: "máximo {{count}} caracteres" text_caracters_minimum: "deve ter ao menos {{count}} caracteres." @@ -840,12 +838,12 @@ text_wiki_page_destroy_children: Excluir páginas filhas e todas suas descendentes setting_password_min_length: Comprimento mÃnimo para senhas field_group_by: Agrupar por - mail_subject_wiki_content_updated: "A página wiki '{{page}}' foi atualizada" + mail_subject_wiki_content_updated: "A página wiki '{{id}}' foi atualizada" label_wiki_content_added: Página wiki adicionada - mail_subject_wiki_content_added: "A página wiki '{{page}}' foi adicionada" - mail_body_wiki_content_added: A página wiki '{{page}}' foi adicionada por {{author}}. + mail_subject_wiki_content_added: "A página wiki '{{id}}' foi adicionada" + mail_body_wiki_content_added: A página wiki '{{id}}' foi adicionada por {{author}}. label_wiki_content_updated: Página wiki atualizada - mail_body_wiki_content_updated: A página wiki '{{page}}' foi atualizada por {{author}}. + mail_body_wiki_content_updated: A página wiki '{{id}}' foi atualizada por {{author}}. permission_add_project: Criar projeto setting_new_project_user_role_id: Papel atribuÃdo a um usuário não-administrador que cria um projeto label_view_all_revisions: Ver todas as revisões @@ -917,7 +915,7 @@ permission_export_wiki_pages: Exportar páginas wiki setting_cache_formatted_text: Realizar cache de texto formatado permission_manage_project_activities: Gerenciar atividades do projeto - error_unable_delete_issue_status: ImpossÃvel excluir situação da tarefa + error_unable_delete_issue_status: Não foi possÃvel excluir situação da tarefa label_profile: Perfil permission_manage_subtasks: Gerenciar subtarefas field_parent_issue: Tarefa pai @@ -936,9 +934,20 @@ label_overall_spent_time: Tempo gasto geral field_time_entries: Log time project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + project_module_calendar: Calendário + button_edit_associated_wikipage: "Editar página wiki relacionada: {{page_title}}" + text_are_you_sure_with_children: Excluir a tarefa e suas subtarefas? + field_text: Campo de texto + label_user_mail_option_only_owner: Somente para as coisas que eu criei + setting_default_notification_option: Opção padrão de notificação + label_user_mail_option_only_my_events: Somente para as coisas que eu esteja observando ou esteja envolvido + label_user_mail_option_only_assigned: Somente para as coisas que estejam atribuÃdas a mim + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/pt.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/pt.yml Fri Nov 19 13:24:41 2010 +0000 @@ -128,7 +128,7 @@ greater_than_start_date: "deve ser maior que a data inicial" not_same_project: "não pertence ao mesmo projecto" circular_dependency: "Esta relação iria criar uma dependência circular" - cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks" + cant_link_an_issue_with_a_descendant: "Não é possÃvel ligar uma tarefa a uma sub-tarefa que lhe é pertencente" ## Translated by: Pedro Araújo <phcrva19@hotmail.com> actionview_instancetag_blank_option: Seleccione @@ -152,7 +152,7 @@ notice_account_unknown_email: Utilizador desconhecido. notice_can_t_change_password: Esta conta utiliza uma fonte de autenticação externa. Não é possÃvel alterar a palavra-chave. notice_account_lost_email_sent: Foi-lhe enviado um e-mail com as instruções para escolher uma nova palavra-chave. - notice_account_activated: A sua conta foi activada. Já pode autenticar-se. + notice_account_activated: A sua conta foi activada. É agora possÃvel autenticar-se. notice_successful_create: Criado com sucesso. notice_successful_update: Alterado com sucesso. notice_successful_delete: Apagado com sucesso. @@ -176,9 +176,9 @@ error_issue_not_found_in_project: 'A tarefa não foi encontrada ou não pertence a este projecto.' mail_subject_lost_password: "Palavra-chave de {{value}}" - mail_body_lost_password: 'Para mudar a sua palavra-chave, clique no link abaixo:' + mail_body_lost_password: 'Para mudar a sua palavra-chave, clique na ligação abaixo:' mail_subject_register: "Activação de conta de {{value}}" - mail_body_register: 'Para activar a sua conta, clique no link abaixo:' + mail_body_register: 'Para activar a sua conta, clique na ligação abaixo:' mail_body_account_information_external: "Pode utilizar a conta {{value}} para autenticar-se." mail_body_account_information: Informação da sua conta mail_subject_account_activation_request: "Pedido de activação da conta {{value}}" @@ -224,7 +224,7 @@ field_priority: Prioridade field_fixed_version: Versão field_user: Utilizador - field_role: Papel + field_role: Função field_homepage: Página field_is_public: Público field_parent: Sub-projecto de @@ -249,7 +249,6 @@ field_attr_lastname: Atributo último nome field_attr_mail: Atributo e-mail field_onthefly: Criação de utilizadores na hora - field_start_date: InÃcio field_done_ratio: % Completo field_auth_source: Modo de autenticação field_hide_mail: Esconder endereço de e-mail @@ -264,8 +263,8 @@ field_is_filter: Usado como filtro field_issue_to: Tarefa relacionada field_delay: Atraso - field_assignable: As tarefas podem ser associados a este papel - field_redirect_existing_links: Redireccionar links existentes + field_assignable: As tarefas podem ser associados a esta função + field_redirect_existing_links: Redireccionar ligações existentes field_estimated_hours: Tempo estimado field_column_names: Colunas field_time_zone: Fuso horário @@ -343,17 +342,17 @@ label_document_new: Novo documento label_document_plural: Documentos label_document_added: Documento adicionado - label_role: Papel - label_role_plural: Papéis - label_role_new: Novo papel - label_role_and_permissions: Papéis e permissões + label_role: Função + label_role_plural: Funções + label_role_new: Nova função + label_role_and_permissions: Funções e permissões label_member: Membro label_member_new: Novo membro label_member_plural: Membros label_tracker: Tipo label_tracker_plural: Tipos label_tracker_new: Novo tipo - label_workflow: Workflow + label_workflow: Fluxo de trabalho label_issue_status: Estado da tarefa label_issue_status_plural: Estados da tarefa label_issue_status_new: Novo estado @@ -553,7 +552,7 @@ label_diff_inline: inline label_diff_side_by_side: lado a lado label_options: Opções - label_copy_workflow_from: Copiar workflow de + label_copy_workflow_from: Copiar fluxo de trabalho de label_permissions_report: Relatório de permissões label_watched_issues: Tarefas observadas label_related_issues: Tarefas relacionadas @@ -609,7 +608,6 @@ label_search_titles_only: Procurar apenas em tÃtulos label_user_mail_option_all: "Para qualquer evento em todos os meus projectos" label_user_mail_option_selected: "Para qualquer evento apenas nos projectos seleccionados..." - label_user_mail_option_none: "Apenas para coisas que esteja a observar ou esteja envolvido" label_user_mail_no_self_notified: "Não quero ser notificado de alterações feitas por mim" label_registration_activation_by_email: Activação da conta por e-mail label_registration_manual_activation: Activação manual da conta @@ -681,16 +679,16 @@ text_min_max_length_info: 0 siginifica sem restrição text_project_destroy_confirmation: Tem a certeza que deseja apagar o projecto e todos os dados relacionados? text_subprojects_destroy_warning: "O(s) seu(s) sub-projecto(s): {{value}} também será/serão apagado(s)." - text_workflow_edit: Seleccione um papel e um tipo de tarefa para editar o workflow + text_workflow_edit: Seleccione uma função e um tipo de tarefa para editar o fluxo de trabalho text_are_you_sure: Tem a certeza? - text_tip_task_begin_day: tarefa a começar neste dia - text_tip_task_end_day: tarefa a acabar neste dia - text_tip_task_begin_end_day: tarefa a começar e acabar neste dia + text_tip_issue_begin_day: tarefa a começar neste dia + text_tip_issue_end_day: tarefa a acabar neste dia + text_tip_issue_begin_end_day: tarefa a começar e acabar neste dia text_project_identifier_info: 'Apenas são permitidos letras minúsculas (a-z), números e hÃfens.<br />Uma vez guardado, o identificador não poderá ser alterado.' text_caracters_maximum: "máximo {{count}} caracteres." text_caracters_minimum: "Deve ter pelo menos {{count}} caracteres." text_length_between: "Deve ter entre {{min}} e {{max}} caracteres." - text_tracker_no_workflow: Sem workflow definido para este tipo de tarefa. + text_tracker_no_workflow: Sem fluxo de trabalho definido para este tipo de tarefa. text_unallowed_characters: Caracteres não permitidos text_comma_separated: Permitidos múltiplos valores (separados por vÃrgula). text_issues_ref_in_commit_messages: Referenciando e fechando tarefas em mensagens de commit @@ -701,7 +699,7 @@ text_issue_category_destroy_assignments: Remover as atribuições à categoria text_issue_category_reassign_to: Re-atribuir as tarefas para esta categoria text_user_mail_option: "Para projectos não seleccionados, apenas receberá notificações acerca de coisas que está a observar ou está envolvido (ex. tarefas das quais foi o criador ou lhes foram atribuÃdas)." - text_no_configuration_data: "Papeis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." + text_no_configuration_data: "Perfis, tipos de tarefas, estados das tarefas e workflows ainda não foram configurados.\nÉ extremamente recomendado carregar as configurações padrão. Será capaz de as modificar depois de estarem carregadas." text_load_default_configuration: Carregar as configurações padrão text_status_changed_by_changeset: "Aplicado no changeset {{value}}." text_issues_destroy_confirmation: 'Tem a certeza que deseja apagar a(s) tarefa(s) seleccionada(s)?' @@ -725,7 +723,7 @@ default_tracker_feature: Funcionalidade default_tracker_support: Suporte default_issue_status_new: Novo - default_issue_status_in_progress: In Progress + default_issue_status_in_progress: Em curso default_issue_status_resolved: Resolvido default_issue_status_feedback: Feedback default_issue_status_closed: Fechado @@ -790,7 +788,7 @@ permission_rename_wiki_pages: Renomear páginas de wiki permission_edit_time_entries: Editar entradas de tempo permission_edit_own_issue_notes: Editar as prórpias notas - setting_gravatar_enabled: Utilizar icons Gravatar + setting_gravatar_enabled: Utilizar Ãcones Gravatar label_example: Exemplo text_repository_usernames_mapping: "Seleccionar ou actualizar o utilizador de Redmine mapeado a cada nome de utilizador encontrado no repositório.\nUtilizadores com o mesmo nome de utilizador ou email no Redmine e no repositório são mapeados automaticamente." permission_edit_own_messages: Editar as próprias mensagens @@ -799,130 +797,141 @@ label_updated_time_by: "Actualizado por {{author}} há {{age}}" text_diff_truncated: '... Este diff foi truncado porque excede o tamanho máximo que pode ser mostrado.' setting_diff_max_lines_displayed: Número máximo de linhas de diff mostradas - text_plugin_assets_writable: Plugin assets directory writable - warning_attachments_not_saved: "{{count}} file(s) could not be saved." - button_create_and_continue: Create and continue - text_custom_field_possible_values_info: 'One line for each value' - label_display: Display - field_editable: Editable - setting_repository_log_display_limit: Maximum number of revisions displayed on file log - setting_file_max_size_displayed: Max size of text files displayed inline - field_watcher: Watcher - setting_openid: Allow OpenID login and registration - field_identity_url: OpenID URL - label_login_with_open_id_option: or login with OpenID - field_content: Content - label_descending: Descending - label_sort: Sort - label_ascending: Ascending - label_date_from_to: From {{start}} to {{end}} + text_plugin_assets_writable: Escrita na pasta de activos dos módulos de extensão possÃvel + warning_attachments_not_saved: "Não foi possÃvel gravar {{count}} ficheiro(s) ." + button_create_and_continue: Criar e continuar + text_custom_field_possible_values_info: 'Uma linha para cada valor' + label_display: Mostrar + field_editable: Editável + setting_repository_log_display_limit: Número máximo de revisões exibido no relatório de ficheiro + setting_file_max_size_displayed: Tamanho máximo dos ficheiros de texto exibidos inline + field_watcher: Observador + setting_openid: Permitir inÃcio de sessão e registo com OpenID + field_identity_url: URL do OpenID + label_login_with_open_id_option: ou inÃcio de sessão com OpenID + field_content: Conteúdo + label_descending: Descendente + label_sort: Ordenar + label_ascending: Ascendente + label_date_from_to: De {{start}} a {{end}} label_greater_or_equal: ">=" label_less_or_equal: <= - text_wiki_page_destroy_question: This page has {{descendants}} child page(s) and descendant(s). What do you want to do? - text_wiki_page_reassign_children: Reassign child pages to this parent page - text_wiki_page_nullify_children: Keep child pages as root pages - text_wiki_page_destroy_children: Delete child pages and all their descendants - setting_password_min_length: Minimum password length - field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" - label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. - label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. - permission_add_project: Create project - setting_new_project_user_role_id: Role given to a non-admin user who creates a project - label_view_all_revisions: View all revisions - label_tag: Tag - label_branch: Branch - error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. - error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses"). - label_group_plural: Groups - label_group: Group - label_group_new: New group - label_time_entry_plural: Spent time - text_journal_changed: "{{label}} changed from {{old}} to {{new}}" - text_journal_set_to: "{{label}} set to {{value}}" - text_journal_deleted: "{{label}} deleted ({{old}})" - text_journal_added: "{{label}} {{value}} added" - field_active: Active - enumeration_system_activity: System Activity - permission_delete_issue_watchers: Delete watchers - version_status_closed: closed - version_status_locked: locked - version_status_open: open - error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened - label_user_anonymous: Anonymous - button_move_and_follow: Move and follow - setting_default_projects_modules: Default enabled modules for new projects - setting_gravatar_default: Default Gravatar image - field_sharing: Sharing - label_version_sharing_hierarchy: With project hierarchy - label_version_sharing_system: With all projects - label_version_sharing_descendants: With subprojects - label_version_sharing_tree: With project tree - label_version_sharing_none: Not shared - error_can_not_archive_project: This project can not be archived - button_duplicate: Duplicate - button_copy_and_follow: Copy and follow - label_copy_source: Source - setting_issue_done_ratio: Calculate the issue done ratio with - setting_issue_done_ratio_issue_status: Use the issue status - error_issue_done_ratios_not_updated: Issue done ratios not updated. - error_workflow_copy_target: Please select target tracker(s) and role(s) - setting_issue_done_ratio_issue_field: Use the issue field - label_copy_same_as_target: Same as target - label_copy_target: Target - notice_issue_done_ratios_updated: Issue done ratios updated. - error_workflow_copy_source: Please select a source tracker or role - label_update_issue_done_ratios: Update issue done ratios - setting_start_of_week: Start calendars on - permission_view_issues: View Issues - label_display_used_statuses_only: Only display statuses that are used by this tracker - 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 + text_wiki_page_destroy_question: Esta página tem {{descendants}} página(s) subordinada(s) e descendente(s). O que deseja fazer? + text_wiki_page_reassign_children: Reatribuir páginas subordinadas a esta página principal + text_wiki_page_nullify_children: Manter páginas subordinadas como páginas raÃz + text_wiki_page_destroy_children: Apagar as páginas subordinadas e todos os seus descendentes + setting_password_min_length: Tamanho mÃnimo de palavra-chave + field_group_by: Agrupar resultados por + mail_subject_wiki_content_updated: "A página Wiki '{{id}}' foi actualizada" + label_wiki_content_added: Página Wiki adicionada + mail_subject_wiki_content_added: "A página Wiki '{{id}}' foi adicionada" + mail_body_wiki_content_added: A página Wiki '{{id}}' foi adicionada por {{author}}. + label_wiki_content_updated: Página Wiki actualizada + mail_body_wiki_content_updated: A página Wiki '{{id}}' foi actualizada por {{author}}. + permission_add_project: Criar projecto + setting_new_project_user_role_id: Função atribuÃda a um utilizador não-administrador que cria um projecto + label_view_all_revisions: Ver todas as revisões + label_tag: Etiqueta + label_branch: Ramo + error_no_tracker_in_project: Este projecto não tem associado nenhum tipo de tarefas. Verifique as definições do projecto. + error_no_default_issue_status: Não está definido um estado padrão para as tarefas. Verifique a sua configuração (dirija-se a "Administração -> Estados da tarefa"). + label_group_plural: Grupos + label_group: Grupo + label_group_new: Novo grupo + label_time_entry_plural: Tempo registado + text_journal_changed: "{{label}} alterado de {{old}} para {{new}}" + text_journal_set_to: "{{label}} configurado como {{value}}" + text_journal_deleted: "{{label}} apagou ({{old}})" + text_journal_added: "{{label}} {{value}} adicionado" + field_active: Activo + enumeration_system_activity: Actividade de sistema + permission_delete_issue_watchers: Apagar observadores + version_status_closed: fechado + version_status_locked: protegido + version_status_open: aberto + error_can_not_reopen_issue_on_closed_version: Não é possÃvel voltar a abrir uma tarefa atribuÃda a uma versão fechada + label_user_anonymous: Anónimo + button_move_and_follow: Mover e seguir + setting_default_projects_modules: Módulos activos por predefinição para novos projectos + setting_gravatar_default: Imagem Gravatar predefinida + field_sharing: Partilha + label_version_sharing_hierarchy: Com hierarquia do projecto + label_version_sharing_system: Com todos os projectos + label_version_sharing_descendants: Com os sub-projectos + label_version_sharing_tree: Com árvore do projecto + label_version_sharing_none: Não partilhado + error_can_not_archive_project: Não é possÃvel arquivar este projecto + button_duplicate: Duplicar + button_copy_and_follow: Copiar e seguir + label_copy_source: Origem + setting_issue_done_ratio: Calcular a percentagem de progresso da tarefa + setting_issue_done_ratio_issue_status: Através do estado da tarefa + error_issue_done_ratios_not_updated: Percentagens de progresso da tarefa não foram actualizadas. + error_workflow_copy_target: Seleccione os tipos de tarefas e funções desejadas + setting_issue_done_ratio_issue_field: Através do campo da tarefa + label_copy_same_as_target: Mesmo que o alvo + label_copy_target: Alvo + notice_issue_done_ratios_updated: Percentagens de progresso da tarefa actualizadas. + error_workflow_copy_source: Seleccione um tipo de tarefa ou função de origem + label_update_issue_done_ratios: Actualizar percentagens de progresso da tarefa + setting_start_of_week: Iniciar calendários a + permission_view_issues: Ver tarefas + label_display_used_statuses_only: Só exibir estados empregues por este tipo de tarefa + label_revision_id: Revisão {{value}} + label_api_access_key: Chave de acesso API + label_api_access_key_created_on: Chave de acesso API criada há {{value}} + label_feeds_access_key: Chave de acesso RSS + notice_api_access_key_reseted: A sua chave de acesso API foi reinicializada. + setting_rest_api_enabled: Activar serviço Web REST + label_missing_api_access_key: Chave de acesso API em falta + label_missing_feeds_access_key: Chave de acesso RSS em falta + button_show: Mostrar + text_line_separated: Vários valores permitidos (uma linha para cada valor). + setting_mail_handler_body_delimiters: Truncar mensagens de correio electrónico após uma destas linhas + permission_add_subprojects: Criar sub-projectos + label_subproject_new: Novo sub-projecto 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_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 - error_unable_delete_issue_status: Unable to delete issue status - label_profile: Profile - permission_manage_subtasks: Manage subtasks - field_parent_issue: Parent task - label_subtask_plural: Subtasks - label_project_copy_notifications: Send email notifications during the project copy - error_can_not_delete_custom_field: Unable to delete custom field - error_unable_to_connect: Unable to connect ({{value}}) - error_can_not_remove_role: This role is in use and can not be deleted. - error_can_not_delete_tracker: This tracker contains issues and can't be deleted. + Está prestes a eliminar parcial ou totalmente as suas permissões. É possÃvel que não possa editar o projecto após esta acção. + Tem a certeza de que deseja continuar? + label_close_versions: Fechar versões completas + label_board_sticky: Fixar mensagem + label_board_locked: Proteger + permission_export_wiki_pages: Exportar páginas Wiki + setting_cache_formatted_text: Colocar formatação do texto na memória cache + permission_manage_project_activities: Gerir actividades do projecto + error_unable_delete_issue_status: Não foi possÃvel apagar o estado da tarefa + label_profile: Perfil + permission_manage_subtasks: Gerir sub-tarefas + field_parent_issue: Tarefa principal + label_subtask_plural: Sub-tarefa + label_project_copy_notifications: Enviar notificações por e-mail durante a cópia do projecto + error_can_not_delete_custom_field: Não foi possÃvel apagar o campo personalizado + error_unable_to_connect: Não foi possÃvel ligar ({{value}}) + error_can_not_remove_role: Esta função está actualmente em uso e não pode ser apagada. + error_can_not_delete_tracker: Existem ainda tarefas nesta categoria. Não é possÃvel apagar este tipo de tarefa. field_principal: Principal - label_my_page_block: My page block - notice_failed_to_save_members: "Failed to save member(s): {{errors}}." - text_zoom_out: Zoom out - text_zoom_in: Zoom in - notice_unable_delete_time_entry: Unable to delete time log entry. - label_overall_spent_time: Overall spent time - field_time_entries: Log time + label_my_page_block: Bloco da minha página + notice_failed_to_save_members: "Erro ao guardar o(s) membro(s): {{errors}}." + text_zoom_out: Ampliar + text_zoom_in: Reduzir + notice_unable_delete_time_entry: Não foi possÃvel apagar a entrada de tempo registado. + label_overall_spent_time: Total de tempo registado + field_time_entries: Tempo registado project_module_gantt: Gantt - project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? + project_module_calendar: Calendário + button_edit_associated_wikipage: "Editar página Wiki associada: {{page_title}}" + text_are_you_sure_with_children: Apagar tarefa e todas as sub-tarefas? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/ro.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/ro.yml Fri Nov 19 13:24:41 2010 +0000 @@ -232,7 +232,6 @@ field_attr_lastname: Atribut nume field_attr_mail: Atribut email field_onthefly: Creare utilizator pe loc - field_start_date: Data începerii field_done_ratio: Realizat (%) field_auth_source: Mod autentificare field_hide_mail: Nu se afișează adresa de email @@ -654,7 +653,6 @@ label_search_titles_only: Caută numai în titluri label_user_mail_option_all: "Pentru orice eveniment, în toate proiectele mele" label_user_mail_option_selected: " Pentru orice eveniment, în proiectele selectate..." - label_user_mail_option_none: "Doar cele urmărite sau cele în care sunt implicat" label_user_mail_no_self_notified: "Nu trimite notificări pentru modificările mele" label_registration_activation_by_email: activare cont prin email label_registration_manual_activation: activare manuală a contului @@ -737,9 +735,9 @@ text_subprojects_destroy_warning: "Se vor șterge și sub-proiectele: {{value}}." text_workflow_edit: Selectați un rol și un tip de tichet pentru a edita modul de lucru text_are_you_sure: Sunteți sigur(ă)? - text_tip_task_begin_day: sarcină care începe în această zi - text_tip_task_end_day: sarcină care se termină în această zi - text_tip_task_begin_end_day: sarcină care începe și se termină în această zi + text_tip_issue_begin_day: sarcină care începe în această zi + text_tip_issue_end_day: sarcină care se termină în această zi + text_tip_issue_begin_end_day: sarcină care începe și se termină în această zi text_project_identifier_info: 'Sunt permise doar litere mici (a-z), numere și cratime.<br />Odată salvat, identificatorul nu mai poate fi modificat.' text_caracters_maximum: "maxim {{count}} caractere." text_caracters_minimum: "Trebuie să fie minim {{count}} caractere." @@ -809,12 +807,12 @@ text_wiki_page_destroy_children: Șterge paginile și descendenții setting_password_min_length: Lungime minimă parolă field_group_by: Grupează după - mail_subject_wiki_content_updated: "Pagina wiki '{{page}}' a fost actualizată" + mail_subject_wiki_content_updated: "Pagina wiki '{{id}}' a fost actualizată" label_wiki_content_added: Adăugat - mail_subject_wiki_content_added: "Pagina wiki '{{page}}' a fost adăugată" - mail_body_wiki_content_added: Pagina wiki '{{page}}' a fost adăugată de {{author}}. + mail_subject_wiki_content_added: "Pagina wiki '{{id}}' a fost adăugată" + mail_body_wiki_content_added: Pagina wiki '{{id}}' a fost adăugată de {{author}}. label_wiki_content_updated: Actualizat - mail_body_wiki_content_updated: Pagina wiki '{{page}}' a fost actualizată de {{author}}. + mail_body_wiki_content_updated: Pagina wiki '{{id}}' a fost actualizată de {{author}}. permission_add_project: Crează proiect setting_new_project_user_role_id: Rol atribuit utilizatorului non-admin care crează un proiect. label_view_all_revisions: Arată toate reviziile @@ -906,8 +904,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/ru.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/ru.yml Fri Nov 19 13:24:41 2010 +0000 @@ -295,7 +295,6 @@ field_admin: ÐдминиÑтратор field_assignable: Задача может быть назначена Ñтой роли field_assigned_to: Ðазначена - field_assigned_to_role: Роль учаÑтника field_attr_firstname: Ð˜Ð¼Ñ field_attr_lastname: Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ field_attr_login: Ðтрибут РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ @@ -314,6 +313,7 @@ field_description: ОпиÑание field_done_ratio: ГотовноÑть в % field_downloads: Загрузки + field_start_date: Дата начала field_due_date: Дата Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ field_editable: Редактируемый field_effective_date: Дата @@ -345,7 +345,6 @@ field_mail: Email field_mail_notification: Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email field_max_length: МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° - field_member_of_group: Группа учаÑтника field_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° field_name: Ð˜Ð¼Ñ field_new_password: Ðовый пароль @@ -365,7 +364,6 @@ field_role: Роль field_searchable: ДоÑтупно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка field_spent_on: Дата - field_start_date: Ðачата field_start_page: Ð¡Ñ‚Ð°Ñ€Ñ‚Ð¾Ð²Ð°Ñ Ñтраница field_status: Ð¡Ñ‚Ð°Ñ‚ÑƒÑ field_subject: Тема @@ -703,8 +701,10 @@ label_user_activity: "ÐктивноÑть Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {{value}}" label_user_mail_no_self_notified: "Ðе извещать об изменениÑÑ…, которые Ñ Ñделал Ñам" label_user_mail_option_all: "О вÑех ÑобытиÑÑ… во вÑех моих проектах" - label_user_mail_option_none: "Только о тех ÑобытиÑÑ…, которые Ñ Ð¾Ñ‚Ñлеживаю или в которых Ñ ÑƒÑ‡Ð°Ñтвую" label_user_mail_option_selected: "О вÑех ÑобытиÑÑ… только в выбранном проекте..." + label_user_mail_option_only_owner: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñ ÑвлÑÑŽÑÑŒ владельцем + label_user_mail_option_only_my_events: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые Ñ Ð¾Ñ‚Ñлеживаю или в которых учаÑтвую + label_user_mail_option_only_assigned: Только Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð², которые назначены мне label_user_new: Ðовый пользователь label_user_plural: Пользователи label_version: ВерÑÐ¸Ñ @@ -867,6 +867,7 @@ setting_cross_project_issue_relations: Разрешить переÑечение задач по проектам setting_date_format: Формат даты setting_default_language: Язык по умолчанию + setting_default_notification_option: СпоÑоб Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию setting_default_projects_public: Ðовые проекты ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‰ÐµÐ´Ð¾Ñтупными setting_diff_max_lines_displayed: МакÑимальное чиÑло Ñтрок Ð´Ð»Ñ diff setting_display_subprojects_issues: Отображение подпроектов по умолчанию @@ -941,9 +942,9 @@ text_select_project_modules: 'Выберите модули, которые будут иÑпользованы в проекте:' text_status_changed_by_changeset: "Реализовано в {{value}} редакции." text_subprojects_destroy_warning: "Подпроекты: {{value}} также будут удалены." - text_tip_task_begin_day: дата начала задачи - text_tip_task_begin_end_day: начало задачи и окончание ее в Ñтот день - text_tip_task_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ + text_tip_issue_begin_day: дата начала задачи + text_tip_issue_begin_end_day: начало задачи и окончание ее в Ñтот день + text_tip_issue_end_day: дата Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ñ‡Ð¸ text_tracker_no_workflow: Ð”Ð»Ñ Ñтого трекера поÑледовательноÑть дейÑтвий не определена text_unallowed_characters: Запрещенные Ñимволы text_user_mail_option: "Ð”Ð»Ñ Ð½ÐµÐ²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… проектов, Ð’Ñ‹ будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ о том что проÑматриваете или в чем учаÑтвуете (например, вопроÑÑ‹, автором которых Ð’Ñ‹ ÑвлÑетеÑÑŒ или которые Вам назначены)." @@ -958,12 +959,12 @@ text_wiki_page_destroy_children: Удалить дочерние Ñтраницы и вÑех их потомков setting_password_min_length: ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° Ð¿Ð°Ñ€Ð¾Ð»Ñ field_group_by: Группировать результаты по - mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{page}}' была обновлена" + mail_subject_wiki_content_updated: "Wiki-Ñтраница '{{id}}' была обновлена" label_wiki_content_added: Добавлена wiki-Ñтраница - mail_subject_wiki_content_added: "Wiki-Ñтраница '{{page}}' была добавлена" - mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{page}}'." + mail_subject_wiki_content_added: "Wiki-Ñтраница '{{id}}' была добавлена" + mail_body_wiki_content_added: "{{author}} добавил(а) wiki-Ñтраницу '{{id}}'." label_wiki_content_updated: Обновлена wiki-Ñтраница - mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{page}}'." + mail_body_wiki_content_updated: "{{author}} обновил(а) wiki-Ñтраницу '{{id}}'." permission_add_project: Создание проекта setting_new_project_user_role_id: Роль, Ð½Ð°Ð·Ð½Ð°Ñ‡Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ñоздавшему проект label_view_all_revisions: Показать вÑе ревизии @@ -1035,3 +1036,12 @@ notice_unable_delete_time_entry: Ðевозможно удалить запиÑÑŒ журнала. label_overall_spent_time: Ð’Ñего затрачено времени + label_user_mail_option_none: Ðет Ñобытий + field_member_of_group: Группа назначенного + field_assigned_to_role: Роль назначенного + notice_not_authorized_archived_project: Запрашиваемый проект был архивирован. + + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/sk.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/sk.yml Fri Nov 19 13:24:41 2010 +0000 @@ -231,7 +231,6 @@ field_attr_lastname: Priezvisko (atribut) field_attr_mail: Email (atribut) field_onthefly: Automatické vytváranie užÃvateľov - field_start_date: ZaÄiatok field_done_ratio: % hotovo field_auth_source: AutentifikaÄný mód field_hide_mail: NezobrazovaÅ¥ môj email @@ -581,7 +580,6 @@ label_search_titles_only: VyhľadávaÅ¥ iba v názvoch label_user_mail_option_all: "Pre vÅ¡etky události vÅ¡etkých mojÃch projektov" label_user_mail_option_selected: "Pre vÅ¡etky události vybraných projektov" - label_user_mail_option_none: "Len pre události, ktoré sledujem alebo sa ma týkajú" label_user_mail_no_self_notified: "NezasielaÅ¥ informácie o mnou vytvorených zmenách" label_registration_activation_by_email: aktivácia úÄtu emailom label_registration_manual_activation: manuálna aktivácia úÄtu @@ -649,9 +647,9 @@ text_project_destroy_confirmation: Ste si istý, že chcete odstránit tento projekt a vÅ¡etky súvisiace dáta ? text_workflow_edit: Vyberte rolu a frontu k úprave workflow text_are_you_sure: Ste si istý? - text_tip_task_begin_day: úloha zaÄÃna v tento deň - text_tip_task_end_day: úloha konÄà v tento deň - text_tip_task_begin_end_day: úloha zaÄÃna a konÄà v tento deň + text_tip_issue_begin_day: úloha zaÄÃna v tento deň + text_tip_issue_end_day: úloha konÄà v tento deň + text_tip_issue_begin_end_day: úloha zaÄÃna a konÄà v tento deň text_project_identifier_info: 'Povolené znaky sú malé pÃsmena (a-z), ÄÃsla a pomlÄka.<br />Po uloženà už nieje možné identifikátor zmeniÅ¥.' text_caracters_maximum: "{{count}} znakov maximálne." text_caracters_minimum: "Musà byÅ¥ aspoň {{count}} znaky/ov dlhé." @@ -810,13 +808,13 @@ text_wiki_page_destroy_children: VymazaÅ¥ podstránky a vÅ¡etkých ich potomkov setting_password_min_length: Minimálna dĺžka hesla field_group_by: Skupinové výsledky podľa - mail_subject_wiki_content_updated: "'{{page}}' Wiki stránka bola aktualizovaná" + mail_subject_wiki_content_updated: "'{{id}}' Wiki stránka bola aktualizovaná" label_wiki_content_added: Wiki stránka pridaná - mail_subject_wiki_content_added: "'{{page}}' Wiki stránka bola pridaná" - mail_body_wiki_content_added: The '{{page}}' Wiki stránka bola pridaná užÃvateľom {{author}}. + mail_subject_wiki_content_added: "'{{id}}' Wiki stránka bola pridaná" + mail_body_wiki_content_added: The '{{id}}' Wiki stránka bola pridaná užÃvateľom {{author}}. permission_add_project: Vytvorenie projektu label_wiki_content_updated: Wiki stránka aktualizovaná - mail_body_wiki_content_updated: Wiki stránka '{{page}}' bola aktualizovaná užÃvateľom {{author}}. + mail_body_wiki_content_updated: Wiki stránka '{{id}}' bola aktualizovaná užÃvateľom {{author}}. setting_repositories_encodings: Kódovanie repozitára setting_new_project_user_role_id: Rola dána non-admin užÃvateľovi, ktorý vytvorà projekt label_view_all_revisions: ZobraziÅ¥ vÅ¡etkz revÃzie @@ -908,8 +906,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/sl.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/sl.yml Fri Nov 19 13:24:41 2010 +0000 @@ -236,7 +236,6 @@ field_attr_lastname: Oznaka za priimek field_attr_mail: Oznaka za e-naslov field_onthefly: Sprotna izdelava uporabnikov - field_start_date: ZaÄetek field_done_ratio: % Narejeno field_auth_source: NaÄin overovljanja field_hide_mail: Skrij moj e-naslov @@ -650,7 +649,6 @@ label_search_titles_only: PreiÅ¡Äi samo naslove label_user_mail_option_all: "Za vsak dogodek v vseh mojih projektih" label_user_mail_option_selected: "Za vsak dogodek samo na izbranih projektih..." - label_user_mail_option_none: "Samo za zadeve ki jih spremljam ali sem v njih udeležen(a)" label_user_mail_no_self_notified: "Ne želim biti opozorjen(a) na spremembe, ki jih naredim sam(a)" label_registration_activation_by_email: aktivacija raÄuna po e-poÅ¡ti label_registration_manual_activation: roÄna aktivacija raÄuna @@ -725,9 +723,9 @@ text_subprojects_destroy_warning: "Njegov(i) podprojekt(i): {{value}} bodo prav tako izbrisani." text_workflow_edit: Izberite vlogo in zahtevek za urejanje poteka dela text_are_you_sure: Ali ste prepriÄani? - text_tip_task_begin_day: naloga z zaÄetkom na ta dan - text_tip_task_end_day: naloga z zakljuÄkom na ta dan - text_tip_task_begin_end_day: naloga ki se zaÄne in konÄa ta dan + text_tip_issue_begin_day: naloga z zaÄetkom na ta dan + text_tip_issue_end_day: naloga z zakljuÄkom na ta dan + text_tip_issue_begin_end_day: naloga ki se zaÄne in konÄa ta dan text_project_identifier_info: 'Dovoljene so samo male Ärke (a-z), Å¡tevilke in vezaji.<br />Enkrat shranjen identifikator ne more biti spremenjen.' text_caracters_maximum: "najveÄ {{count}} znakov." text_caracters_minimum: "Mora biti vsaj dolg vsaj {{count}} znakov." @@ -812,12 +810,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -909,8 +907,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/sr-YU.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/sr-YU.yml Fri Nov 19 13:24:41 2010 +0000 @@ -192,10 +192,10 @@ mail_body_account_activation_request: "Novi korisnik ({{value}}) je registrovan. Nalog Äeka na vaÅ¡e odobrenje:" mail_subject_reminder: "{{count}} problema dospeva narednih {{days}} dana" mail_body_reminder: "{{count}} problema dodeljenih vama dospeva u narednih {{days}} dana:" - mail_subject_wiki_content_added: "Wiki stranica '{{page}}' je dodata" - mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{page}}'." - mail_subject_wiki_content_updated: "Wiki stranica '{{page}}' je ažurirana" - mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{page}}'." + mail_subject_wiki_content_added: "Wiki stranica '{{id}}' je dodata" + mail_body_wiki_content_added: "{{author}} je dodao wiki stranicu '{{id}}'." + mail_subject_wiki_content_updated: "Wiki stranica '{{id}}' je ažurirana" + mail_body_wiki_content_updated: "{{author}} je ažurirao wiki stranicu '{{id}}'." gui_validation_error: jedna greÅ¡ka gui_validation_error_plural: "{{count}} greÅ¡aka" @@ -261,7 +261,6 @@ field_attr_lastname: Atribut prezimena field_attr_mail: Atribut e-adrese field_onthefly: Kreiranje korisnika u toku rada - field_start_date: PoÄetak field_done_ratio: % uraÄ‘eno field_auth_source: Režim potvrde identiteta field_hide_mail: Sakrij moju e-adresu @@ -719,7 +718,6 @@ label_search_titles_only: Pretražuj samo naslove label_user_mail_option_all: "Za bilo koji dogaÄ‘aj na svim mojim projektima" label_user_mail_option_selected: "Za bilo koji dogaÄ‘aj na samo odabranim projektima..." - label_user_mail_option_none: "Samo za stvari koje pratim ili u koje sam ukljuÄen" label_user_mail_no_self_notified: "Ne želim biti obaveÅ¡tavan za promene koje sam pravim" label_registration_activation_by_email: aktivacija naloga putem e-poruke label_registration_manual_activation: ruÄna aktivacija naloga @@ -836,9 +834,9 @@ text_journal_set_to: "{{label}} postavljen u {{value}}" text_journal_deleted: "{{label}} izbrisano ({{old}})" text_journal_added: "{{label}} {{value}} dodato" - text_tip_task_begin_day: zadatak poÄinje ovog dana - text_tip_task_end_day: zadatak se zavrÅ¡ava ovog dana - text_tip_task_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana + text_tip_issue_begin_day: zadatak poÄinje ovog dana + text_tip_issue_end_day: zadatak se zavrÅ¡ava ovog dana + text_tip_issue_begin_end_day: zadatak poÄinje i zavrÅ¡ava ovog dana text_project_identifier_info: 'Dozvoljena su samo mala slova (a-Å¡), brojevi i crtice.<br />Jednom snimljen identifikator viÅ¡e se ne može promeniti.' text_caracters_maximum: "NajviÅ¡e {{count}} znak(ova)." text_caracters_minimum: "Broj znakova mora biti najmanje {{count}}." @@ -913,8 +911,19 @@ field_time_entries: Vreme evidencije project_module_gantt: Gantov dijagram project_module_calendar: Kalendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/sr.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/sr.yml Fri Nov 19 13:24:41 2010 +0000 @@ -192,10 +192,10 @@ mail_body_account_activation_request: "Ðови кориÑник ({{value}}) је региÑтрован. Ðалог чека на ваше одобрење:" mail_subject_reminder: "{{count}} проблема доÑпева наредних {{days}} дана" mail_body_reminder: "{{count}} проблема додељених вама доÑпева у наредних {{days}} дана:" - mail_subject_wiki_content_added: "Wiki Ñтраница '{{page}}' је додата" - mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{page}}'." - mail_subject_wiki_content_updated: "Wiki Ñтраница '{{page}}' је ажурирана" - mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{page}}'." + mail_subject_wiki_content_added: "Wiki Ñтраница '{{id}}' је додата" + mail_body_wiki_content_added: "{{author}} је додао wiki Ñтраницу '{{id}}'." + mail_subject_wiki_content_updated: "Wiki Ñтраница '{{id}}' је ажурирана" + mail_body_wiki_content_updated: "{{author}} је ажурирао wiki Ñтраницу '{{id}}'." gui_validation_error: једна грешка gui_validation_error_plural: "{{count}} грешака" @@ -261,7 +261,6 @@ field_attr_lastname: Ðтрибут презимена field_attr_mail: Ðтрибут е-адреÑе field_onthefly: Креирање кориÑника у току рада - field_start_date: Почетак field_done_ratio: % урађено field_auth_source: Режим потврде идентитета field_hide_mail: Сакриј моју е-адреÑу @@ -719,7 +718,6 @@ label_search_titles_only: Претражуј Ñамо наÑлове label_user_mail_option_all: "За било који догађај на Ñвим мојим пројектима" label_user_mail_option_selected: "За било који догађај на Ñамо одабраним пројектима..." - label_user_mail_option_none: "Само за Ñтвари које пратим или у које Ñам укључен" label_user_mail_no_self_notified: "Ðе желим бити обавештаван за промене које Ñам правим" label_registration_activation_by_email: активација налога путем е-поруке label_registration_manual_activation: ручна активација налога @@ -836,9 +834,9 @@ text_journal_set_to: "{{label}} поÑтављен у {{value}}" text_journal_deleted: "{{label}} избриÑано ({{old}})" text_journal_added: "{{label}} {{value}} додато" - text_tip_task_begin_day: задатак почиње овог дана - text_tip_task_end_day: задатак Ñе завршава овог дана - text_tip_task_begin_end_day: задатак почиње и завршава овог дана + text_tip_issue_begin_day: задатак почиње овог дана + text_tip_issue_end_day: задатак Ñе завршава овог дана + text_tip_issue_begin_end_day: задатак почиње и завршава овог дана text_project_identifier_info: 'Дозвољена Ñу Ñамо мала Ñлова (a-ш), бројеви и цртице.<br />Једном Ñнимљен идентификатор више Ñе не може променити.' text_caracters_maximum: "Ðајвише {{count}} знак(ова)." text_caracters_minimum: "Број знакова мора бити најмање {{count}}." @@ -913,9 +911,20 @@ field_time_entries: Време евиденције project_module_gantt: Гантов дијаграм project_module_calendar: Календар - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/sv.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/sv.yml Fri Nov 19 13:24:41 2010 +0000 @@ -195,6 +195,7 @@ notice_file_not_found: Sidan du försökte komma åt existerar inte eller är borttagen. notice_locking_conflict: Data har uppdaterats av en annan användare. notice_not_authorized: Du saknar behörighet att komma åt den här sidan. + notice_not_authorized_archived_project: Projektet du försöker komma åt har arkiverats. notice_email_sent: "Ett mail skickades till {{value}}" notice_email_error: "Ett fel inträffade när mail skickades ({{value}})" notice_feeds_access_key_reseted: Din RSS-nyckel återställdes. @@ -238,10 +239,10 @@ mail_body_account_activation_request: "En ny användare ({{value}}) har registrerat sig och avvaktar ditt godkännande:" mail_subject_reminder: "{{count}} ärende(n) har deadline under de kommande {{days}} dagarna" mail_body_reminder: "{{count}} ärende(n) som är tilldelat dig har deadline under de {{days}} dagarna:" - mail_subject_wiki_content_added: "'{{page}}' wikisida has lagts till" - mail_body_wiki_content_added: The '{{page}}' wikisida has lagts till av {{author}}. - mail_subject_wiki_content_updated: "'{{page}}' wikisida har uppdaterats" - mail_body_wiki_content_updated: The '{{page}}' wikisida har uppdaterats av {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wikisida has lagts till" + mail_body_wiki_content_added: The '{{id}}' wikisida has lagts till av {{author}}. + mail_subject_wiki_content_updated: "'{{id}}' wikisida har uppdaterats" + mail_body_wiki_content_updated: The '{{id}}' wikisida har uppdaterats av {{author}}. gui_validation_error: 1 fel gui_validation_error_plural: "{{count}} fel" @@ -307,7 +308,6 @@ field_attr_lastname: Efternamnsattribut field_attr_mail: Mailattribut field_onthefly: Skapa användare on-the-fly - field_start_date: Start field_done_ratio: % Klart field_auth_source: Autentiseringsläge field_hide_mail: Dölj min mailadress @@ -339,6 +339,9 @@ field_group_by: Gruppera resultat efter field_sharing: Delning field_parent_issue: Förälderaktivitet + field_member_of_group: Tilldelad användares grupp + field_assigned_to_role: Tilldelad användares roll + field_text: Textfält setting_app_title: Applikationsrubrik setting_app_subtitle: Applikationsunderrubrik @@ -393,6 +396,7 @@ setting_start_of_week: Första dagen i veckan setting_rest_api_enabled: Aktivera REST webbtjänst setting_cache_formatted_text: Cacha formaterad text + setting_default_notification_option: Standard notifieringsalternativ permission_add_project: Skapa projekt permission_add_subprojects: Skapa underprojekt @@ -568,7 +572,7 @@ label_news_view_all: Visa alla nyheter label_news_added: Nyhet tillagd label_settings: Inställningar - label_overview: Överblick + label_overview: Översikt label_version: Version label_version_new: Ny version label_version_plural: Versioner @@ -768,7 +772,10 @@ label_search_titles_only: Sök endast i titlar label_user_mail_option_all: "För alla händelser i mina projekt" label_user_mail_option_selected: "För alla händelser i markerade projekt..." - label_user_mail_option_none: "Endast för saker jag bevakar eller är involverad i" + label_user_mail_option_none: Inga händelser + label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i + label_user_mail_option_only_assigned: Endast för saker jag är tilldelad + label_user_mail_option_only_owner: Endast för saker jag äger label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort" label_registration_activation_by_email: kontoaktivering med mail label_registration_manual_activation: manuell kontoaktivering @@ -830,6 +837,7 @@ button_create_and_continue: Skapa och fortsätt button_test: Testa button_edit: Ändra + button_edit_associated_wikipage: "Ändra associerad Wikisida: {{page_title}}" button_add: Lägg till button_change: Ändra button_apply: Verkställ @@ -881,13 +889,14 @@ text_subprojects_destroy_warning: "Alla underprojekt: {{value}} kommer också tas bort." text_workflow_edit: Välj en roll och en ärendetyp för att ändra arbetsflöde text_are_you_sure: Är du säker ? + text_are_you_sure_with_children: Ta bort ärende och alla underärenden? text_journal_changed: "{{label}} ändrad från {{old}} till {{new}}" text_journal_set_to: "{{label}} satt till {{value}}" text_journal_deleted: "{{label}} borttagen ({{old}})" text_journal_added: "{{label}} {{value}} tillagd" - text_tip_task_begin_day: arbetsuppgift som börjar denna dag - text_tip_task_end_day: arbetsuppgift som slutar denna dag - text_tip_task_begin_end_day: arbetsuppgift börjar och slutar denna dag + text_tip_issue_begin_day: arbetsuppgift som börjar denna dag + text_tip_issue_end_day: arbetsuppgift som slutar denna dag + text_tip_issue_begin_end_day: arbetsuppgift börjar och slutar denna dag text_project_identifier_info: 'Små bokstäver (a-z), siffror och streck tillåtna.<br />När den är sparad kan identifieraren inte ändras.' text_caracters_maximum: "max {{count}} tecken." text_caracters_minimum: "Måste vara minst {{count}} tecken lång." @@ -958,8 +967,8 @@ enumeration_doc_categories: Dokumentkategorier enumeration_activities: Aktiviteter (tidsuppföljning) enumeration_system_activity: Systemaktivitet - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role - button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" - text_are_you_sure_with_children: Delete issue and all child issues? - field_text: Text field + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/th.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/th.yml Fri Nov 19 13:24:41 2010 +0000 @@ -233,7 +233,6 @@ field_attr_lastname: นามสà¸à¸¸à¸¥ attribute field_attr_mail: à¸à¸µà¹€à¸¡à¸¥à¹Œ attribute field_onthefly: สร้างผู้ใช้ทันที - field_start_date: เริ่ม field_done_ratio: % สำเร็จ field_auth_source: วิธีà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตน field_hide_mail: ซ่à¸à¸™à¸à¸µà¹€à¸¡à¸¥à¹Œà¸‚à¸à¸‡à¸‰à¸±à¸™ @@ -585,7 +584,6 @@ label_search_titles_only: ค้นหาจาà¸à¸Šà¸·à¹ˆà¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¹€à¸—่านั้น label_user_mail_option_all: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸‚à¸à¸‡à¸‰à¸±à¸™" label_user_mail_option_selected: "ทุà¸à¹† เหตุà¸à¸²à¸£à¸“์ในโครงà¸à¸²à¸£à¸—ี่เลืà¸à¸..." - label_user_mail_option_none: "เฉพาะสิ่งที่ฉันเลืà¸à¸à¸«à¸£à¸·à¸à¸¡à¸µà¸ªà¹ˆà¸§à¸™à¹€à¸à¸µà¹ˆà¸¢à¸§à¸‚้à¸à¸‡" label_user_mail_no_self_notified: "ฉันไม่ต้à¸à¸‡à¸à¸²à¸£à¹„ด้รับà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ืà¸à¸™à¹ƒà¸™à¸ªà¸´à¹ˆà¸‡à¸—ี่ฉันทำเà¸à¸‡" label_registration_activation_by_email: เปิดบัà¸à¸Šà¸µà¸œà¹ˆà¸²à¸™à¸à¸µà¹€à¸¡à¸¥à¹Œ label_registration_manual_activation: à¸à¸™à¸¸à¸¡à¸±à¸•ิโดยผู้บริหารจัดà¸à¸²à¸£ @@ -655,9 +653,9 @@ text_subprojects_destroy_warning: "โครงà¸à¸²à¸£à¸¢à¹ˆà¸à¸¢: {{value}} จะถูà¸à¸¥à¸šà¸”้วย." text_workflow_edit: เลืà¸à¸à¸šà¸—บาทà¹à¸¥à¸°à¸à¸²à¸£à¸•ิดตาม เพื่à¸à¹à¸à¹‰à¹„ขลำดับงาน text_are_you_sure: คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹„หม ? - text_tip_task_begin_day: งานที่เริ่มวันนี้ - text_tip_task_end_day: งานที่จบวันนี้ - text_tip_task_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰ + text_tip_issue_begin_day: งานที่เริ่มวันนี้ + text_tip_issue_end_day: งานที่จบวันนี้ + text_tip_issue_begin_end_day: งานที่เริ่มà¹à¸¥à¸°à¸ˆà¸šà¸§à¸±à¸™à¸™à¸µà¹‰ text_project_identifier_info: 'ภาษาà¸à¸±à¸‡à¸à¸¤à¸©à¸•ัวเล็à¸(a-z), ตัวเลข(0-9) à¹à¸¥à¸°à¸‚ีด (-) เท่านั้น.<br />เมื่à¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¹à¸¥à¹‰à¸§, ชื่à¸à¹€à¸‰à¸žà¸²à¸°à¹„ม่สามารถเปลี่ยนà¹à¸›à¸¥à¸‡à¹„ด้' text_caracters_maximum: "สูงสุด {{count}} ตัวà¸à¸±à¸à¸©à¸£." text_caracters_minimum: "ต้à¸à¸‡à¸¢à¸²à¸§à¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢ {{count}} ตัวà¸à¸±à¸à¸©à¸£." @@ -813,12 +811,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -910,8 +908,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/tr.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/tr.yml Fri Nov 19 13:24:41 2010 +0000 @@ -260,7 +260,6 @@ field_attr_lastname: Soyad Niteliği field_attr_mail: E-Posta Niteliği field_onthefly: Anında kullanıcı oluşturma - field_start_date: Başlangıç field_done_ratio: % tamamlandı field_auth_source: Kimlik Denetim Modu field_hide_mail: E-posta adresimi gizle @@ -610,7 +609,6 @@ label_search_titles_only: Sadece başlıkları ara label_user_mail_option_all: "Tüm projelerimdeki herhangi bir olay için" label_user_mail_option_selected: "Sadece seçili projelerdeki herhangi bir olay için..." - label_user_mail_option_none: "Sadece dahil olduğum ya da izlediklerim için" label_user_mail_no_self_notified: "Kendi yaptığım değişikliklerden haberdar olmak istemiyorum" label_registration_activation_by_email: e-posta ile hesap etkinleştirme label_registration_manual_activation: Elle hesap etkinleştirme @@ -680,9 +678,9 @@ text_subprojects_destroy_warning: "Ayrıca {{value}} alt proje silinecek." text_workflow_edit: İşakışını düzenlemek için bir rol ve takipçi seçin text_are_you_sure: Emin misiniz ? - text_tip_task_begin_day: Bugün başlayan görevler - text_tip_task_end_day: Bugün sona eren görevler - text_tip_task_begin_end_day: Bugün başlayan ve sona eren görevler + text_tip_issue_begin_day: Bugün başlayan görevler + text_tip_issue_end_day: Bugün sona eren görevler + text_tip_issue_begin_end_day: Bugün başlayan ve sona eren görevler text_project_identifier_info: 'Küçük harfler (a-z), sayılar ve noktalar kabul edilir.<br />Bir kere kaydedildiğinde,tanımlayıcı değiştirilemez.' text_caracters_maximum: "En çok {{count}} karakter." text_caracters_minimum: "En az {{count}} karakter uzunluğunda olmalı." @@ -839,12 +837,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -936,8 +934,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/uk.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/uk.yml Fri Nov 19 13:24:41 2010 +0000 @@ -227,7 +227,6 @@ field_attr_lastname: Ðтрибут Прізвище field_attr_mail: Ðтрибут Email field_onthefly: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача на льоту - field_start_date: Початок field_done_ratio: % зроблено field_auth_source: Режим аутентифікації field_hide_mail: Приховувати мій email @@ -544,7 +543,6 @@ label_search_titles_only: Шукати тільки в назвах label_user_mail_option_all: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій у вÑÑ–Ñ… моїх проектах" label_user_mail_option_selected: "Ð”Ð»Ñ Ð²ÑÑ–Ñ… подій тільки у вибраному проекті..." - label_user_mail_option_none: "Тільки Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, що Ñ Ð¿Ñ€Ð¾Ð³Ð»Ñдаю або в чому Ñ Ð±ÐµÑ€Ñƒ учаÑть" label_user_mail_no_self_notified: "Ðе Ñповіщати про зміни, Ñкі Ñ Ð·Ñ€Ð¾Ð±Ð¸Ð² Ñам" label_registration_activation_by_email: Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу електронною поштою label_registration_manual_activation: ручна Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу @@ -597,9 +595,9 @@ text_project_destroy_confirmation: Ви наполÑгаєте на видаленні цього проекту Ñ– вÑієї інформації, що відноÑитьÑÑ Ð´Ð¾ нього? text_workflow_edit: Виберіть роль Ñ– координатор Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑлідовноÑті дій text_are_you_sure: Ви впевнені? - text_tip_task_begin_day: день початку задачі - text_tip_task_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– - text_tip_task_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð´Ð½Ñ + text_tip_issue_begin_day: день початку задачі + text_tip_issue_end_day: день Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ– + text_tip_issue_begin_end_day: початок задачі Ñ– Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ð´Ð½Ñ text_project_identifier_info: 'Ð Ñдкові букви (a-z), допуÑтимі цифри Ñ– дефіÑ.<br />Збережений ідентифікатор не може бути змінений.' text_caracters_maximum: "{{count}} Ñимволів(а) макÑимум." text_caracters_minimum: "Повинно мати Ñкнайменше {{count}} Ñимволів(а) у довжину." @@ -812,12 +810,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -909,8 +907,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/vi.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/vi.yml Fri Nov 19 13:24:41 2010 +0000 @@ -294,7 +294,6 @@ field_attr_lastname: Lastname attribute field_attr_mail: Email attribute field_onthefly: On-the-fly user creation - field_start_date: Bắt đầu field_done_ratio: Tiến độ field_auth_source: Authentication mode field_hide_mail: Không là m lá»™ email cá»§a bạn @@ -654,7 +653,6 @@ label_search_titles_only: Chỉ tìm trong tá»±a đỠlabel_user_mail_option_all: "Má»i sá»± kiện trên má»i dá»± án cá»§a bạn" label_user_mail_option_selected: "Má»i sá»± kiện trên các dá»± án được chá»n..." - label_user_mail_option_none: "Chỉ những vấn đỠbạn theo dõi hoặc được gán" label_user_mail_no_self_notified: "Äừng gá»i email vá» các thay đổi do chÃnh bạn thá»±c hiện" label_registration_activation_by_email: account activation by email label_registration_manual_activation: manual account activation @@ -728,9 +726,9 @@ text_subprojects_destroy_warning: "Its subproject(s): {{value}} will be also deleted." text_workflow_edit: Select a role and a tracker to edit the workflow text_are_you_sure: Bạn chắc chứ? - text_tip_task_begin_day: ngà y bắt đầu - text_tip_task_end_day: ngà y kết thúc - text_tip_task_begin_end_day: bắt đầu và kết thúc cùng ngà y + text_tip_issue_begin_day: ngà y bắt đầu + text_tip_issue_end_day: ngà y kết thúc + text_tip_issue_begin_end_day: bắt đầu và kết thúc cùng ngà y text_project_identifier_info: 'Chỉ cho phép chữ cái thưá»ng (a-z), con số và dấu gạch ngang.<br />Sau khi lưu, chỉ số ID không thể thay đổi.' text_caracters_maximum: "Tối Ä‘a {{count}} ký tá»±." text_caracters_minimum: "Phải gồm Ãt nhất {{count}} ký tá»±." @@ -871,12 +869,12 @@ text_wiki_page_destroy_children: Delete child pages and all their descendants setting_password_min_length: Minimum password length field_group_by: Group results by - mail_subject_wiki_content_updated: "'{{page}}' wiki page has been updated" + mail_subject_wiki_content_updated: "'{{id}}' wiki page has been updated" label_wiki_content_added: Wiki page added - mail_subject_wiki_content_added: "'{{page}}' wiki page has been added" - mail_body_wiki_content_added: The '{{page}}' wiki page has been added by {{author}}. + mail_subject_wiki_content_added: "'{{id}}' wiki page has been added" + mail_body_wiki_content_added: The '{{id}}' wiki page has been added by {{author}}. label_wiki_content_updated: Wiki page updated - mail_body_wiki_content_updated: The '{{page}}' wiki page has been updated by {{author}}. + mail_body_wiki_content_updated: The '{{id}}' wiki page has been updated by {{author}}. permission_add_project: Create project setting_new_project_user_role_id: Role given to a non-admin user who creates a project label_view_all_revisions: View all revisions @@ -968,8 +966,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/zh-TW.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/zh-TW.yml Fri Nov 19 13:24:41 2010 +0000 @@ -174,7 +174,7 @@ odd: "å¿…é ˆæ˜¯å¥‡æ•¸" even: "å¿…é ˆæ˜¯å¶æ•¸" # Append your own errors here or at the model/attributes scope. - greater_than_start_date: "å¿…é ˆåœ¨èµ·å§‹æ—¥æœŸä¹‹å¾Œ" + greater_than_start_date: "å¿…é ˆåœ¨é–‹å§‹æ—¥æœŸä¹‹å¾Œ" not_same_project: "ä¸å±¬æ–¼åŒä¸€å€‹å°ˆæ¡ˆ" circular_dependency: "é€™å€‹é—œè¯æœƒå°Žè‡´ç’°ç‹€ç›¸ä¾" cant_link_an_issue_with_a_descendant: "é …ç›®ç„¡æ³•è¢«é€£çµè‡³è‡ªå·±çš„åé …ç›®" @@ -235,6 +235,7 @@ notice_file_not_found: 您想è¦å˜å–çš„é é¢å·²ç¶“ä¸å˜åœ¨æˆ–被æ¬ç§»è‡³å…¶ä»–ä½ç½®ã€‚ notice_locking_conflict: 資料已被其他使用者更新。 notice_not_authorized: ä½ æœªè¢«æŽˆæ¬Šå˜å–æ¤é é¢ã€‚ + notice_not_authorized_archived_project: 您欲å˜å–çš„å°ˆæ¡ˆå·²ç¶“è¢«æ¸æª”å°å˜ã€‚ notice_email_sent: "郵件已經æˆåŠŸå¯„é€è‡³ä»¥ä¸‹æ”¶ä»¶è€…: {{value}}" notice_email_error: "寄é€éƒµä»¶çš„éŽç¨‹ä¸ç™¼ç”ŸéŒ¯èª¤ ({{value}})" notice_feeds_access_key_reseted: 您的 RSS å˜å–é‡‘é‘°å·²è¢«é‡æ–°è¨å®šã€‚ @@ -277,10 +278,10 @@ mail_body_account_activation_request: "æœ‰ä½æ–°ç”¨æˆ¶ ({{value}}) 已經完æˆè¨»å†Šï¼Œæ£ç‰å€™æ‚¨çš„å¯©æ ¸ï¼š" mail_subject_reminder: "您有 {{count}} å€‹é …ç›®å³å°‡åˆ°æœŸ ({{days}})" mail_body_reminder: "{{count}} å€‹æŒ‡æ´¾çµ¦æ‚¨çš„é …ç›®ï¼Œå°‡æ–¼ {{days}} 天之內到期:" - mail_subject_wiki_content_added: "'{{page}}' wiki é é¢å·²è¢«æ–°å¢ž" - mail_body_wiki_content_added: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 新增。" - mail_subject_wiki_content_updated: "'{{page}}' wiki é é¢å·²è¢«æ›´æ–°" - mail_body_wiki_content_updated: "The '{{page}}' wiki é é¢å·²è¢« {{author}} 更新。" + mail_subject_wiki_content_added: "'{{id}}' wiki é é¢å·²è¢«æ–°å¢ž" + mail_body_wiki_content_added: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 新增。" + mail_subject_wiki_content_updated: "'{{id}}' wiki é é¢å·²è¢«æ›´æ–°" + mail_body_wiki_content_updated: "The '{{id}}' wiki é é¢å·²è¢« {{author}} 更新。" gui_validation_error: 1 個錯誤 gui_validation_error_plural: "{{count}} 個錯誤" @@ -379,8 +380,8 @@ field_group_by: çµæžœåˆ†çµ„æ–¹å¼ field_sharing: 共用 field_parent_issue: çˆ¶å·¥ä½œé …ç›® - field_member_of_group: 所屬群組 - field_assigned_to_role: 所屬角色 + field_member_of_group: "被指派者的群組" + field_assigned_to_role: "被指派者的角色" field_text: å…§å®¹æ–‡å— setting_app_title: 標題 @@ -436,7 +437,8 @@ setting_start_of_week: 週的第一天 setting_rest_api_enabled: 啟用 REST 網路æœå‹™æŠ€è¡“(Web Service) setting_cache_formatted_text: å¿«å–å·²æ ¼å¼åŒ–æ–‡å— - + setting_default_notification_option: é è¨é€šçŸ¥é¸é … + permission_add_project: 建立專案 permission_add_subprojects: 建立å專案 permission_edit_project: 編輯專案 @@ -811,7 +813,10 @@ label_search_titles_only: 僅æœå°‹æ¨™é¡Œ label_user_mail_option_all: "æé†’與我的專案有關的全部事件" label_user_mail_option_selected: "åªæé†’æˆ‘æ‰€é¸æ“‡å°ˆæ¡ˆä¸çš„事件..." - label_user_mail_option_none: "åªæé†’æˆ‘è§€å¯Ÿä¸æˆ–åƒèˆ‡ä¸çš„事件" + label_user_mail_option_none: "å–æ¶ˆæé†’" + label_user_mail_option_only_my_events: "åªæé†’æˆ‘è§€å¯Ÿä¸æˆ–åƒèˆ‡ä¸çš„事物" + label_user_mail_option_only_assigned: "åªæé†’æˆ‘è¢«æŒ‡æ´¾çš„äº‹ç‰©" + label_user_mail_option_only_owner: "åªæé†’æˆ‘ä½œç‚ºæ“æœ‰è€…的事物" label_user_mail_no_self_notified: "ä¸æé†’æˆ‘è‡ªå·±æ‰€åšçš„變更" label_registration_activation_by_email: é€éŽé›»å郵件啟用帳戶 label_registration_manual_activation: 手動啟用帳戶 @@ -930,9 +935,9 @@ text_journal_set_to: "{{label}} è¨å®šç‚º {{value}}" text_journal_deleted: "{{label}} 已刪除 ({{old}})" text_journal_added: "{{label}} {{value}} 已新增" - text_tip_task_begin_day: 今天起始的工作 - text_tip_task_end_day: 今天截æ¢çš„的工作 - text_tip_task_begin_end_day: 今天起始與截æ¢çš„工作 + text_tip_issue_begin_day: 今天起始的工作 + text_tip_issue_end_day: 今天截æ¢çš„的工作 + text_tip_issue_begin_end_day: 今天起始與截æ¢çš„工作 text_project_identifier_info: 'åªå…許å°å¯«è‹±æ–‡å—æ¯ï¼ˆa-z)ã€é˜¿æ‹‰ä¼¯æ•¸å—與連å—符號(-)。<br />儲å˜å¾Œï¼Œä»£ç¢¼ä¸å¯å†è¢«æ›´æ”¹ã€‚' text_caracters_maximum: "最多 {{count}} 個å—å…ƒ." text_caracters_minimum: "é•·åº¦å¿…é ˆå¤§æ–¼ {{count}} 個å—å…ƒ." @@ -1004,3 +1009,7 @@ enumeration_activities: 活動 (時間追蹤) enumeration_system_activity: 系統活動 + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/locales/zh.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/locales/zh.yml Fri Nov 19 13:24:41 2010 +0000 @@ -204,10 +204,10 @@ mail_body_account_activation_request: "新用户({{value}}ï¼‰å·²å®Œæˆæ³¨å†Œï¼Œæ£åœ¨ç‰å€™æ‚¨çš„å®¡æ ¸ï¼š" mail_subject_reminder: "{{count}} 个问题需è¦å°½å¿«è§£å†³ ({{days}})" mail_body_reminder: "指派给您的 {{count}} 个问题需è¦åœ¨ {{days}} 天内完æˆï¼š" - mail_subject_wiki_content_added: "'{{page}}' wiki页é¢å·²æ·»åŠ " - mail_body_wiki_content_added: "'{{page}}' wiki页é¢å·²ç”± {{author}} æ·»åŠ ã€‚" - mail_subject_wiki_content_updated: "'{{page}}' wiki页é¢å·²æ›´æ–°" - mail_body_wiki_content_updated: "'{{page}}' wiki页é¢å·²ç”± {{author}} 更新。" + mail_subject_wiki_content_added: "'{{id}}' wiki页é¢å·²æ·»åŠ " + mail_body_wiki_content_added: "'{{id}}' wiki页é¢å·²ç”± {{author}} æ·»åŠ ã€‚" + mail_subject_wiki_content_updated: "'{{id}}' wiki页é¢å·²æ›´æ–°" + mail_body_wiki_content_updated: "'{{id}}' wiki页é¢å·²ç”± {{author}} 更新。" gui_validation_error: 1 个错误 gui_validation_error_plural: "{{count}} 个错误" @@ -272,7 +272,6 @@ field_attr_lastname: å§“æ°å±žæ€§ field_attr_mail: 邮件属性 field_onthefly: 峿—¶ç”¨æˆ·ç”Ÿæˆ - field_start_date: 开始 field_done_ratio: 完æˆåº¦ field_auth_source: è®¤è¯æ¨¡å¼ field_hide_mail: éšè—æˆ‘çš„é‚®ä»¶åœ°å€ @@ -721,7 +720,6 @@ label_search_titles_only: ä»…åœ¨æ ‡é¢˜ä¸æœç´¢ label_user_mail_option_all: "æ”¶å–æˆ‘的项目的所有通知" label_user_mail_option_selected: "æ”¶å–选ä¸é¡¹ç›®çš„æ‰€æœ‰é€šçŸ¥..." - label_user_mail_option_none: "åªæ”¶å–我跟踪或å‚与的项目的通知" label_user_mail_no_self_notified: "ä¸è¦å‘é€å¯¹æˆ‘自己æäº¤çš„修改的通知" label_registration_activation_by_email: é€šè¿‡é‚®ä»¶è®¤è¯æ¿€æ´»å¸å· label_registration_manual_activation: 手动激活å¸å· @@ -835,9 +833,9 @@ text_journal_set_to: "{{label}} 被设置为 {{value}}" text_journal_deleted: "{{label}} å·²åˆ é™¤ ({{old}})" text_journal_added: "{{label}} {{value}} å·²æ·»åŠ " - text_tip_task_begin_day: 今天开始的任务 - text_tip_task_end_day: 今天结æŸçš„任务 - text_tip_task_begin_end_day: 今天开始并结æŸçš„任务 + text_tip_issue_begin_day: 今天开始的任务 + text_tip_issue_end_day: 今天结æŸçš„任务 + text_tip_issue_begin_end_day: 今天开始并结æŸçš„任务 text_project_identifier_info: 'åªå…许使用å°å†™å—æ¯ï¼ˆa-z),数å—和连å—符(-)。<br />请注æ„ï¼Œæ ‡è¯†ç¬¦ä¿å˜åŽå°†ä¸å¯ä¿®æ”¹ã€‚' text_caracters_maximum: "最多 {{count}} 个å—符。" text_caracters_minimum: "è‡³å°‘éœ€è¦ {{count}} 个å—符。" @@ -931,8 +929,19 @@ field_time_entries: Log time project_module_gantt: Gantt project_module_calendar: Calendar - field_member_of_group: Member of Group - field_assigned_to_role: Member of Role button_edit_associated_wikipage: "Edit associated Wiki page: {{page_title}}" text_are_you_sure_with_children: Delete issue and all child issues? field_text: Text field + label_user_mail_option_only_owner: Only for things I am the owner of + setting_default_notification_option: Default notification option + label_user_mail_option_only_my_events: Only for things I watch or I'm involved in + label_user_mail_option_only_assigned: Only for things I am assigned to + label_user_mail_option_none: No events + field_member_of_group: Assignee's group + field_assigned_to_role: Assignee's role + notice_not_authorized_archived_project: The project you're trying to access has been archived. + field_start_date: Start date + label_principal_search: "Search for user or group:" + label_user_search: "Search for user:" + field_visible: Visible + setting_emails_header: Emails header
--- a/config/routes.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/config/routes.rb Fri Nov 19 13:24:41 2010 +0000 @@ -13,55 +13,20 @@ map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow' map.connect 'help/:ctrl/:page', :controller => 'help' - - map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog' - map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog' - map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog' - - map.with_options :controller => 'timelog' do |timelog| - timelog.connect 'projects/:project_id/time_entries', :action => 'details' - - timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details| - time_details.connect 'time_entries' - time_details.connect 'time_entries.:format' - time_details.connect 'issues/:issue_id/time_entries' - time_details.connect 'issues/:issue_id/time_entries.:format' - time_details.connect 'projects/:project_id/time_entries.:format' - time_details.connect 'projects/:project_id/issues/:issue_id/time_entries' - time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format' - end - timelog.connect 'projects/:project_id/time_entries/report', :action => 'report' - timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report| - time_report.connect 'time_entries/report' - time_report.connect 'time_entries/report.:format' - time_report.connect 'projects/:project_id/time_entries/report.:format' - end - timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit| - time_edit.connect 'issues/:issue_id/time_entries/new' - end - - timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post} + map.connect 'projects/:project_id/time_entries/report', :controller => 'time_entry_reports', :action => 'report' + map.with_options :controller => 'time_entry_reports', :action => 'report',:conditions => {:method => :get} do |time_report| + time_report.connect 'time_entries/report' + time_report.connect 'time_entries/report.:format' + time_report.connect 'projects/:project_id/time_entries/report.:format' end + + # TODO: wasteful since this is also nested under issues, projects, and projects/issues + map.resources :time_entries, :controller => 'timelog' map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post} map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get} map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post} - map.with_options :controller => 'wiki' do |wiki_routes| - wiki_routes.with_options :conditions => {:method => :get} do |wiki_views| - wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i - wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil - wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit' - wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename' - wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history' - wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff' - wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate' - end - - wiki_routes.connect 'projects/:id/wiki/:page/:action', - :action => /edit|rename|destroy|preview|protect/, - :conditions => {:method => :post} - end map.with_options :controller => 'messages' do |messages_routes| messages_routes.with_options :conditions => {:method => :get} do |messages_views| @@ -129,56 +94,46 @@ map.connect '/issues', :controller => 'issues', :action => 'index', :conditions => { :method => :post } map.connect '/issues/create', :controller => 'issues', :action => 'index', :conditions => { :method => :post } - map.resources :issues, :member => { :edit => :post }, :collection => {} - map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } + map.resources :issues, :member => { :edit => :post }, :collection => {} do |issues| + issues.resources :time_entries, :controller => 'timelog' + end + + map.resources :issues, :path_prefix => '/projects/:project_id', :collection => { :create => :post } do |issues| + issues.resources :time_entries, :controller => 'timelog' + end map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations| relations.connect 'issues/:issue_id/relations/:id', :action => 'new' relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy' end - - map.with_options :controller => 'news' do |news_routes| - news_routes.with_options :conditions => {:method => :get} do |news_views| - news_views.connect 'news', :action => 'index' - news_views.connect 'projects/:project_id/news', :action => 'index' - news_views.connect 'projects/:project_id/news.:format', :action => 'index' - news_views.connect 'news.:format', :action => 'index' - news_views.connect 'projects/:project_id/news/new', :action => 'new' - news_views.connect 'news/:id', :action => 'show' - news_views.connect 'news/:id/edit', :action => 'edit' - end - news_routes.with_options do |news_actions| - news_actions.connect 'projects/:project_id/news', :action => 'create', :conditions => {:method => :post} - news_actions.connect 'news/:id/destroy', :action => 'destroy' - end - news_routes.connect 'news/:id/edit', :action => 'update', :conditions => {:method => :put} - news_routes.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post} - news_routes.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete} - end - map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new' - + map.with_options :controller => 'users' do |users| - users.with_options :conditions => {:method => :get} do |user_views| - user_views.connect 'users', :action => 'index' - user_views.connect 'users/:id', :action => 'show', :id => /\d+/ - user_views.connect 'users/new', :action => 'add' - user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil - end + users.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil, :conditions => {:method => :get} + users.with_options :conditions => {:method => :post} do |user_actions| - user_actions.connect 'users', :action => 'add' - user_actions.connect 'users/new', :action => 'add' - user_actions.connect 'users/:id/edit', :action => 'edit' user_actions.connect 'users/:id/memberships', :action => 'edit_membership' user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership' user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership' end end + map.resources :users, :member => { + :edit_membership => :post, + :destroy_membership => :post + }, + :except => [:destroy] + # For nice "roadmap" in the url for the index action map.connect 'projects/:project_id/roadmap', :controller => 'versions', :action => 'index' + map.all_news 'news', :controller => 'news', :action => 'index' + map.formatted_all_news 'news.:format', :controller => 'news', :action => 'index' + map.preview_news '/news/preview', :controller => 'previews', :action => 'news' + map.connect 'news/:id/comments', :controller => 'comments', :action => 'create', :conditions => {:method => :post} + map.connect 'news/:id/comments/:comment_id', :controller => 'comments', :action => 'destroy', :conditions => {:method => :delete} + map.resources :projects, :member => { :copy => [:get, :post], :settings => :get, @@ -189,6 +144,25 @@ project.resource :project_enumerations, :as => 'enumerations', :only => [:update, :destroy] project.resources :files, :only => [:index, :new, :create] project.resources :versions, :collection => {:close_completed => :put}, :member => {:status_by => :post} + project.resources :news, :shallow => true + project.resources :time_entries, :controller => 'timelog', :path_prefix => 'projects/:project_id' + + project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get} + project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get} + project.wiki_diff 'wiki/:id/diff/:version', :controller => 'wiki', :action => 'diff', :version => nil + project.wiki_diff 'wiki/:id/diff/:version/vs/:version_from', :controller => 'wiki', :action => 'diff' + project.wiki_annotate 'wiki/:id/annotate/:version', :controller => 'wiki', :action => 'annotate' + project.resources :wiki, :except => [:new, :create], :member => { + :rename => [:get, :post], + :history => :get, + :preview => :any, + :protect => :post, + :add_attachment => :post + }, :collection => { + :export => :get, + :date_index => :get + } + end # Destroy uses a get request to prompt the user before the actual DELETE request
--- a/config/settings.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/config/settings.yml Fri Nov 19 13:24:41 2010 +0000 @@ -184,3 +184,7 @@ default: '' rest_api_enabled: default: 0 +default_notification_option: + default: 'only_my_events' +emails_header: + default: ''
--- a/db/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/db/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 27 -/svn/!svn/ver/4013/trunk/db +/svn/!svn/ver/4402/trunk/db END
--- a/db/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/db/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/db http://redmine.rubyforge.org/svn -2010-08-22T18:42:00.112555Z -4013 -edavis10 +2010-11-14T12:33:14.198318Z +4402 +jplang has-props
--- a/db/migrate/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/db/migrate/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 35 -/svn/!svn/ver/4013/trunk/db/migrate +/svn/!svn/ver/4402/trunk/db/migrate +END +20101107130441_add_custom_fields_visible.rb +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/!svn/ver/4383/trunk/db/migrate/20101107130441_add_custom_fields_visible.rb END 077_remove_issue_statuses_html_color.rb K 25 @@ -63,6 +69,12 @@ V 73 /svn/!svn/ver/2869/trunk/db/migrate/20090704172355_create_groups_users.rb END +20101114115359_change_projects_identifier_limit.rb +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/!svn/ver/4402/trunk/db/migrate/20101114115359_change_projects_identifier_limit.rb +END 080_add_users_type.rb K 25 svn:wc:ra_dav:version-url @@ -81,24 +93,30 @@ V 73 /svn/!svn/ver/674/trunk/db/migrate/018_set_doc_and_files_notifications.rb END +20100129193402_change_users_mail_notification_to_string.rb +K 25 +svn:wc:ra_dav:version-url +V 94 +/svn/!svn/ver/4216/trunk/db/migrate/20100129193402_change_users_mail_notification_to_string.rb +END 008_create_user_preferences.rb K 25 svn:wc:ra_dav:version-url V 64 /svn/!svn/ver/67/trunk/db/migrate/008_create_user_preferences.rb END +023_add_tracker_is_in_roadmap.rb +K 25 +svn:wc:ra_dav:version-url +V 67 +/svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb +END 025_add_search_permission.rb K 25 svn:wc:ra_dav:version-url V 63 /svn/!svn/ver/674/trunk/db/migrate/025_add_search_permission.rb END -023_add_tracker_is_in_roadmap.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb -END 20091220183727_add_index_to_settings_name.rb K 25 svn:wc:ra_dav:version-url @@ -135,11 +153,11 @@ V 71 /svn/!svn/ver/1814/trunk/db/migrate/096_add_commit_access_permission.rb END -20090401221305_update_enumerations_to_sti.rb +024_add_roadmap_permission.rb K 25 svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb +V 64 +/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb END 091_change_changesets_revision_to_string.rb K 25 @@ -147,11 +165,11 @@ V 79 /svn/!svn/ver/1236/trunk/db/migrate/091_change_changesets_revision_to_string.rb END -024_add_roadmap_permission.rb +20090401221305_update_enumerations_to_sti.rb K 25 svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb +V 80 +/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb END 20091017214720_add_missing_indexes_to_wiki_redirects.rb K 25 @@ -159,17 +177,23 @@ V 91 /svn/!svn/ver/2928/trunk/db/migrate/20091017214720_add_missing_indexes_to_wiki_redirects.rb END +034_create_changesets.rb +K 25 +svn:wc:ra_dav:version-url +V 59 +/svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb +END 072_add_enumerations_position.rb K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb END -034_create_changesets.rb +108_add_identity_url_to_users.rb K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb +V 68 +/svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb END 20090614091200_fix_messages_sticky_null.rb K 25 @@ -177,12 +201,6 @@ V 78 /svn/!svn/ver/2787/trunk/db/migrate/20090614091200_fix_messages_sticky_null.rb END -108_add_identity_url_to_users.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb -END 20091220184736_add_indexes_to_issue_status.rb K 25 svn:wc:ra_dav:version-url @@ -381,11 +399,11 @@ V 59 /svn/!svn/ver/864/trunk/db/migrate/020_add_role_position.rb END -001_setup.rb +20091010093521_fix_users_custom_values.rb K 25 svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb +V 77 +/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb END 016_add_repositories_permissions.rb K 25 @@ -393,11 +411,17 @@ V 70 /svn/!svn/ver/674/trunk/db/migrate/016_add_repositories_permissions.rb END -20091010093521_fix_users_custom_values.rb +001_setup.rb K 25 svn:wc:ra_dav:version-url -V 77 -/svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb +V 48 +/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb +END +20100129193813_update_mail_notification_values.rb +K 25 +svn:wc:ra_dav:version-url +V 85 +/svn/!svn/ver/4368/trunk/db/migrate/20100129193813_update_mail_notification_values.rb END 20091017214611_add_missing_indexes_to_journals.rb K 25 @@ -405,23 +429,23 @@ V 85 /svn/!svn/ver/2928/trunk/db/migrate/20091017214611_add_missing_indexes_to_journals.rb END +20091017214107_add_missing_indexes_to_custom_fields.rb +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb +END 041_rename_comment_to_comments.rb K 25 svn:wc:ra_dav:version-url V 68 /svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb END -20091017214107_add_missing_indexes_to_custom_fields.rb +20091017214750_add_missing_indexes_to_custom_fields_trackers.rb K 25 svn:wc:ra_dav:version-url -V 90 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb -END -089_add_attachments_description.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb +V 99 +/svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb END 067_create_wiki_redirects.rb K 25 @@ -429,11 +453,11 @@ V 63 /svn/!svn/ver/720/trunk/db/migrate/067_create_wiki_redirects.rb END -20091017214750_add_missing_indexes_to_custom_fields_trackers.rb +089_add_attachments_description.rb K 25 svn:wc:ra_dav:version-url -V 99 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb +V 70 +/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb END 103_set_custom_fields_editable.rb K 25 @@ -447,17 +471,23 @@ V 73 /svn/!svn/ver/1457/trunk/db/migrate/094_change_projects_homepage_limit.rb END +039_create_watchers.rb +K 25 +svn:wc:ra_dav:version-url +V 57 +/svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb +END 093_add_wiki_pages_protected.rb K 25 svn:wc:ra_dav:version-url V 67 /svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb END -039_create_watchers.rb +060_change_changesets_committer_limit.rb K 25 svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb +V 76 +/svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb END 083_add_messages_sticky.rb K 25 @@ -465,12 +495,6 @@ V 61 /svn/!svn/ver/926/trunk/db/migrate/083_add_messages_sticky.rb END -060_change_changesets_committer_limit.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb -END 069_add_issues_estimated_hours.rb K 25 svn:wc:ra_dav:version-url @@ -483,6 +507,12 @@ V 54 /svn/!svn/ver/323/trunk/db/migrate/027_create_wikis.rb END +20101104182107_add_unique_index_on_members.rb +K 25 +svn:wc:ra_dav:version-url +V 81 +/svn/!svn/ver/4370/trunk/db/migrate/20101104182107_add_unique_index_on_members.rb +END 20100313132032_add_issues_nested_sets_columns.rb K 25 svn:wc:ra_dav:version-url @@ -531,18 +561,18 @@ V 87 /svn/!svn/ver/1938/trunk/db/migrate/099_add_delete_wiki_pages_attachments_permission.rb END +059_add_roles_assignable.rb +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb +END 098_set_topic_authors_as_watchers.rb K 25 svn:wc:ra_dav:version-url V 72 /svn/!svn/ver/2415/trunk/db/migrate/098_set_topic_authors_as_watchers.rb END -059_add_roles_assignable.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb -END 013_create_queries.rb K 25 svn:wc:ra_dav:version-url @@ -555,18 +585,18 @@ V 74 /svn/!svn/ver/674/trunk/db/migrate/049_add_wiki_destroy_page_permission.rb END +048_allow_null_version_effective_date.rb +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb +END 040_create_changesets_issues.rb K 25 svn:wc:ra_dav:version-url V 66 /svn/!svn/ver/473/trunk/db/migrate/040_create_changesets_issues.rb END -048_allow_null_version_effective_date.rb -K 25 -svn:wc:ra_dav:version-url -V 76 -/svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb -END 085_add_role_tracker_old_status_index_to_workflows.rb K 25 svn:wc:ra_dav:version-url @@ -597,23 +627,23 @@ V 85 /svn/!svn/ver/2466/trunk/db/migrate/20090214190337_add_watchers_user_id_type_index.rb END +054_add_changesets_scmid.rb +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb +END 20091017212457_add_missing_indexes_to_custom_fields_projects.rb K 25 svn:wc:ra_dav:version-url V 99 /svn/!svn/ver/2928/trunk/db/migrate/20091017212457_add_missing_indexes_to_custom_fields_projects.rb END -054_add_changesets_scmid.rb +20091017213716_add_missing_indexes_to_member_roles.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb -END -097_add_view_wiki_edits_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 73 -/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb +V 89 +/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb END 065_add_settings_updated_on.rb K 25 @@ -621,11 +651,11 @@ V 65 /svn/!svn/ver/685/trunk/db/migrate/065_add_settings_updated_on.rb END -20091017213716_add_missing_indexes_to_member_roles.rb +097_add_view_wiki_edits_permission.rb K 25 svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb +V 73 +/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb END 20091108092559_add_versions_status.rb K 25 @@ -651,17 +681,23 @@ V 73 /svn/!svn/ver/2869/trunk/db/migrate/20090704172350_populate_users_type.rb END +052_add_changes_revision.rb +K 25 +svn:wc:ra_dav:version-url +V 62 +/svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb +END 20090503121505_populate_member_roles.rb K 25 svn:wc:ra_dav:version-url V 75 /svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb END -052_add_changes_revision.rb +062_insert_builtin_roles.rb K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb +/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb END 050_add_wiki_attachments_permissions.rb K 25 @@ -669,11 +705,11 @@ V 74 /svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb END -062_insert_builtin_roles.rb +074_add_auth_sources_tls.rb K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb +/svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb END 104_add_projects_lft_and_rgt.rb K 25 @@ -681,11 +717,23 @@ V 67 /svn/!svn/ver/2304/trunk/db/migrate/104_add_projects_lft_and_rgt.rb END -074_add_auth_sources_tls.rb +20091114105931_add_view_issues_permission.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb +V 80 +/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb +END +20091017214336_add_missing_indexes_to_users.rb +K 25 +svn:wc:ra_dav:version-url +V 82 +/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb +END +20091017213113_add_missing_indexes_to_enumerations.rb +K 25 +svn:wc:ra_dav:version-url +V 89 +/svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb END 082_add_messages_locked.rb K 25 @@ -693,23 +741,11 @@ V 61 /svn/!svn/ver/926/trunk/db/migrate/082_add_messages_locked.rb END -20091017213113_add_missing_indexes_to_enumerations.rb +20091017213444_add_missing_indexes_to_tokens.rb K 25 svn:wc:ra_dav:version-url -V 89 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb -END -20091017214336_add_missing_indexes_to_users.rb -K 25 -svn:wc:ra_dav:version-url -V 82 -/svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb -END -20091114105931_add_view_issues_permission.rb -K 25 -svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/3039/trunk/db/migrate/20091114105931_add_view_issues_permission.rb +V 83 +/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb END 20090503121501_create_member_roles.rb K 25 @@ -717,11 +753,11 @@ V 73 /svn/!svn/ver/2726/trunk/db/migrate/20090503121501_create_member_roles.rb END -20091017213444_add_missing_indexes_to_tokens.rb +057_add_versions_wiki_page_title.rb K 25 svn:wc:ra_dav:version-url -V 83 -/svn/!svn/ver/2928/trunk/db/migrate/20091017213444_add_missing_indexes_to_tokens.rb +V 70 +/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb END 20090323224724_add_type_to_enumerations.rb K 25 @@ -729,12 +765,6 @@ V 78 /svn/!svn/ver/2777/trunk/db/migrate/20090323224724_add_type_to_enumerations.rb END -057_add_versions_wiki_page_title.rb -K 25 -svn:wc:ra_dav:version-url -V 70 -/svn/!svn/ver/564/trunk/db/migrate/057_add_versions_wiki_page_title.rb -END 004_export_pdf.rb K 25 svn:wc:ra_dav:version-url @@ -813,6 +843,12 @@ V 86 /svn/!svn/ver/2928/trunk/db/migrate/20091017212227_add_missing_indexes_to_workflows.rb END +20101114115114_change_projects_name_limit.rb +K 25 +svn:wc:ra_dav:version-url +V 80 +/svn/!svn/ver/4402/trunk/db/migrate/20101114115114_change_projects_name_limit.rb +END 20090406161854_add_parent_id_to_enumerations.rb K 25 svn:wc:ra_dav:version-url
--- a/db/migrate/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/db/migrate/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/db/migrate http://redmine.rubyforge.org/svn -2010-08-22T18:42:00.112555Z -4013 -edavis10 +2010-11-14T12:33:14.198318Z +4402 +jplang @@ -26,6 +26,40 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +20101107130441_add_custom_fields_visible.rb +file + + + + +2010-11-19T13:04:50.884918Z +21dc29619a0cfd0f3aa12d77cc5cb132 +2010-11-07T14:17:35.749175Z +4383 +jplang + + + + + + + + + + + + + + + + + + + + + +307 + 077_remove_issue_statuses_html_color.rb file @@ -366,6 +400,40 @@ 383 +20101114115359_change_projects_identifier_limit.rb +file + + + + +2010-11-19T13:04:50.884918Z +be338f41292d95bb7ba3caa125999de0 +2010-11-14T12:33:14.198318Z +4402 +jplang + + + + + + + + + + + + + + + + + + + + + +238 + 080_add_users_type.rb file @@ -468,6 +536,40 @@ 1053 +20100129193402_change_users_mail_notification_to_string.rb +file + + + + +2010-11-19T13:04:50.888959Z +7a99a8db186dc5ae3903ff470808fbd8 +2010-09-28T18:22:00.231301Z +4216 +edavis10 + + + + + + + + + + + + + + + + + + + + + +290 + 008_create_user_preferences.rb file @@ -502,6 +604,40 @@ 281 +025_add_search_permission.rb +file + + + + +2010-09-23T14:37:44.883725Z +42937036f9c414f7d9b028f629b1ce20 +2007-08-29T16:52:35.680643Z +674 +jplang + + + + + + + + + + + + + + + + + + + + + +412 + 023_add_tracker_is_in_roadmap.rb file @@ -536,40 +672,6 @@ 230 -025_add_search_permission.rb -file - - - - -2010-09-23T14:37:44.883725Z -42937036f9c414f7d9b028f629b1ce20 -2007-08-29T16:52:35.680643Z -674 -jplang - - - - - - - - - - - - - - - - - - - - - -412 - 20091220183727_add_index_to_settings_name.rb file @@ -774,39 +876,39 @@ 321 -20090401221305_update_enumerations_to_sti.rb -file - - - - -2010-09-23T14:37:44.915753Z -d343c3ba8f04d1cc71f20c9860d5907b -2009-05-30T23:30:36.923541Z -2777 -edavis10 - - - - - - - - - - - - - - - - - - - - - -329 +024_add_roadmap_permission.rb +file + + + + +2010-09-23T14:37:44.883725Z +f1b96e04888c0a48bf29dd0556ba8027 +2007-08-29T16:52:35.680643Z +674 +jplang + + + + + + + + + + + + + + + + + + + + + +445 091_change_changesets_revision_to_string.rb file @@ -842,39 +944,39 @@ 245 -024_add_roadmap_permission.rb -file - - - - -2010-09-23T14:37:44.883725Z -f1b96e04888c0a48bf29dd0556ba8027 -2007-08-29T16:52:35.680643Z -674 -jplang - - - - - - - - - - - - - - - - - - - - - -445 +20090401221305_update_enumerations_to_sti.rb +file + + + + +2010-09-23T14:37:44.915753Z +d343c3ba8f04d1cc71f20c9860d5907b +2009-05-30T23:30:36.923541Z +2777 +edavis10 + + + + + + + + + + + + + + + + + + + + + +329 20091017214720_add_missing_indexes_to_wiki_redirects.rb file @@ -910,6 +1012,40 @@ 195 +034_create_changesets.rb +file + + + + +2010-09-23T14:37:44.883725Z +82595f307b6fe5053151a681b737f063 +2007-04-25T15:06:20.062636Z +479 +jplang + + + + + + + + + + + + + + + + + + + + + +515 + 072_add_enumerations_position.rb file @@ -944,39 +1080,39 @@ 495 -034_create_changesets.rb -file - - - - -2010-09-23T14:37:44.883725Z -82595f307b6fe5053151a681b737f063 -2007-04-25T15:06:20.062636Z -479 -jplang - - - - - - - - - - - - - - - - - - - - - -515 +108_add_identity_url_to_users.rb +file + + + + +2010-09-23T14:37:44.915753Z +b175e6c85c5faf4b5d2f092f65338b10 +2009-02-11T19:06:55.627694Z +2440 +edavis10 + + + + + + + + + + + + + + + + + + + + + +187 20090614091200_fix_messages_sticky_null.rb file @@ -1012,40 +1148,6 @@ 176 -108_add_identity_url_to_users.rb -file - - - - -2010-09-23T14:37:44.915753Z -b175e6c85c5faf4b5d2f092f65338b10 -2009-02-11T19:06:55.627694Z -2440 -edavis10 - - - - - - - - - - - - - - - - - - - - - -187 - 20091220184736_add_indexes_to_issue_status.rb file @@ -2168,16 +2270,16 @@ 275 -001_setup.rb -file - - - - -2010-09-23T14:37:44.875728Z -b740a77ff87e6390f7ad86eaf0710040 -2008-08-25T16:35:20.899166Z -1764 +016_add_repositories_permissions.rb +file + + + + +2010-09-23T14:37:44.879727Z +e770aa6387bb4737804d5024e743cd25 +2007-08-29T16:52:35.680643Z +674 jplang @@ -2200,7 +2302,7 @@ -18072 +1658 20091010093521_fix_users_custom_values.rb file @@ -2236,16 +2338,16 @@ 276 -016_add_repositories_permissions.rb -file - - - - -2010-09-23T14:37:44.879727Z -e770aa6387bb4737804d5024e743cd25 -2007-08-29T16:52:35.680643Z -674 +001_setup.rb +file + + + + +2010-09-23T14:37:44.875728Z +b740a77ff87e6390f7ad86eaf0710040 +2008-08-25T16:35:20.899166Z +1764 jplang @@ -2268,7 +2370,41 @@ -1658 +18072 + +20100129193813_update_mail_notification_values.rb +file + + + + +2010-11-19T13:04:50.888959Z +d584696f16d190556dd796ab71ebe6f8 +2010-11-06T10:57:56.438344Z +4368 +jplang + + + + + + + + + + + + + + + + + + + + + +583 20091017214611_add_missing_indexes_to_journals.rb file @@ -2304,6 +2440,40 @@ 263 +20091017214107_add_missing_indexes_to_custom_fields.rb +file + + + + +2010-09-23T14:37:44.923753Z +0e1e45e51997617f8672e6d0d5ed8e51 +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +211 + 041_rename_comment_to_comments.rb file @@ -2338,14 +2508,14 @@ 896 -20091017214107_add_missing_indexes_to_custom_fields.rb -file - - - - -2010-09-23T14:37:44.923753Z -0e1e45e51997617f8672e6d0d5ed8e51 +20091017214750_add_missing_indexes_to_custom_fields_trackers.rb +file + + + + +2010-09-23T14:37:44.927757Z +871a600c06a6965f52c63177a82fbe15 2009-10-17T22:23:29.892475Z 2928 edavis10 @@ -2370,7 +2540,41 @@ -211 +275 + +067_create_wiki_redirects.rb +file + + + + +2010-09-23T14:37:44.891758Z +31acec69fd7efa0c26dec61f860b0c85 +2007-09-09T17:05:38.846724Z +720 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +441 089_add_attachments_description.rb file @@ -2406,74 +2610,6 @@ 201 -067_create_wiki_redirects.rb -file - - - - -2010-09-23T14:37:44.891758Z -31acec69fd7efa0c26dec61f860b0c85 -2007-09-09T17:05:38.846724Z -720 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -441 - -20091017214750_add_missing_indexes_to_custom_fields_trackers.rb -file - - - - -2010-09-23T14:37:44.927757Z -871a600c06a6965f52c63177a82fbe15 -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -275 - 103_set_custom_fields_editable.rb file @@ -2542,6 +2678,40 @@ 264 +039_create_watchers.rb +file + + + + +2010-09-23T14:37:44.887754Z +07bf6636d0acf3ec84b38648bbe2c07a +2007-04-21T12:09:07.794422Z +454 +jplang + + + + + + + + + + + + + + + + + + + + + +337 + 093_add_wiki_pages_protected.rb file @@ -2576,16 +2746,16 @@ 227 -039_create_watchers.rb -file - - - - -2010-09-23T14:37:44.887754Z -07bf6636d0acf3ec84b38648bbe2c07a -2007-04-21T12:09:07.794422Z -454 +060_change_changesets_committer_limit.rb +file + + + + +2010-09-23T14:37:44.891758Z +0abbef63f1f391688df012906a94877b +2008-03-09T18:25:37.323226Z +1222 jplang @@ -2608,7 +2778,7 @@ -337 +241 083_add_messages_sticky.rb file @@ -2644,40 +2814,6 @@ 193 -060_change_changesets_committer_limit.rb -file - - - - -2010-09-23T14:37:44.891758Z -0abbef63f1f391688df012906a94877b -2008-03-09T18:25:37.323226Z -1222 -jplang - - - - - - - - - - - - - - - - - - - - - -241 - 069_add_issues_estimated_hours.rb file @@ -2746,6 +2882,40 @@ 403 +20101104182107_add_unique_index_on_members.rb +file + + + + +2010-11-19T13:04:50.888959Z +c682cee6b57ef16a410b2253213f9864 +2010-11-06T11:49:45.617666Z +4370 +jplang + + + + + + + + + + + + + + + + + + + + + +898 + 20100313132032_add_issues_nested_sets_columns.rb file @@ -3018,6 +3188,40 @@ 339 +059_add_roles_assignable.rb +file + + + + +2010-09-23T14:37:44.891758Z +aa67262417630fc088eb57df8d2dd9d3 +2007-08-16T17:47:41.639068Z +649 +jplang + + + + + + + + + + + + + + + + + + + + + +199 + 098_set_topic_authors_as_watchers.rb file @@ -3052,40 +3256,6 @@ 749 -059_add_roles_assignable.rb -file - - - - -2010-09-23T14:37:44.891758Z -aa67262417630fc088eb57df8d2dd9d3 -2007-08-16T17:47:41.639068Z -649 -jplang - - - - - - - - - - - - - - - - - - - - - -199 - 013_create_queries.rb file @@ -3154,6 +3324,40 @@ 418 +048_allow_null_version_effective_date.rb +file + + + + +2010-09-23T14:37:44.887754Z +a7d8c7f023a76a8dbb0d0950797c08f8 +2008-02-12T21:11:16.312726Z +1140 +jplang + + + + + + + + + + + + + + + + + + + + + +225 + 040_create_changesets_issues.rb file @@ -3188,40 +3392,6 @@ 418 -048_allow_null_version_effective_date.rb -file - - - - -2010-09-23T14:37:44.887754Z -a7d8c7f023a76a8dbb0d0950797c08f8 -2008-02-12T21:11:16.312726Z -1140 -jplang - - - - - - - - - - - - - - - - - - - - - -225 - 085_add_role_tracker_old_status_index_to_workflows.rb file @@ -3392,6 +3562,40 @@ 252 +054_add_changesets_scmid.rb +file + + + + +2010-09-23T14:37:44.891758Z +b61285ac64245c1571e536a8c7e05a94 +2007-06-12T20:12:05.590809Z +559 +jplang + + + + + + + + + + + + + + + + + + + + + +180 + 20091017212457_add_missing_indexes_to_custom_fields_projects.rb file @@ -3426,39 +3630,73 @@ 275 -054_add_changesets_scmid.rb +20091017213716_add_missing_indexes_to_member_roles.rb +file + + + + +2010-09-23T14:37:44.923753Z +4bfd0623186217eee4346313f148ea7a +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +272 + +065_add_settings_updated_on.rb file 2010-09-23T14:37:44.891758Z -b61285ac64245c1571e536a8c7e05a94 -2007-06-12T20:12:05.590809Z -559 +708c039fe82ad86e9930122cac4757b1 +2007-08-31T17:45:32.784580Z +685 jplang - - - - - - - - - - - - - - - - - - - - - -180 +has-props + + + + + + + + + + + + + + + + + + + + +248 097_add_view_wiki_edits_permission.rb file @@ -3494,74 +3732,6 @@ 298 -065_add_settings_updated_on.rb -file - - - - -2010-09-23T14:37:44.891758Z -708c039fe82ad86e9930122cac4757b1 -2007-08-31T17:45:32.784580Z -685 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -248 - -20091017213716_add_missing_indexes_to_member_roles.rb -file - - - - -2010-09-23T14:37:44.923753Z -4bfd0623186217eee4346313f148ea7a -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -272 - 20091108092559_add_versions_status.rb file @@ -3698,6 +3868,40 @@ 155 +052_add_changes_revision.rb +file + + + + +2010-09-23T14:37:44.887754Z +3af07746c4eab3a1716744971ac26ffc +2007-06-12T20:12:05.590809Z +559 +jplang + + + + + + + + + + + + + + + + + + + + + +180 + 20090503121505_populate_member_roles.rb file @@ -3732,74 +3936,6 @@ 276 -052_add_changes_revision.rb -file - - - - -2010-09-23T14:37:44.887754Z -3af07746c4eab3a1716744971ac26ffc -2007-06-12T20:12:05.590809Z -559 -jplang - - - - - - - - - - - - - - - - - - - - - -180 - -050_add_wiki_attachments_permissions.rb -file - - - - -2010-09-23T14:37:44.887754Z -67d6e1898c150c8df560cb2ce8a2f2d7 -2007-08-29T16:52:35.680643Z -674 -jplang - - - - - - - - - - - - - - - - - - - - - -718 - 062_insert_builtin_roles.rb file @@ -3834,6 +3970,74 @@ 403 +050_add_wiki_attachments_permissions.rb +file + + + + +2010-09-23T14:37:44.887754Z +67d6e1898c150c8df560cb2ce8a2f2d7 +2007-08-29T16:52:35.680643Z +674 +jplang + + + + + + + + + + + + + + + + + + + + + +718 + +074_add_auth_sources_tls.rb +file + + + + +2010-09-23T14:37:44.895727Z +e7e163729c56cd9807450574d2beeda8 +2007-10-16T19:19:10.481742Z +845 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +215 + 104_add_projects_lft_and_rgt.rb file @@ -3868,16 +4072,16 @@ 250 -074_add_auth_sources_tls.rb -file - - - - -2010-09-23T14:37:44.895727Z -e7e163729c56cd9807450574d2beeda8 -2007-10-16T19:19:10.481742Z -845 +20091114105931_add_view_issues_permission.rb +file + + + + +2010-09-23T14:37:44.927757Z +886411cb32a18ec492acc798194210af +2009-11-14T12:08:47.175978Z +3039 jplang has-props @@ -3900,7 +4104,75 @@ -215 +262 + +20091017214336_add_missing_indexes_to_users.rb +file + + + + +2010-09-23T14:37:44.927757Z +8251942eb30b7c709ac6e3dc1ab5eedb +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +267 + +20091017213113_add_missing_indexes_to_enumerations.rb +file + + + + +2010-09-23T14:37:44.919754Z +22e6afc0519b7befbae2c4a4433c20f5 +2009-10-17T22:23:29.892475Z +2928 +edavis10 + + + + + + + + + + + + + + + + + + + + + +209 082_add_messages_locked.rb file @@ -3936,14 +4208,14 @@ 197 -20091017213113_add_missing_indexes_to_enumerations.rb -file - - - - -2010-09-23T14:37:44.919754Z -22e6afc0519b7befbae2c4a4433c20f5 +20091017213444_add_missing_indexes_to_tokens.rb +file + + + + +2010-09-23T14:37:44.923753Z +4c220f0316e1b04fa8350f0309698f24 2009-10-17T22:23:29.892475Z 2928 edavis10 @@ -3968,75 +4240,7 @@ -209 - -20091017214336_add_missing_indexes_to_users.rb -file - - - - -2010-09-23T14:37:44.927757Z -8251942eb30b7c709ac6e3dc1ab5eedb -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -267 - -20091114105931_add_view_issues_permission.rb -file - - - - -2010-09-23T14:37:44.927757Z -886411cb32a18ec492acc798194210af -2009-11-14T12:08:47.175978Z -3039 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -262 +172 20090503121501_create_member_roles.rb file @@ -4072,39 +4276,39 @@ 274 -20091017213444_add_missing_indexes_to_tokens.rb -file - - - - -2010-09-23T14:37:44.923753Z -4c220f0316e1b04fa8350f0309698f24 -2009-10-17T22:23:29.892475Z -2928 -edavis10 - - - - - - - - - - - - - - - - - - - - - -172 +057_add_versions_wiki_page_title.rb +file + + + + +2010-09-23T14:37:44.891758Z +6a4944f1162c00f2405200fb38773886 +2007-06-14T18:26:27.748707Z +564 +jplang + + + + + + + + + + + + + + + + + + + + + +202 20090323224724_add_type_to_enumerations.rb file @@ -4140,40 +4344,6 @@ 185 -057_add_versions_wiki_page_title.rb -file - - - - -2010-09-23T14:37:44.891758Z -6a4944f1162c00f2405200fb38773886 -2007-06-14T18:26:27.748707Z -564 -jplang - - - - - - - - - - - - - - - - - - - - - -202 - 004_export_pdf.rb file @@ -4616,6 +4786,40 @@ 351 +20101114115114_change_projects_name_limit.rb +file + + + + +2010-11-19T13:04:50.888959Z +0000368c453072e56da62defbc80441e +2010-11-14T12:33:14.198318Z +4402 +jplang + + + + + + + + + + + + + + + + + + + + + +284 + 20090406161854_add_parent_id_to_enumerations.rb file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20100129193402_change_users_mail_notification_to_string.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeUsersMailNotificationToString < ActiveRecord::Migration + def self.up + change_column :users, :mail_notification, :string, :default => '', :null => false + end + + def self.down + change_column :users, :mail_notification, :boolean, :default => true, :null => false + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20100129193813_update_mail_notification_values.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,12 @@ +# Patch the data from a boolean change. +class UpdateMailNotificationValues < ActiveRecord::Migration + def self.up + User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')") + User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") + User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + end + + def self.down + # No-op + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20101104182107_add_unique_index_on_members.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,21 @@ +class AddUniqueIndexOnMembers < ActiveRecord::Migration + def self.up + # Clean and reassign MemberRole rows if needed + MemberRole.delete_all("member_id NOT IN (SELECT id FROM #{Member.table_name})") + MemberRole.update_all("member_id =" + + " (SELECT min(m2.id) FROM #{Member.table_name} m1, #{Member.table_name} m2" + + " WHERE m1.user_id = m2.user_id AND m1.project_id = m2.project_id" + + " AND m1.id = #{MemberRole.table_name}.member_id)") + # Remove duplicates + Member.connection.select_values("SELECT m.id FROM #{Member.table_name} m" + + " WHERE m.id > (SELECT min(m1.id) FROM #{Member.table_name} m1 WHERE m1.user_id = m.user_id AND m1.project_id = m.project_id)").each do |i| + Member.delete_all(["id = ?", i]) + end + + # Then add a unique index + add_index :members, [:user_id, :project_id], :unique => true + end + + def self.down + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20101107130441_add_custom_fields_visible.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,10 @@ +class AddCustomFieldsVisible < ActiveRecord::Migration + def self.up + add_column :custom_fields, :visible, :boolean, :null => false, :default => true + CustomField.update_all("visible = #{CustomField.connection.quoted_true}") + end + + def self.down + remove_column :custom_fields, :visible + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20101114115114_change_projects_name_limit.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeProjectsNameLimit < ActiveRecord::Migration + def self.up + change_column :projects, :name, :string, :limit => nil, :default => '', :null => false + end + + def self.down + change_column :projects, :name, :string, :limit => 30, :default => '', :null => false + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/.svn/text-base/20101114115359_change_projects_identifier_limit.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeProjectsIdentifierLimit < ActiveRecord::Migration + def self.up + change_column :projects, :identifier, :string, :limit => nil + end + + def self.down + change_column :projects, :identifier, :string, :limit => 20 + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20100129193402_change_users_mail_notification_to_string.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeUsersMailNotificationToString < ActiveRecord::Migration + def self.up + change_column :users, :mail_notification, :string, :default => '', :null => false + end + + def self.down + change_column :users, :mail_notification, :boolean, :default => true, :null => false + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20100129193813_update_mail_notification_values.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,12 @@ +# Patch the data from a boolean change. +class UpdateMailNotificationValues < ActiveRecord::Migration + def self.up + User.update_all("mail_notification = 'all'", "mail_notification IN ('1', 't')") + User.update_all("mail_notification = 'selected'", "EXISTS (SELECT 1 FROM #{Member.table_name} WHERE #{Member.table_name}.mail_notification = #{connection.quoted_true} AND #{Member.table_name}.user_id = #{User.table_name}.id)") + User.update_all("mail_notification = 'only_my_events'", "mail_notification NOT IN ('all', 'selected')") + end + + def self.down + # No-op + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20101104182107_add_unique_index_on_members.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,21 @@ +class AddUniqueIndexOnMembers < ActiveRecord::Migration + def self.up + # Clean and reassign MemberRole rows if needed + MemberRole.delete_all("member_id NOT IN (SELECT id FROM #{Member.table_name})") + MemberRole.update_all("member_id =" + + " (SELECT min(m2.id) FROM #{Member.table_name} m1, #{Member.table_name} m2" + + " WHERE m1.user_id = m2.user_id AND m1.project_id = m2.project_id" + + " AND m1.id = #{MemberRole.table_name}.member_id)") + # Remove duplicates + Member.connection.select_values("SELECT m.id FROM #{Member.table_name} m" + + " WHERE m.id > (SELECT min(m1.id) FROM #{Member.table_name} m1 WHERE m1.user_id = m.user_id AND m1.project_id = m.project_id)").each do |i| + Member.delete_all(["id = ?", i]) + end + + # Then add a unique index + add_index :members, [:user_id, :project_id], :unique => true + end + + def self.down + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20101107130441_add_custom_fields_visible.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,10 @@ +class AddCustomFieldsVisible < ActiveRecord::Migration + def self.up + add_column :custom_fields, :visible, :boolean, :null => false, :default => true + CustomField.update_all("visible = #{CustomField.connection.quoted_true}") + end + + def self.down + remove_column :custom_fields, :visible + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20101114115114_change_projects_name_limit.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeProjectsNameLimit < ActiveRecord::Migration + def self.up + change_column :projects, :name, :string, :limit => nil, :default => '', :null => false + end + + def self.down + change_column :projects, :name, :string, :limit => 30, :default => '', :null => false + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/db/migrate/20101114115359_change_projects_identifier_limit.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,9 @@ +class ChangeProjectsIdentifierLimit < ActiveRecord::Migration + def self.up + change_column :projects, :identifier, :string, :limit => nil + end + + def self.down + change_column :projects, :identifier, :string, :limit => 20 + end +end
--- a/doc/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/doc/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 28 -/svn/!svn/ver/4029/trunk/doc +/svn/!svn/ver/4348/trunk/doc END UPGRADING K 25 @@ -31,7 +31,7 @@ K 25 svn:wc:ra_dav:version-url V 38 -/svn/!svn/ver/4029/trunk/doc/CHANGELOG +/svn/!svn/ver/4348/trunk/doc/CHANGELOG END COPYING K 25 @@ -39,3 +39,9 @@ V 35 /svn/!svn/ver/883/trunk/doc/COPYING END +git.rdoc +K 25 +svn:wc:ra_dav:version-url +V 37 +/svn/!svn/ver/4273/trunk/doc/git.rdoc +END
--- a/doc/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/doc/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/doc http://redmine.rubyforge.org/svn -2010-08-22T21:17:44.394587Z -4029 +2010-11-01T00:37:14.867836Z +4348 edavis10 @@ -168,10 +168,10 @@ -2010-09-23T14:37:44.935786Z -0310fe2cda3332d05e3275320e73407f -2010-08-22T21:17:44.394587Z -4029 +2010-11-19T13:04:51.228963Z +c17df05456a8e8f311c61ea7825fe2aa +2010-11-01T00:37:14.867836Z +4348 edavis10 has-props @@ -194,7 +194,7 @@ -73025 +77969 COPYING file @@ -230,3 +230,37 @@ 17987 +git.rdoc +file + + + + +2010-11-19T13:04:51.228963Z +cc77650493d11d18eabb058fbdf7ac24 +2010-10-22T17:18:11.628381Z +4273 +edavis10 + + + + + + + + + + + + + + + + + + + + + +2248 +
--- a/doc/.svn/text-base/CHANGELOG.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/doc/.svn/text-base/CHANGELOG.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -4,6 +4,100 @@ Copyright (C) 2006-2010 Jean-Philippe Lang http://www.redmine.org/ +== 2010-10-31 v1.0.3 + +* #4065: Redmine.pm doesn't work with LDAPS and a non-standard port +* #4416: Link from version details page to edit the wiki. +* #5484: Add new issue as subtask to an existing ticket +* #5948: Update help/wiki_syntax_detailed.html with more link options +* #6494: Typo in pt_BR translation for 1.0.2 +* #6508: Japanese translation update +* #6509: Localization pt-PT (new strings) +* #6511: Rake task to test email +* #6525: Traditional Chinese language file (to r4225) +* #6536: Patch for swedish translation +* #6548: Rake tasks to add/remove i18n strings +* #6569: Updated Hebrew translation +* #6570: Japanese Translation for r4231 +* #6596: pt-BR translation updates +* #6629: Change field-name of issues start date +* #6669: Bulgarian translation +* #6731: Macedonian translation fix +* #6732: Japanese Translation for r4287 +* #6735: Add user-agent to reposman +* #6736: Traditional Chinese language file (to r4288) +* #6739: Swedish Translation for r4288 +* #6765: Traditional Chinese language file (to r4302) +* Fixed #5324: Git not working if color.ui is enabled +* Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark). +* Fixed #5803: Precedes/Follows Relationships Broke +* Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions +* Fixed #6438: Autologin cannot be disabled again once it's enabled +* Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory +* Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list +* Fixed #6563: i18n-issues on calendar view +* Fixed #6598: Wrong caption for button_create_and_continue in German language file +* Fixed #6607: Unclear caption for german button_update +* Fixed #6612: SortHelper missing from CalendarsController +* Fixed #6740: Max attachment size, incorrect usage of 'KB' +* Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb: + +== 2010-09-26 v1.0.2 + +* #2285: issue-refinement: pressing enter should result to an "apply" +* #3411: Allow mass status update trough context menu +* #5929: https-enabled gravatars when called over https +* #6189: Japanese Translation for r4011 +* #6197: Traditional Chinese language file (to r4036) +* #6198: Updated german translation +* #6208: Macedonian translation +* #6210: Swedish Translation for r4039 +* #6248: nl translation update for r4050 +* #6263: Catalan translation update +* #6275: After submitting a related issue, the Issue field should be re-focused +* #6289: Checkboxes in issues list shouldn't be displayed when printing +* #6290: Make journals theming easier +* #6291: User#allowed_to? is not tested +* #6306: Traditional Chinese language file (to r4061) +* #6307: Korean translation update for 4066(4061) +* #6316: pt_BR update +* #6339: SERBIAN Updated +* #6358: Updated Polish translation +* #6363: Japanese Translation for r4080 +* #6365: Traditional Chinese language file (to r4081) +* #6382: Issue PDF export variable usage +* #6428: Interim solution for i18n >= 0.4 +* #6441: Japanese Translation for r4162 +* #6451: Traditional Chinese language file (to r4167) +* #6465: Japanese Translation for r4171 +* #6466: Traditional Chinese language file (to r4171) +* #6490: pt-BR translation for 1.0.2 +* Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root +* Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections +* Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio +* Fixed #5608: broken with i18n 0.4.0 +* Fixed #6054: Error 500 on filenames with whitespace in git reposities +* Fixed #6135: Default logger configuration grows without bound. +* Fixed #6191: Deletion of a main task deletes all subtasks +* Fixed #6195: Missing move issues between projects +* Fixed #6242: can't switch between inline and side-by-side diff +* Fixed #6249: Create and continue returns 404 +* Fixed #6267: changing the authentication mode from ldap to internal with setting the password +* Fixed #6270: diff coderay malformed in the "news" page +* Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files +* Fixed #6333: Create and continue results in a 404 Error +* Fixed #6346: Age column on repository view is skewed for git, probably CVS too +* Fixed #6351: Context menu on roadmap broken +* Fixed #6388: New Subproject leads to a 404 +* Fixed #6392: Updated/Created links to activity broken +* Fixed #6413: Error in SQL +* Fixed #6443: Redirect to project settings after Copying a Project +* Fixed #6448: Saving a wiki page with no content has a translation missing +* Fixed #6452: Unhandled exception on creating File +* Fixed #6471: Typo in label_report in Czech translation +* Fixed #6479: Changing tracker type will lose watchers +* Fixed #6499: Files with leading or trailing whitespace are not shown in git. + == 2010-08-22 v1.0.1 * #819: Add a body ID and class to all pages
--- a/doc/CHANGELOG Fri Sep 24 14:06:04 2010 +0100 +++ b/doc/CHANGELOG Fri Nov 19 13:24:41 2010 +0000 @@ -4,6 +4,100 @@ Copyright (C) 2006-2010 Jean-Philippe Lang http://www.redmine.org/ +== 2010-10-31 v1.0.3 + +* #4065: Redmine.pm doesn't work with LDAPS and a non-standard port +* #4416: Link from version details page to edit the wiki. +* #5484: Add new issue as subtask to an existing ticket +* #5948: Update help/wiki_syntax_detailed.html with more link options +* #6494: Typo in pt_BR translation for 1.0.2 +* #6508: Japanese translation update +* #6509: Localization pt-PT (new strings) +* #6511: Rake task to test email +* #6525: Traditional Chinese language file (to r4225) +* #6536: Patch for swedish translation +* #6548: Rake tasks to add/remove i18n strings +* #6569: Updated Hebrew translation +* #6570: Japanese Translation for r4231 +* #6596: pt-BR translation updates +* #6629: Change field-name of issues start date +* #6669: Bulgarian translation +* #6731: Macedonian translation fix +* #6732: Japanese Translation for r4287 +* #6735: Add user-agent to reposman +* #6736: Traditional Chinese language file (to r4288) +* #6739: Swedish Translation for r4288 +* #6765: Traditional Chinese language file (to r4302) +* Fixed #5324: Git not working if color.ui is enabled +* Fixed #5652: Bad URL parsing in the wiki when it ends with right-angle-bracket(greater-than mark). +* Fixed #5803: Precedes/Follows Relationships Broke +* Fixed #6435: Links to wikipages bound to versions do not respect version-sharing in Settings -> Versions +* Fixed #6438: Autologin cannot be disabled again once it's enabled +* Fixed #6513: "Move" and "Copy" are not displayed when deployed in subdirectory +* Fixed #6521: Tooltip/label for user "search-refinment" field on group/project member list +* Fixed #6563: i18n-issues on calendar view +* Fixed #6598: Wrong caption for button_create_and_continue in German language file +* Fixed #6607: Unclear caption for german button_update +* Fixed #6612: SortHelper missing from CalendarsController +* Fixed #6740: Max attachment size, incorrect usage of 'KB' +* Fixed #6750: ActionView::TemplateError (undefined method `empty?' for nil:NilClass) on line #12 of app/views/context_menus/issues.html.erb: + +== 2010-09-26 v1.0.2 + +* #2285: issue-refinement: pressing enter should result to an "apply" +* #3411: Allow mass status update trough context menu +* #5929: https-enabled gravatars when called over https +* #6189: Japanese Translation for r4011 +* #6197: Traditional Chinese language file (to r4036) +* #6198: Updated german translation +* #6208: Macedonian translation +* #6210: Swedish Translation for r4039 +* #6248: nl translation update for r4050 +* #6263: Catalan translation update +* #6275: After submitting a related issue, the Issue field should be re-focused +* #6289: Checkboxes in issues list shouldn't be displayed when printing +* #6290: Make journals theming easier +* #6291: User#allowed_to? is not tested +* #6306: Traditional Chinese language file (to r4061) +* #6307: Korean translation update for 4066(4061) +* #6316: pt_BR update +* #6339: SERBIAN Updated +* #6358: Updated Polish translation +* #6363: Japanese Translation for r4080 +* #6365: Traditional Chinese language file (to r4081) +* #6382: Issue PDF export variable usage +* #6428: Interim solution for i18n >= 0.4 +* #6441: Japanese Translation for r4162 +* #6451: Traditional Chinese language file (to r4167) +* #6465: Japanese Translation for r4171 +* #6466: Traditional Chinese language file (to r4171) +* #6490: pt-BR translation for 1.0.2 +* Fixed #3935: stylesheet_link_tag with plugin doesn't take into account relative_url_root +* Fixed #4998: Global issue list's context menu has enabled options for parent menus but there are no valid selections +* Fixed #5170: Done ratio can not revert to 0% if status is used for done ratio +* Fixed #5608: broken with i18n 0.4.0 +* Fixed #6054: Error 500 on filenames with whitespace in git reposities +* Fixed #6135: Default logger configuration grows without bound. +* Fixed #6191: Deletion of a main task deletes all subtasks +* Fixed #6195: Missing move issues between projects +* Fixed #6242: can't switch between inline and side-by-side diff +* Fixed #6249: Create and continue returns 404 +* Fixed #6267: changing the authentication mode from ldap to internal with setting the password +* Fixed #6270: diff coderay malformed in the "news" page +* Fixed #6278: missing "cant_link_an_issue_with_a_descendant"from locale files +* Fixed #6333: Create and continue results in a 404 Error +* Fixed #6346: Age column on repository view is skewed for git, probably CVS too +* Fixed #6351: Context menu on roadmap broken +* Fixed #6388: New Subproject leads to a 404 +* Fixed #6392: Updated/Created links to activity broken +* Fixed #6413: Error in SQL +* Fixed #6443: Redirect to project settings after Copying a Project +* Fixed #6448: Saving a wiki page with no content has a translation missing +* Fixed #6452: Unhandled exception on creating File +* Fixed #6471: Typo in label_report in Czech translation +* Fixed #6479: Changing tracker type will lose watchers +* Fixed #6499: Files with leading or trailing whitespace are not shown in git. + == 2010-08-22 v1.0.1 * #819: Add a body ID and class to all pages
--- a/extra/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 30 -/svn/!svn/ver/3832/trunk/extra +/svn/!svn/ver/4309/trunk/extra END
--- a/extra/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra http://redmine.rubyforge.org/svn -2010-07-08T03:46:19.270127Z -3832 -edavis10 +2010-10-29T22:55:50.222644Z +4309 +jbbarth
--- a/extra/mail_handler/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/mail_handler/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/mail_handler http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/controllers http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/models http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/views/example/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/views/example/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/example http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/views/my/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/views/my/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/views/my/blocks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/views/my/blocks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my/blocks http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/app/views/settings/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/app/views/settings/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/settings http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/assets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/assets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/assets/images/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/assets/images/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/images http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/assets/stylesheets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/assets/stylesheets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/stylesheets http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/config/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/config/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/config/locales/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/config/locales/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config/locales http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/db/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/db/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db http://redmine.rubyforge.org/svn
--- a/extra/sample_plugin/db/migrate/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/sample_plugin/db/migrate/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db/migrate http://redmine.rubyforge.org/svn
--- a/extra/svn/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 34 -/svn/!svn/ver/3832/trunk/extra/svn +/svn/!svn/ver/4309/trunk/extra/svn END reposman.rb K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/3571/trunk/extra/svn/reposman.rb +/svn/!svn/ver/4288/trunk/extra/svn/reposman.rb END svnserve.wrapper K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 45 -/svn/!svn/ver/3832/trunk/extra/svn/Redmine.pm +/svn/!svn/ver/4309/trunk/extra/svn/Redmine.pm END create_views.sql K 25
--- a/extra/svn/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/extra/svn http://redmine.rubyforge.org/svn -2010-07-08T03:46:19.270127Z -3832 -edavis10 +2010-10-29T22:55:50.222644Z +4309 +jbbarth @@ -32,10 +32,10 @@ -2010-09-24T11:56:52.976058Z -ea12c26fe7b1a65015d8a657c003f43b -2010-03-12T18:15:19.896502Z -3571 +2010-11-19T13:04:50.864947Z +a0d169b0fc20459335e531e4f3921ede +2010-10-24T21:00:05.611798Z +4288 jplang has-props @@ -58,7 +58,7 @@ -10475 +10545 svnserve.wrapper file @@ -100,11 +100,11 @@ -2010-09-23T14:37:44.963747Z -6203596871e4eff5bc22d0d414b87370 -2010-07-08T03:46:19.270127Z -3832 -edavis10 +2010-11-19T13:04:50.864947Z +5ed4546a59c9729cbd9b407ad0996b9b +2010-10-29T22:55:50.222644Z +4309 +jbbarth has-props @@ -126,7 +126,7 @@ -10740 +10752 create_views.sql file
--- a/extra/svn/.svn/text-base/Redmine.pm.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/.svn/text-base/Redmine.pm.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -331,7 +331,7 @@ $sthldap->execute($auth_source_id); while (my @rowldap = $sthldap->fetchrow_array) { my $ldap = Authen::Simple::LDAP->new( - host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0], + host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]:$rowldap[1]" : $rowldap[0], port => $rowldap[1], basedn => $rowldap[5], binddn => $rowldap[3] ? $rowldap[3] : "",
--- a/extra/svn/.svn/text-base/reposman.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/.svn/text-base/reposman.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -180,7 +180,9 @@ log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true) end -class Project < ActiveResource::Base; end +class Project < ActiveResource::Base + self.headers["User-agent"] = "Redmine repository manager/#{Version}" +end log("querying Redmine for projects...", :level => 1);
--- a/extra/svn/Redmine.pm Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/Redmine.pm Fri Nov 19 13:24:41 2010 +0000 @@ -331,7 +331,7 @@ $sthldap->execute($auth_source_id); while (my @rowldap = $sthldap->fetchrow_array) { my $ldap = Authen::Simple::LDAP->new( - host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]" : $rowldap[0], + host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]:$rowldap[1]" : $rowldap[0], port => $rowldap[1], basedn => $rowldap[5], binddn => $rowldap[3] ? $rowldap[3] : "",
--- a/extra/svn/reposman.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/extra/svn/reposman.rb Fri Nov 19 13:24:41 2010 +0000 @@ -180,7 +180,9 @@ log("This script requires activeresource.\nRun 'gem install activeresource' to install it.", :exit => true) end -class Project < ActiveResource::Base; end +class Project < ActiveResource::Base + self.headers["User-agent"] = "Redmine repository manager/#{Version}" +end log("querying Redmine for projects...", :level => 1);
--- a/files/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/files/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/files http://redmine.rubyforge.org/svn
--- a/lib/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 28 -/svn/!svn/ver/4172/trunk/lib +/svn/!svn/ver/4406/trunk/lib END faster_csv.rb K 25 @@ -13,7 +13,7 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4172/trunk/lib/redmine.rb +/svn/!svn/ver/4388/trunk/lib/redmine.rb END tabular_form_builder.rb K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/3718/trunk/lib/redcloth3.rb +/svn/!svn/ver/4374/trunk/lib/redcloth3.rb END ar_condition.rb K 25
--- a/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -78,11 +78,11 @@ -2010-09-24T12:48:29.815852Z -3874a67810147c88406056d7bdea8fd3 -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-19T13:04:51.440969Z +bdb16884474de1a2d37d4cc215f7f027 +2010-11-07T22:38:10.728638Z +4388 +jplang has-props @@ -104,7 +104,7 @@ -12555 +12745 tabular_form_builder.rb file @@ -149,10 +149,10 @@ -2010-09-23T14:37:45.003823Z -53cdb197e20e88c4c2feba08946d49b6 -2010-04-30T17:50:34.330526Z -3718 +2010-11-19T13:04:51.440969Z +d1a99a7a8d34e675199eec76eea82129 +2010-11-06T13:29:23.489999Z +4374 jplang has-props
--- a/lib/.svn/text-base/redcloth3.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/.svn/text-base/redcloth3.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -456,7 +456,7 @@ # next if tog and method( tog ).call # text.gsub! re, resub #end - text.gsub!(/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/) do |m| + text.gsub!(/\b([A-Z][A-Z0-9]{1,})\b(?:[(]([^)]*)[)])/) do |m| "<acronym title=\"#{htmlesc $2}\">#{$1}</acronym>" end end
--- a/lib/.svn/text-base/redmine.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/.svn/text-base/redmine.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -8,6 +8,7 @@ require 'redmine/themes' require 'redmine/hook' require 'redmine/plugin' +require 'redmine/notifiable' require 'redmine/wiki_formatting' require 'redmine/scm/base' @@ -83,10 +84,10 @@ end map.project_module :time_tracking do |map| - map.permission :log_time, {:timelog => :edit}, :require => :loggedin - map.permission :view_time_entries, :timelog => [:details, :report] - map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member - map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin + map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin + map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report] + map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member end @@ -110,10 +111,10 @@ map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member - map.permission :view_wiki_pages, :wiki => [:index, :special] - map.permission :export_wiki_pages, {} + map.permission :view_wiki_pages, :wiki => [:index, :show, :special, :date_index] + map.permission :export_wiki_pages, :wiki => [:export] map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate] - map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment] + map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment] map.permission :delete_wiki_pages_attachments, {} map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member end @@ -194,7 +195,7 @@ menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural - menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil }, + menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
--- a/lib/SVG/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/SVG/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/SVG http://redmine.rubyforge.org/svn
--- a/lib/SVG/Graph/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/SVG/Graph/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/SVG/Graph http://redmine.rubyforge.org/svn
--- a/lib/generators/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin/templates http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin_controller/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin_controller/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin_controller/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin_controller/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller/templates http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin_model/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin_model/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model http://redmine.rubyforge.org/svn
--- a/lib/generators/redmine_plugin_model/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/generators/redmine_plugin_model/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model/templates http://redmine.rubyforge.org/svn
--- a/lib/plugins/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/plugins/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/plugins http://redmine.rubyforge.org/svn
--- a/lib/redcloth3.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redcloth3.rb Fri Nov 19 13:24:41 2010 +0000 @@ -456,7 +456,7 @@ # next if tog and method( tog ).call # text.gsub! re, resub #end - text.gsub!(/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/) do |m| + text.gsub!(/\b([A-Z][A-Z0-9]{1,})\b(?:[(]([^)]*)[)])/) do |m| "<acronym title=\"#{htmlesc $2}\">#{$1}</acronym>" end end
--- a/lib/redmine.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine.rb Fri Nov 19 13:24:41 2010 +0000 @@ -8,6 +8,7 @@ require 'redmine/themes' require 'redmine/hook' require 'redmine/plugin' +require 'redmine/notifiable' require 'redmine/wiki_formatting' require 'redmine/scm/base' @@ -83,10 +84,10 @@ end map.project_module :time_tracking do |map| - map.permission :log_time, {:timelog => :edit}, :require => :loggedin - map.permission :view_time_entries, :timelog => [:details, :report] - map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member - map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin + map.permission :log_time, {:timelog => [:new, :create, :edit, :update]}, :require => :loggedin + map.permission :view_time_entries, :timelog => [:index], :time_entry_reports => [:report] + map.permission :edit_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :member + map.permission :edit_own_time_entries, {:timelog => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member end @@ -110,10 +111,10 @@ map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member - map.permission :view_wiki_pages, :wiki => [:index, :special] - map.permission :export_wiki_pages, {} + map.permission :view_wiki_pages, :wiki => [:index, :show, :special, :date_index] + map.permission :export_wiki_pages, :wiki => [:export] map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate] - map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment] + map.permission :edit_wiki_pages, :wiki => [:edit, :update, :preview, :add_attachment] map.permission :delete_wiki_pages_attachments, {} map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member end @@ -194,7 +195,7 @@ menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural - menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil }, + menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
--- a/lib/redmine/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 36 -/svn/!svn/ver/4104/trunk/lib/redmine +/svn/!svn/ver/4406/trunk/lib/redmine END i18n.rb K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/2493/trunk/lib/redmine/i18n.rb +/svn/!svn/ver/4183/trunk/lib/redmine/i18n.rb END pop3.rb K 25 @@ -21,11 +21,11 @@ V 48 /svn/!svn/ver/1753/trunk/lib/redmine/platform.rb END -version.rb +custom_field_format.rb K 25 svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/4028/trunk/lib/redmine/version.rb +V 59 +/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb END themes.rb K 25 @@ -33,11 +33,11 @@ V 46 /svn/!svn/ver/3710/trunk/lib/redmine/themes.rb END -custom_field_format.rb +version.rb K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/3675/trunk/lib/redmine/custom_field_format.rb +V 47 +/svn/!svn/ver/4349/trunk/lib/redmine/version.rb END imap.rb K 25 @@ -57,35 +57,35 @@ V 44 /svn/!svn/ver/2776/trunk/lib/redmine/info.rb END +activity.rb +K 25 +svn:wc:ra_dav:version-url +V 48 +/svn/!svn/ver/1702/trunk/lib/redmine/activity.rb +END access_keys.rb K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/1081/trunk/lib/redmine/access_keys.rb END -activity.rb -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/1702/trunk/lib/redmine/activity.rb -END wiki_formatting.rb K 25 svn:wc:ra_dav:version-url V 55 /svn/!svn/ver/3446/trunk/lib/redmine/wiki_formatting.rb END +plugin.rb +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/4293/trunk/lib/redmine/plugin.rb +END menu_manager.rb K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/3539/trunk/lib/redmine/menu_manager.rb -END -plugin.rb -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3841/trunk/lib/redmine/plugin.rb +/svn/!svn/ver/4406/trunk/lib/redmine/menu_manager.rb END utils.rb K 25 @@ -97,7 +97,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/2522/trunk/lib/redmine/hook.rb +/svn/!svn/ver/4406/trunk/lib/redmine/hook.rb END access_control.rb K 25 @@ -135,3 +135,9 @@ V 52 /svn/!svn/ver/3028/trunk/lib/redmine/unified_diff.rb END +notifiable.rb +K 25 +svn:wc:ra_dav:version-url +V 50 +/svn/!svn/ver/4222/trunk/lib/redmine/notifiable.rb +END
--- a/lib/redmine/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine http://redmine.rubyforge.org/svn -2010-09-20T02:55:20.180218Z -4104 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -26,46 +26,9 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 -i18n.rb -file - - - - -2010-09-23T14:37:45.027790Z -009b7a9ada5c3e83d6a7a26256c34951 -2009-02-21T11:04:50.579477Z -2493 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2315 - export dir -scm -dir - pop3.rb file @@ -100,6 +63,392 @@ 2173 +themes.rb +file + + + + +2010-09-23T14:37:45.043748Z +209d3f63cbc76795042695c71f6230f1 +2010-04-30T12:44:19.138265Z +3710 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2311 + +imap.rb +file + + + + +2010-09-23T14:37:45.031809Z +caeedebd5c05aede1d232510d03ad136 +2008-12-31T14:56:30.439880Z +2220 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2349 + +activity +dir + +info.rb +file + + + + +2010-09-23T14:37:45.031809Z +ddadcd03b97455adae2451a2140afbf6 +2009-05-30T23:00:22.602473Z +2776 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +399 + +access_keys.rb +file + + + + +2010-09-23T14:37:45.015759Z +41c2852d003d94cb23c231f06be62d12 +2008-01-20T13:07:19.003764Z +1081 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1160 + +utils.rb +file + + + + +2010-09-23T14:37:45.047759Z +d04b071ce8f05b44ca6993c56fea9b1f +2009-01-04T17:09:25.896068Z +2234 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1466 + +helpers +dir + +access_control.rb +file + + + + +2010-09-23T14:37:45.015759Z +e7e4c44515553e36bffa6e8f8960080b +2008-09-25T18:51:03.022592Z +1907 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3531 + +search.rb +file + + + + +2010-09-23T14:37:45.043748Z +6f968bcc4f81562e9cbddb02ebc62601 +2010-02-17T20:05:51.124365Z +3444 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +2631 + +core_ext +dir + +about.rb +file + + + + +2010-09-23T14:37:45.015759Z +91ed592a8419f1bec48ba880c7a86e29 +2009-05-25T19:10:26.065563Z +2766 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +431 + +syntax_highlighting.rb +file + + + + +2010-09-23T14:37:45.043748Z +4a40844a6cd11aa7409bc8f4e9a2c74e +2010-03-28T11:30:48.135356Z +3619 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1909 + +notifiable.rb +file + + + + +2010-11-19T13:04:51.416932Z +cfdd5556d40422dd9610d2124a2fefac +2010-09-28T21:09:06.467392Z +4222 +edavis10 + + + + + + + + + + + + + + + + + + + + + +916 + +i18n.rb +file + + + + +2010-11-19T13:04:51.412966Z +f1b6f1af024068879494612c2494e865 +2010-09-26T17:13:52.794850Z +4183 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +2378 + +scm +dir + platform.rb file @@ -168,50 +517,16 @@ 2761 -themes.rb -file - - - - -2010-09-23T14:37:45.043748Z -209d3f63cbc76795042695c71f6230f1 -2010-04-30T12:44:19.138265Z -3710 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2311 - version.rb file -2010-09-23T14:37:45.047759Z -6b901e32b10f12644f73eaad79a192aa -2010-08-22T21:15:38.956901Z -4028 +2010-11-19T13:04:51.412966Z +8241f5642ac2d1aaa38fc1625f8816e6 +2010-11-01T00:37:19.679270Z +4349 edavis10 has-props @@ -236,40 +551,6 @@ 1056 -imap.rb -file - - - - -2010-09-23T14:37:45.031809Z -caeedebd5c05aede1d232510d03ad136 -2008-12-31T14:56:30.439880Z -2220 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2349 - mime_type.rb file @@ -304,83 +585,12 @@ 3498 -activity -dir - views dir wiki_formatting dir -info.rb -file - - - - -2010-09-23T14:37:45.031809Z -ddadcd03b97455adae2451a2140afbf6 -2009-05-30T23:00:22.602473Z -2776 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -399 - -access_keys.rb -file - - - - -2010-09-23T14:37:45.015759Z -41c2852d003d94cb23c231f06be62d12 -2008-01-20T13:07:19.003764Z -1081 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1160 - activity.rb file @@ -449,17 +659,51 @@ 4431 +plugin.rb +file + + + + +2010-11-19T13:04:51.412966Z +81bc46012d5a0067e18e08bada197d8c +2010-10-25T23:32:01.793182Z +4293 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +11219 + menu_manager.rb file -2010-09-23T14:37:45.031809Z -14187e67feb3e810abc8737c44d25654 -2010-03-04T06:01:05.500229Z -3539 -edavis10 +2010-11-19T13:04:51.412966Z +7f3739a749929e1f65efb292620d361b +2010-11-14T16:24:21.989522Z +4406 +jplang has-props @@ -481,44 +725,7 @@ -15321 - -plugin.rb -file - - - - -2010-09-23T14:37:45.031809Z -62caf1a80b1f5985c9f75fa41bf9b147 -2010-07-16T03:11:35.104268Z -3841 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -11049 - -helpers -dir +15303 hook.rb file @@ -526,44 +733,10 @@ -2010-09-23T14:37:45.027790Z -0d02603ed1f291c8f33bc5b6ed3800e6 -2009-02-25T07:25:01.090780Z -2522 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -5198 - -utils.rb -file - - - - -2010-09-23T14:37:45.047759Z -d04b071ce8f05b44ca6993c56fea9b1f -2009-01-04T17:09:25.896068Z -2234 +2010-11-19T13:04:51.416932Z +dfacee092edce74d74e8ea7d7a54aeba +2010-11-14T16:24:21.989522Z +4406 jplang has-props @@ -586,78 +759,7 @@ -1466 - -access_control.rb -file - - - - -2010-09-23T14:37:45.015759Z -e7e4c44515553e36bffa6e8f8960080b -2008-09-25T18:51:03.022592Z -1907 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3531 - -search.rb -file - - - - -2010-09-23T14:37:45.043748Z -6f968bcc4f81562e9cbddb02ebc62601 -2010-02-17T20:05:51.124365Z -3444 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -2631 - -core_ext -dir +5192 core_ext.rb file @@ -693,77 +795,6 @@ 77 -about.rb -file - - - - -2010-09-23T14:37:45.015759Z -91ed592a8419f1bec48ba880c7a86e29 -2009-05-25T19:10:26.065563Z -2766 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -431 - -default_data -dir - -syntax_highlighting.rb -file - - - - -2010-09-23T14:37:45.043748Z -4a40844a6cd11aa7409bc8f4e9a2c74e -2010-03-28T11:30:48.135356Z -3619 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1909 - unified_diff.rb file @@ -798,3 +829,6 @@ 5259 +default_data +dir +
--- a/lib/redmine/.svn/text-base/hook.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/text-base/hook.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -57,7 +57,7 @@ # Calls a hook. # Returns the listeners response. def call_hook(hook, context={}) - returning [] do |response| + [].tap do |response| hls = hook_listeners(hook) if hls.any? hls.each {|listener| response << listener.send(hook, context)}
--- a/lib/redmine/.svn/text-base/i18n.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/text-base/i18n.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -37,7 +37,7 @@ def format_date(date) return nil unless date - Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format) + Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format) end def format_time(time, include_date = true) @@ -45,7 +45,7 @@ time = time.to_time if time.is_a?(String) zone = User.current.time_zone local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time) - Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : + Setting.time_format.blank? ? ::I18n.l(local, :count => local.strftime('%d'), :format => (include_date ? :default : :time)) : ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}") end
--- a/lib/redmine/.svn/text-base/menu_manager.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/text-base/menu_manager.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -192,13 +192,13 @@ def render_menu_node_with_children(node, project=nil) caption, url, selected = extract_node_details(node, project) - html = returning [] do |html| + html = [].tap do |html| html << '<li>' # Parent html << render_single_menu_node(node, caption, url, selected) # Standard children - standard_children_list = returning "" do |child_html| + standard_children_list = "".tap do |child_html| node.children.each do |child| child_html << render_menu_node(child, project) end @@ -219,7 +219,7 @@ def render_unattached_children_menu(node, project) return nil unless node.child_menus - returning "" do |child_html| + "".tap do |child_html| unattached_children = node.child_menus.call(project) # Tree nodes support #each so we need to do object detection if unattached_children.is_a? Array
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/.svn/text-base/notifiable.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,25 @@ +module Redmine + class Notifiable < Struct.new(:name, :parent) + + def to_s + name + end + + # TODO: Plugin API for adding a new notification? + def self.all + notifications = [] + notifications << Notifiable.new('issue_added') + notifications << Notifiable.new('issue_updated') + notifications << Notifiable.new('issue_note_added', 'issue_updated') + notifications << Notifiable.new('issue_status_updated', 'issue_updated') + notifications << Notifiable.new('issue_priority_updated', 'issue_updated') + notifications << Notifiable.new('news_added') + notifications << Notifiable.new('document_added') + notifications << Notifiable.new('file_added') + notifications << Notifiable.new('message_posted') + notifications << Notifiable.new('wiki_content_added') + notifications << Notifiable.new('wiki_content_updated') + notifications + end + end +end
--- a/lib/redmine/.svn/text-base/plugin.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/text-base/plugin.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -89,6 +89,13 @@ def self.clear @registered_plugins = {} end + + # Checks if a plugin is installed + # + # @param [String] id name of the plugin + def self.installed?(id) + registered_plugins[id.to_sym].present? + end def initialize(id) @id = id.to_sym
--- a/lib/redmine/.svn/text-base/version.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/.svn/text-base/version.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -4,7 +4,7 @@ module VERSION #:nodoc: MAJOR = 1 MINOR = 0 - TINY = 1 + TINY = 3 # Branch values: # * official release: nil
--- a/lib/redmine/activity/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/activity/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/activity http://redmine.rubyforge.org/svn
--- a/lib/redmine/core_ext/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/core_ext/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext http://redmine.rubyforge.org/svn
--- a/lib/redmine/core_ext/string/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/core_ext/string/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext/string http://redmine.rubyforge.org/svn
--- a/lib/redmine/default_data/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/default_data/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/default_data http://redmine.rubyforge.org/svn
--- a/lib/redmine/export/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/export/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/export http://redmine.rubyforge.org/svn
--- a/lib/redmine/helpers/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/helpers/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4074/trunk/lib/redmine/helpers +/svn/!svn/ver/4392/trunk/lib/redmine/helpers END gantt.rb K 25 svn:wc:ra_dav:version-url V 53 -/svn/!svn/ver/4074/trunk/lib/redmine/helpers/gantt.rb +/svn/!svn/ver/4392/trunk/lib/redmine/helpers/gantt.rb END calendar.rb K 25
--- a/lib/redmine/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/helpers http://redmine.rubyforge.org/svn -2010-09-10T03:09:18.467829Z -4074 -edavis10 +2010-11-11T13:44:23.942520Z +4392 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.795823Z -b227b416933df707aaa9a62cb52a3f9e -2010-09-10T03:09:18.467829Z -4074 -edavis10 +2010-11-19T13:04:51.408930Z +3c093f4a7147fe4ebdbaed2749d602f1 +2010-11-11T13:44:23.942520Z +4392 +jplang has-props @@ -58,7 +58,7 @@ -40757 +40744 calendar.rb file
--- a/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -283,8 +283,8 @@ end def line_for_project(project, options) - # Skip versions that don't have a start_date - if project.is_a?(Project) && project.start_date + # Skip versions that don't have a start_date or due date + if project.is_a?(Project) && project.start_date && project.due_date options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] @@ -419,7 +419,7 @@ def line_for_version(version, options) # Skip versions that don't have a start_date - if version.is_a?(Version) && version.start_date + if version.is_a?(Version) && version.start_date && version.due_date options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] @@ -536,8 +536,6 @@ end output << "<span class='#{css_classes.join(' ')}'>" output << view.link_to_issue(issue) - output << ":" - output << h(issue.subject) output << '</span>' else ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue"
--- a/lib/redmine/helpers/gantt.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/helpers/gantt.rb Fri Nov 19 13:24:41 2010 +0000 @@ -283,8 +283,8 @@ end def line_for_project(project, options) - # Skip versions that don't have a start_date - if project.is_a?(Project) && project.start_date + # Skip versions that don't have a start_date or due date + if project.is_a?(Project) && project.start_date && project.due_date options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] @@ -419,7 +419,7 @@ def line_for_version(version, options) # Skip versions that don't have a start_date - if version.is_a?(Version) && version.start_date + if version.is_a?(Version) && version.start_date && version.due_date options[:zoom] ||= 1 options[:g_width] ||= (self.date_to - self.date_from + 1) * options[:zoom] @@ -536,8 +536,6 @@ end output << "<span class='#{css_classes.join(' ')}'>" output << view.link_to_issue(issue) - output << ":" - output << h(issue.subject) output << '</span>' else ActiveRecord::Base.logger.debug "Gantt#subject_for_issue was not given an issue"
--- a/lib/redmine/hook.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/hook.rb Fri Nov 19 13:24:41 2010 +0000 @@ -57,7 +57,7 @@ # Calls a hook. # Returns the listeners response. def call_hook(hook, context={}) - returning [] do |response| + [].tap do |response| hls = hook_listeners(hook) if hls.any? hls.each {|listener| response << listener.send(hook, context)}
--- a/lib/redmine/i18n.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/i18n.rb Fri Nov 19 13:24:41 2010 +0000 @@ -37,7 +37,7 @@ def format_date(date) return nil unless date - Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format) + Setting.date_format.blank? ? ::I18n.l(date.to_date, :count => date.strftime('%d')) : date.strftime(Setting.date_format) end def format_time(time, include_date = true) @@ -45,7 +45,7 @@ time = time.to_time if time.is_a?(String) zone = User.current.time_zone local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time) - Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : + Setting.time_format.blank? ? ::I18n.l(local, :count => local.strftime('%d'), :format => (include_date ? :default : :time)) : ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}") end
--- a/lib/redmine/menu_manager.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/menu_manager.rb Fri Nov 19 13:24:41 2010 +0000 @@ -192,13 +192,13 @@ def render_menu_node_with_children(node, project=nil) caption, url, selected = extract_node_details(node, project) - html = returning [] do |html| + html = [].tap do |html| html << '<li>' # Parent html << render_single_menu_node(node, caption, url, selected) # Standard children - standard_children_list = returning "" do |child_html| + standard_children_list = "".tap do |child_html| node.children.each do |child| child_html << render_menu_node(child, project) end @@ -219,7 +219,7 @@ def render_unattached_children_menu(node, project) return nil unless node.child_menus - returning "" do |child_html| + "".tap do |child_html| unattached_children = node.child_menus.call(project) # Tree nodes support #each so we need to do object detection if unattached_children.is_a? Array
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/redmine/notifiable.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,25 @@ +module Redmine + class Notifiable < Struct.new(:name, :parent) + + def to_s + name + end + + # TODO: Plugin API for adding a new notification? + def self.all + notifications = [] + notifications << Notifiable.new('issue_added') + notifications << Notifiable.new('issue_updated') + notifications << Notifiable.new('issue_note_added', 'issue_updated') + notifications << Notifiable.new('issue_status_updated', 'issue_updated') + notifications << Notifiable.new('issue_priority_updated', 'issue_updated') + notifications << Notifiable.new('news_added') + notifications << Notifiable.new('document_added') + notifications << Notifiable.new('file_added') + notifications << Notifiable.new('message_posted') + notifications << Notifiable.new('wiki_content_added') + notifications << Notifiable.new('wiki_content_updated') + notifications + end + end +end
--- a/lib/redmine/plugin.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/plugin.rb Fri Nov 19 13:24:41 2010 +0000 @@ -89,6 +89,13 @@ def self.clear @registered_plugins = {} end + + # Checks if a plugin is installed + # + # @param [String] id name of the plugin + def self.installed?(id) + registered_plugins[id.to_sym].present? + end def initialize(id) @id = id.to_sym
--- a/lib/redmine/scm/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/3925/trunk/lib/redmine/scm +/svn/!svn/ver/4386/trunk/lib/redmine/scm END base.rb K 25
--- a/lib/redmine/scm/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm http://redmine.rubyforge.org/svn -2010-08-08T07:07:30.284069Z -3925 +2010-11-07T15:19:05.831621Z +4386 jbbarth
--- a/lib/redmine/scm/adapters/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/adapters/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/3925/trunk/lib/redmine/scm/adapters +/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters END subversion_adapter.rb K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/3925/trunk/lib/redmine/scm/adapters/git_adapter.rb +/svn/!svn/ver/4386/trunk/lib/redmine/scm/adapters/git_adapter.rb END mercurial_adapter.rb K 25
--- a/lib/redmine/scm/adapters/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/adapters/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters http://redmine.rubyforge.org/svn -2010-08-08T07:07:30.284069Z -3925 +2010-11-07T15:19:05.831621Z +4386 jbbarth @@ -137,10 +137,10 @@ -2010-09-23T14:37:45.039790Z -562f6950cbe67adb35946547436fe2df -2010-08-08T07:07:30.284069Z -3925 +2010-11-19T13:04:51.245032Z +6b1c25eff34500f43f3b7cf9c0a78bec +2010-11-07T15:19:05.831621Z +4386 jbbarth has-props @@ -163,7 +163,7 @@ -9747 +9867 mercurial_adapter.rb file
--- a/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -35,7 +35,7 @@ def branches return @branches if @branches @branches = [] - cmd = "#{GIT_BIN} --git-dir #{target('')} branch" + cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color" shellout(cmd) do |io| io.each_line do |line| @branches << line.match('\s*\*?\s*(.*)$')[1] @@ -65,7 +65,7 @@ shellout(cmd) do |io| io.each_line do |line| e = line.chomp.to_s - if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\s+(.+)$/ + if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/ type = $1 sha = $2 size = $3 @@ -86,15 +86,15 @@ def lastrev(path,rev) return nil if path.nil? - cmd = "#{GIT_BIN} --git-dir #{target('')} log --pretty=fuller --no-merges -n 1 " + cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 " cmd << " #{shell_quote rev} " if rev - cmd << "-- #{path} " unless path.empty? + cmd << "-- #{shell_quote path} " unless path.empty? shellout(cmd) do |io| begin id = io.gets.split[1] author = io.gets.match('Author:\s+(.*)$')[1] 2.times { io.gets } - time = io.gets.match('CommitDate:\s+(.*)$')[1] + time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime Revision.new({ :identifier => id, @@ -114,14 +114,14 @@ def revisions(path, identifier_from, identifier_to, options={}) revisions = Revisions.new - cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller " + cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller " cmd << " --reverse " if options[:reverse] cmd << " --all " if options[:all] cmd << " -n #{options[:limit]} " if options[:limit] cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from 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 << " -- #{shell_quote path}" if path && !path.empty? shellout(cmd) do |io| files=[] @@ -165,13 +165,13 @@ parsing_descr = 1 changeset[:description] = "" elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\s+(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ parsing_descr = 2 fileaction = $1 filepath = $2 files << {:action => fileaction, :path => filepath} elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\s+(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ parsing_descr = 2 fileaction = $1 filepath = $3 @@ -209,9 +209,9 @@ path ||= '' if identifier_to - cmd = "#{GIT_BIN} --git-dir #{target('')} diff #{shell_quote identifier_to} #{shell_quote identifier_from}" + cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" else - cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote identifier_from}" + cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}" end cmd << " -- #{shell_quote path}" unless path.empty? @@ -255,7 +255,7 @@ if identifier.nil? identifier = 'HEAD' end - cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote(identifier + ':' + path)}" + cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}" cat = nil shellout(cmd) do |io| io.binmode
--- a/lib/redmine/scm/adapters/git_adapter.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/adapters/git_adapter.rb Fri Nov 19 13:24:41 2010 +0000 @@ -35,7 +35,7 @@ def branches return @branches if @branches @branches = [] - cmd = "#{GIT_BIN} --git-dir #{target('')} branch" + cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color" shellout(cmd) do |io| io.each_line do |line| @branches << line.match('\s*\*?\s*(.*)$')[1] @@ -65,7 +65,7 @@ shellout(cmd) do |io| io.each_line do |line| e = line.chomp.to_s - if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\s+(.+)$/ + if e =~ /^\d+\s+(\w+)\s+([0-9a-f]{40})\s+([0-9-]+)\t(.+)$/ type = $1 sha = $2 size = $3 @@ -86,15 +86,15 @@ def lastrev(path,rev) return nil if path.nil? - cmd = "#{GIT_BIN} --git-dir #{target('')} log --pretty=fuller --no-merges -n 1 " + cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 " cmd << " #{shell_quote rev} " if rev - cmd << "-- #{path} " unless path.empty? + cmd << "-- #{shell_quote path} " unless path.empty? shellout(cmd) do |io| begin id = io.gets.split[1] author = io.gets.match('Author:\s+(.*)$')[1] 2.times { io.gets } - time = io.gets.match('CommitDate:\s+(.*)$')[1] + time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime Revision.new({ :identifier => id, @@ -114,14 +114,14 @@ def revisions(path, identifier_from, identifier_to, options={}) revisions = Revisions.new - cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller " + cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller " cmd << " --reverse " if options[:reverse] cmd << " --all " if options[:all] cmd << " -n #{options[:limit]} " if options[:limit] cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from 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 << " -- #{shell_quote path}" if path && !path.empty? shellout(cmd) do |io| files=[] @@ -165,13 +165,13 @@ parsing_descr = 1 changeset[:description] = "" elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\s+(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\t(.+)$/ parsing_descr = 2 fileaction = $1 filepath = $2 files << {:action => fileaction, :path => filepath} elsif (parsing_descr == 1 || parsing_descr == 2) \ - && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\s+(.+)$/ + && line =~ /^:\d+\s+\d+\s+[0-9a-f.]+\s+[0-9a-f.]+\s+(\w)\d+\s+(\S+)\t(.+)$/ parsing_descr = 2 fileaction = $1 filepath = $3 @@ -209,9 +209,9 @@ path ||= '' if identifier_to - cmd = "#{GIT_BIN} --git-dir #{target('')} diff #{shell_quote identifier_to} #{shell_quote identifier_from}" + cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" else - cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote identifier_from}" + cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}" end cmd << " -- #{shell_quote path}" unless path.empty? @@ -255,7 +255,7 @@ if identifier.nil? identifier = 'HEAD' end - cmd = "#{GIT_BIN} --git-dir #{target('')} show #{shell_quote(identifier + ':' + path)}" + cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}" cat = nil shellout(cmd) do |io| io.binmode
--- a/lib/redmine/scm/adapters/mercurial/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/scm/adapters/mercurial/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters/mercurial http://redmine.rubyforge.org/svn
--- a/lib/redmine/version.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/version.rb Fri Nov 19 13:24:41 2010 +0000 @@ -4,7 +4,7 @@ module VERSION #:nodoc: MAJOR = 1 MINOR = 0 - TINY = 1 + TINY = 3 # Branch values: # * official release: nil
--- a/lib/redmine/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views http://redmine.rubyforge.org/svn
--- a/lib/redmine/views/my_page/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/views/my_page/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/my_page http://redmine.rubyforge.org/svn
--- a/lib/redmine/wiki_formatting/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting +/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting END macros.rb K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/3006/trunk/lib/redmine/wiki_formatting/macros.rb +/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/macros.rb END
--- a/lib/redmine/wiki_formatting/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting http://redmine.rubyforge.org/svn -2010-06-24T02:35:24.648446Z -3811 -edavis10 +2010-11-06T17:47:27.890964Z +4376 +jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.051779Z -a16e05369f2e3dbb2bd33d9c2895ffdf -2009-11-04T12:36:45.918398Z -3006 +2010-11-19T13:04:51.401011Z +879f8ce24a6bb5e4f5ea3b6f798b7a63 +2010-11-06T17:47:27.890964Z +4376 jplang has-props @@ -58,7 +58,7 @@ -4928 +4948 textile dir
--- a/lib/redmine/wiki_formatting/.svn/text-base/macros.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/.svn/text-base/macros.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -112,7 +112,7 @@ @included_wiki_pages ||= [] raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title) @included_wiki_pages << page.title - out = textilizable(page.content, :text, :attachments => page.attachments) + out = textilizable(page.content, :text, :attachments => page.attachments, :headings => false) @included_wiki_pages.pop out end
--- a/lib/redmine/wiki_formatting/macros.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/macros.rb Fri Nov 19 13:24:41 2010 +0000 @@ -112,7 +112,7 @@ @included_wiki_pages ||= [] raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title) @included_wiki_pages << page.title - out = textilizable(page.content, :text, :attachments => page.attachments) + out = textilizable(page.content, :text, :attachments => page.attachments, :headings => false) @included_wiki_pages.pop out end
--- a/lib/redmine/wiki_formatting/textile/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting/textile +/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile END helper.rb K 25 @@ -13,5 +13,5 @@ K 25 svn:wc:ra_dav:version-url V 73 -/svn/!svn/ver/3811/trunk/lib/redmine/wiki_formatting/textile/formatter.rb +/svn/!svn/ver/4376/trunk/lib/redmine/wiki_formatting/textile/formatter.rb END
--- a/lib/redmine/wiki_formatting/textile/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting/textile http://redmine.rubyforge.org/svn -2010-06-24T02:35:24.648446Z -3811 -edavis10 +2010-11-06T17:47:27.890964Z +4376 +jplang @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.051779Z -28027996d41c6fc1e52168e77c09de3f -2010-06-24T02:35:24.648446Z -3811 -edavis10 +2010-11-19T13:04:51.401011Z +b8052f700ecb0991fabdd3a5b684a412 +2010-11-06T17:47:27.890964Z +4376 +jplang has-props @@ -92,5 +92,5 @@ -6512 +4724
--- a/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/textile/.svn/text-base/formatter.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 Jean-Philippe Lang +# 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 @@ -24,7 +24,7 @@ include ActionView::Helpers::TagHelper # auto_link rule after textile rules so that it doesn't break !image_url! tags - RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc] + RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto] def initialize(*args) super @@ -61,51 +61,6 @@ end end - # Patch to add 'table of content' support to RedCloth - def textile_p_withtoc(tag, atts, cite, content) - # removes wiki links from the item - toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 } - # sanitizes titles from links - # see redcloth3.rb, same as "#{pre}#{text}#{post}" - toc_item.gsub!(LINK_RE) { [$2, $4, $9].join } - # sanitizes image links from titles - toc_item.gsub!(IMAGE_RE) { [$5].join } - # removes styles - # eg. %{color:red}Triggers% => Triggers - toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1' - - # replaces non word caracters by dashes - anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') - - unless anchor.blank? - if tag =~ /^h(\d)$/ - @toc << [$1.to_i, anchor, toc_item] - end - atts << " id=\"#{anchor}\"" - content = content + "<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a>" - end - textile_p(tag, atts, cite, content) - end - - alias :textile_h1 :textile_p_withtoc - alias :textile_h2 :textile_p_withtoc - alias :textile_h3 :textile_p_withtoc - - def inline_toc(text) - text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do - div_class = 'toc' - div_class << ' right' if $1 == '>' - div_class << ' left' if $1 == '<' - out = "<ul class=\"#{div_class}\">" - @toc.each do |heading| - level, anchor, toc_item = heading - out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{toc_item}</a></li>\n" - end - out << '</ul>' - out - end - end - AUTO_LINK_RE = %r{ ( # leading text <\w+.*?>| # leading HTML tag, or @@ -121,7 +76,7 @@ (\S+?) # url (\/)? # slash ) - ([^\w\=\/;\(\)]*?) # post + ((?:>)?|[^\w\=\/;\(\)]*?) # post (?=<|\s|$) }x unless const_defined?(:AUTO_LINK_RE)
--- a/lib/redmine/wiki_formatting/textile/formatter.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/redmine/wiki_formatting/textile/formatter.rb Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2008 Jean-Philippe Lang +# 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 @@ -24,7 +24,7 @@ include ActionView::Helpers::TagHelper # auto_link rule after textile rules so that it doesn't break !image_url! tags - RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc] + RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto] def initialize(*args) super @@ -61,51 +61,6 @@ end end - # Patch to add 'table of content' support to RedCloth - def textile_p_withtoc(tag, atts, cite, content) - # removes wiki links from the item - toc_item = content.gsub(/(\[\[([^\]\|]*)(\|([^\]]*))?\]\])/) { $4 || $2 } - # sanitizes titles from links - # see redcloth3.rb, same as "#{pre}#{text}#{post}" - toc_item.gsub!(LINK_RE) { [$2, $4, $9].join } - # sanitizes image links from titles - toc_item.gsub!(IMAGE_RE) { [$5].join } - # removes styles - # eg. %{color:red}Triggers% => Triggers - toc_item.gsub! %r[%\{[^\}]*\}([^%]+)%], '\\1' - - # replaces non word caracters by dashes - anchor = toc_item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') - - unless anchor.blank? - if tag =~ /^h(\d)$/ - @toc << [$1.to_i, anchor, toc_item] - end - atts << " id=\"#{anchor}\"" - content = content + "<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a>" - end - textile_p(tag, atts, cite, content) - end - - alias :textile_h1 :textile_p_withtoc - alias :textile_h2 :textile_p_withtoc - alias :textile_h3 :textile_p_withtoc - - def inline_toc(text) - text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do - div_class = 'toc' - div_class << ' right' if $1 == '>' - div_class << ' left' if $1 == '<' - out = "<ul class=\"#{div_class}\">" - @toc.each do |heading| - level, anchor, toc_item = heading - out << "<li class=\"heading#{level}\"><a href=\"##{anchor}\">#{toc_item}</a></li>\n" - end - out << '</ul>' - out - end - end - AUTO_LINK_RE = %r{ ( # leading text <\w+.*?>| # leading HTML tag, or @@ -121,7 +76,7 @@ (\S+?) # url (\/)? # slash ) - ([^\w\=\/;\(\)]*?) # post + ((?:>)?|[^\w\=\/;\(\)]*?) # post (?=<|\s|$) }x unless const_defined?(:AUTO_LINK_RE)
--- a/lib/tasks/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 34 -/svn/!svn/ver/4167/trunk/lib/tasks +/svn/!svn/ver/4405/trunk/lib/tasks END deprecated.rake K 25 @@ -27,18 +27,18 @@ V 48 /svn/!svn/ver/4167/trunk/lib/tasks/reminder.rake END +initializers.rake +K 25 +svn:wc:ra_dav:version-url +V 52 +/svn/!svn/ver/4405/trunk/lib/tasks/initializers.rake +END metrics.rake K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/2825/trunk/lib/tasks/metrics.rake END -initializers.rake -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3785/trunk/lib/tasks/initializers.rake -END permissions.rake K 25 svn:wc:ra_dav:version-url @@ -63,23 +63,23 @@ V 48 /svn/!svn/ver/3167/trunk/lib/tasks/watchers.rake END +yardoc.rake +K 25 +svn:wc:ra_dav:version-url +V 46 +/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake +END plugins.rake K 25 svn:wc:ra_dav:version-url V 47 /svn/!svn/ver/1786/trunk/lib/tasks/plugins.rake END -yardoc.rake -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/3922/trunk/lib/tasks/yardoc.rake -END locales.rake K 25 svn:wc:ra_dav:version-url V 47 -/svn/!svn/ver/2502/trunk/lib/tasks/locales.rake +/svn/!svn/ver/4254/trunk/lib/tasks/locales.rake END migrate_from_trac.rake K 25 @@ -91,13 +91,13 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3328/trunk/lib/tasks/migrate_from_mantis.rake +/svn/!svn/ver/4403/trunk/lib/tasks/migrate_from_mantis.rake END email.rake K 25 svn:wc:ra_dav:version-url V 45 -/svn/!svn/ver/3330/trunk/lib/tasks/email.rake +/svn/!svn/ver/4256/trunk/lib/tasks/email.rake END migrate_plugins.rake K 25
--- a/lib/tasks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/lib/tasks http://redmine.rubyforge.org/svn -2010-09-20T23:17:51.402972Z -4167 -edavis10 +2010-11-14T15:14:19.280754Z +4405 +jplang @@ -162,6 +162,40 @@ 1606 +initializers.rake +file + + + + +2010-11-19T13:04:51.424933Z +c25b466de7654465538a91e5f5ab32b9 +2010-11-14T15:14:19.280754Z +4405 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1343 + metrics.rake file @@ -196,40 +230,6 @@ 113 -initializers.rake -file - - - - -2010-09-23T14:37:45.063748Z -561f310a7d3a42b31ab7271aec396633 -2010-06-19T20:04:47.615499Z -3785 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1351 - permissions.rake file @@ -366,6 +366,40 @@ 180 +yardoc.rake +file + + + + +2010-09-23T14:37:45.067787Z +5c9889bed6f4a4d18dbeb3d904855bb6 +2010-08-07T15:11:26.667915Z +3922 +edavis10 + + + + + + + + + + + + + + + + + + + + + +578 + plugins.rake file @@ -400,51 +434,17 @@ 1256 -yardoc.rake -file - - - - -2010-09-23T14:37:45.067787Z -5c9889bed6f4a4d18dbeb3d904855bb6 -2010-08-07T15:11:26.667915Z -3922 -edavis10 - - - - - - - - - - - - - - - - - - - - - -578 - locales.rake file -2010-09-23T14:37:45.063748Z -4b8985b7b23bbc48dc414dbd1999ca1b -2009-02-21T15:21:31.040851Z -2502 -jplang +2010-11-19T13:04:51.424933Z +8cb19171aae8528b3149b7efa211fc50 +2010-10-15T22:41:47.658318Z +4254 +edavis10 has-props @@ -466,7 +466,7 @@ -961 +3360 migrate_from_trac.rake file @@ -508,10 +508,10 @@ -2010-09-23T14:37:45.063748Z -da88af55c1e96cf9caca3be6a29b3259 -2010-01-17T12:00:45.233005Z -3328 +2010-11-19T13:04:51.424933Z +d58affc991ec64b615bcbf3f9a1bb176 +2010-11-14T13:16:39.968867Z +4403 jplang @@ -534,7 +534,7 @@ -19302 +19253 email.rake file @@ -542,11 +542,11 @@ -2010-09-23T14:37:45.063748Z -09d22d744d29edd8922bc899e4ec8be2 -2010-01-17T13:53:13.544777Z -3330 -jplang +2010-11-19T13:04:51.424933Z +7875b7a15307c626a93c284f33757320 +2010-10-15T22:50:33.240825Z +4256 +edavis10 @@ -568,7 +568,7 @@ -7537 +8244 migrate_plugins.rake file
--- a/lib/tasks/.svn/text-base/email.rake.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/text-base/email.rake.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -165,5 +165,22 @@ Redmine::POP3.check(pop_options, options) end + + desc "Send a test email to the user with the provided login name" + task :test, :login, :needs => :environment do |task, args| + include Redmine::I18n + abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank? + + user = User.find_by_login(args[:login]) + abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged? + + ActionMailer::Base.raise_delivery_errors = true + begin + Mailer.deliver_test(User.current) + puts l(:notice_email_sent, user.mail) + rescue Exception => e + abort l(:notice_email_error, e.message) + end + end end end
--- a/lib/tasks/.svn/text-base/initializers.rake.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/text-base/initializers.rake.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,7 +16,7 @@ # secret is at least 30 characters and all random, no regular words or # you'll be exposed to dictionary attacks. ActionController::Base.session = { - :session_key => '_redmine_session', + :key => '_redmine_session', # # Uncomment and edit the :session_path below if are hosting your Redmine # at a suburi and don't want the top level path to access the cookies
--- a/lib/tasks/.svn/text-base/locales.rake.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/text-base/locales.rake.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -28,4 +28,62 @@ lang.close end end + + desc <<-END_DESC +Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows). + +Options: + key=key_1,key_2 Comma-separated list of keys to delete + skip=en,de Comma-separated list of locale files to ignore (filename without extension) +END_DESC + + task :remove_key do + dir = ENV['DIR'] || './config/locales' + files = Dir.glob(File.join(dir,'*.yml')) + skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil + deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil + # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :) + delete_regex = /\A #{deletes}: +[^\|>\s#].*\z/ + + files.each do |path| + # Skip certain locales + (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips + puts "Deleting selected keys from #{path}" + orig_content = File.open(path, 'r') {|file| file.read} + File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}} + end + end + + desc <<-END_DESC +Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates). + +Options: + key="some_key=foo" + key1="another_key=bar" + key_fb="foo=bar" Keys to add in the form key=value, every option of the form key[,\\d,_*] will be recognised + skip=en,de Comma-separated list of locale files to ignore (filename without extension) +END_DESC + + task :add_key do + dir = ENV['DIR'] || './config/locales' + files = Dir.glob(File.join(dir,'*.yml')) + skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil + keys_regex = /\Akey(\d+|_.+)?\z/ + adds = ENV.reject {|k,v| !(k =~ keys_regex)}.values.collect {|v| Array.new v.split("=",2)} + key_list = adds.collect {|v| v[0]}.join(", ") + + files.each do |path| + # Skip certain locales + (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips + # TODO: Check for dupliate/existing keys + puts "Adding #{key_list} to #{path}" + File.open(path, 'a') do |file| + adds.each do |kv| + Hash[*kv].to_yaml.each_line do |line| + file.puts " #{line}" unless (line =~ /^---/ || line.empty?) + end + end + end + end + end end
--- a/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -120,12 +120,8 @@ has_many :news, :class_name => "MantisNews", :foreign_key => :project_id has_many :members, :class_name => "MantisProjectUser", :foreign_key => :project_id - def name - read_attribute(:name)[0..29] - end - def identifier - read_attribute(:name).underscore[0..19].gsub(/[^a-z0-9\-]/, '-') + read_attribute(:name).gsub(/[^a-z0-9\-]+/, '-').slice(0, Project::IDENTIFIER_MAX_LENGTH) end end
--- a/lib/tasks/email.rake Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/email.rake Fri Nov 19 13:24:41 2010 +0000 @@ -165,5 +165,22 @@ Redmine::POP3.check(pop_options, options) end + + desc "Send a test email to the user with the provided login name" + task :test, :login, :needs => :environment do |task, args| + include Redmine::I18n + abort l(:notice_email_error, "Please include the user login to test with. Example: login=examle-login") if args[:login].blank? + + user = User.find_by_login(args[:login]) + abort l(:notice_email_error, "User #{args[:login]} not found") unless user.logged? + + ActionMailer::Base.raise_delivery_errors = true + begin + Mailer.deliver_test(User.current) + puts l(:notice_email_sent, user.mail) + rescue Exception => e + abort l(:notice_email_error, e.message) + end + end end end
--- a/lib/tasks/initializers.rake Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/initializers.rake Fri Nov 19 13:24:41 2010 +0000 @@ -16,7 +16,7 @@ # secret is at least 30 characters and all random, no regular words or # you'll be exposed to dictionary attacks. ActionController::Base.session = { - :session_key => '_redmine_session', + :key => '_redmine_session', # # Uncomment and edit the :session_path below if are hosting your Redmine # at a suburi and don't want the top level path to access the cookies
--- a/lib/tasks/locales.rake Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/locales.rake Fri Nov 19 13:24:41 2010 +0000 @@ -28,4 +28,62 @@ lang.close end end + + desc <<-END_DESC +Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows). + +Options: + key=key_1,key_2 Comma-separated list of keys to delete + skip=en,de Comma-separated list of locale files to ignore (filename without extension) +END_DESC + + task :remove_key do + dir = ENV['DIR'] || './config/locales' + files = Dir.glob(File.join(dir,'*.yml')) + skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil + deletes = ENV['key'] ? Regexp.union(ENV['key'].split(',')) : nil + # Ignore multiline keys (begin with | or >) and keys with children (nothing meaningful after :) + delete_regex = /\A #{deletes}: +[^\|>\s#].*\z/ + + files.each do |path| + # Skip certain locales + (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips + puts "Deleting selected keys from #{path}" + orig_content = File.open(path, 'r') {|file| file.read} + File.open(path, 'w') {|file| orig_content.each_line {|line| file.puts line unless line.chomp =~ delete_regex}} + end + end + + desc <<-END_DESC +Adds a new top-level translation string to all locale file (only works for childless keys, probably doesn\'t work on windows, doesn't check for duplicates). + +Options: + key="some_key=foo" + key1="another_key=bar" + key_fb="foo=bar" Keys to add in the form key=value, every option of the form key[,\\d,_*] will be recognised + skip=en,de Comma-separated list of locale files to ignore (filename without extension) +END_DESC + + task :add_key do + dir = ENV['DIR'] || './config/locales' + files = Dir.glob(File.join(dir,'*.yml')) + skips = ENV['skip'] ? Regexp.union(ENV['skip'].split(',')) : nil + keys_regex = /\Akey(\d+|_.+)?\z/ + adds = ENV.reject {|k,v| !(k =~ keys_regex)}.values.collect {|v| Array.new v.split("=",2)} + key_list = adds.collect {|v| v[0]}.join(", ") + + files.each do |path| + # Skip certain locales + (puts "Skipping #{path}"; next) if File.basename(path, ".yml") =~ skips + # TODO: Check for dupliate/existing keys + puts "Adding #{key_list} to #{path}" + File.open(path, 'a') do |file| + adds.each do |kv| + Hash[*kv].to_yaml.each_line do |line| + file.puts " #{line}" unless (line =~ /^---/ || line.empty?) + end + end + end + end + end end
--- a/lib/tasks/migrate_from_mantis.rake Fri Sep 24 14:06:04 2010 +0100 +++ b/lib/tasks/migrate_from_mantis.rake Fri Nov 19 13:24:41 2010 +0000 @@ -120,12 +120,8 @@ has_many :news, :class_name => "MantisNews", :foreign_key => :project_id has_many :members, :class_name => "MantisProjectUser", :foreign_key => :project_id - def name - read_attribute(:name)[0..29] - end - def identifier - read_attribute(:name).underscore[0..19].gsub(/[^a-z0-9\-]/, '-') + read_attribute(:name).gsub(/[^a-z0-9\-]+/, '-').slice(0, Project::IDENTIFIER_MAX_LENGTH) end end
--- a/log/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/log/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/log http://redmine.rubyforge.org/svn
--- a/public/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/public/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 31 -/svn/!svn/ver/4072/trunk/public +/svn/!svn/ver/4377/trunk/public END dispatch.fcgi.example K 25
--- a/public/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-06T18:52:07.556711Z +4377 +jplang has-props
--- a/public/help/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/public/help/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 36 -/svn/!svn/ver/3595/trunk/public/help +/svn/!svn/ver/4308/trunk/public/help END wiki_syntax_detailed.html K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/3595/trunk/public/help/wiki_syntax_detailed.html +/svn/!svn/ver/4308/trunk/public/help/wiki_syntax_detailed.html END wiki_syntax.html K 25
--- a/public/help/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/help/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/help http://redmine.rubyforge.org/svn -2010-03-16T21:48:21.610865Z -3595 -jplang +2010-10-29T22:48:59.506153Z +4308 +jbbarth @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.075747Z -73d1d55e3e3341a687d13e571825b6b9 -2010-03-16T21:48:21.610865Z -3595 -jplang +2010-11-19T13:04:51.444942Z +380699b753ffb01cba5c9504216ff64b +2010-10-29T22:48:59.506153Z +4308 +jbbarth @@ -58,7 +58,7 @@ -10590 +11397 wiki_syntax.html file
--- a/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -66,7 +66,7 @@ <p>Wiki links are displayed in red if the page doesn't exist yet, eg: <a href="#" class="wiki-page new">Nonexistent page</a>.</p> - <p>Links to others resources (0.7):</p> + <p>Links to other resources:</p> <ul> <li>Documents: @@ -74,6 +74,7 @@ <li><strong>document#17</strong> (link to document with id 17)</li> <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li> <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li> + <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project") </ul></li> </ul> @@ -95,19 +96,36 @@ </ul> <ul> - <li>Repository files + <li>Repository files: <ul> - <li><strong>source:some/file</strong> -- Link to the file located at /some/file in the project's repository</li> - <li><strong>source:some/file@52</strong> -- Link to the file's revision 52</li> - <li><strong>source:some/file#L120</strong> -- Link to line 120 of the file</li> - <li><strong>source:some/file@52#L120</strong> -- Link to line 120 of the file's revision 52</li> - <li><strong>export:some/file</strong> -- Force the download of the file</li> - </ul></li> + <li><strong>source:some/file</strong> (link to the file located at /some/file in the project's repository)</li> + <li><strong>source:some/file@52</strong> (link to the file's revision 52)</li> + <li><strong>source:some/file#L120</strong> (link to line 120 of the file)</li> + <li><strong>source:some/file@52#L120</strong> (link to line 120 of the file's revision 52)</li> + <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li> + <li><strong>export:some/file</strong> (force the download of the file)</li> + </ul></li> </ul> - - <p>Escaping (0.7):</p> <ul> + <li>Forum messages: + <ul> + <li><strong>message#1218</strong> (link to message with id 1218)</li> + </ul></li> + </ul> + + <ul> + <li>Projects: + <ul> + <li><strong>project#3</strong> (link to project with id 3)</li> + <li><strong>project:someproject</strong> (link to project named "someproject")</li> + </ul></li> + </ul> + + + <p>Escaping:</p> + + <ul> <li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li> </ul> @@ -219,7 +237,7 @@ <h2><a name="13" class="wiki-page"></a>Code highlighting</h2> - <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, html, javascript, rhtml, ruby, scheme, xml languages.</p> + <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, cpp, css, delphi, groovy, html, java, javascript, json, php, python, rhtml, ruby, scheme, sql, xml and yaml languages.</p> <p>You can highlight code in your wiki page using this syntax:</p>
--- a/public/help/wiki_syntax_detailed.html Fri Sep 24 14:06:04 2010 +0100 +++ b/public/help/wiki_syntax_detailed.html Fri Nov 19 13:24:41 2010 +0000 @@ -66,7 +66,7 @@ <p>Wiki links are displayed in red if the page doesn't exist yet, eg: <a href="#" class="wiki-page new">Nonexistent page</a>.</p> - <p>Links to others resources (0.7):</p> + <p>Links to other resources:</p> <ul> <li>Documents: @@ -74,6 +74,7 @@ <li><strong>document#17</strong> (link to document with id 17)</li> <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li> <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li> + <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project") </ul></li> </ul> @@ -95,19 +96,36 @@ </ul> <ul> - <li>Repository files + <li>Repository files: <ul> - <li><strong>source:some/file</strong> -- Link to the file located at /some/file in the project's repository</li> - <li><strong>source:some/file@52</strong> -- Link to the file's revision 52</li> - <li><strong>source:some/file#L120</strong> -- Link to line 120 of the file</li> - <li><strong>source:some/file@52#L120</strong> -- Link to line 120 of the file's revision 52</li> - <li><strong>export:some/file</strong> -- Force the download of the file</li> - </ul></li> + <li><strong>source:some/file</strong> (link to the file located at /some/file in the project's repository)</li> + <li><strong>source:some/file@52</strong> (link to the file's revision 52)</li> + <li><strong>source:some/file#L120</strong> (link to line 120 of the file)</li> + <li><strong>source:some/file@52#L120</strong> (link to line 120 of the file's revision 52)</li> + <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li> + <li><strong>export:some/file</strong> (force the download of the file)</li> + </ul></li> </ul> - - <p>Escaping (0.7):</p> <ul> + <li>Forum messages: + <ul> + <li><strong>message#1218</strong> (link to message with id 1218)</li> + </ul></li> + </ul> + + <ul> + <li>Projects: + <ul> + <li><strong>project#3</strong> (link to project with id 3)</li> + <li><strong>project:someproject</strong> (link to project named "someproject")</li> + </ul></li> + </ul> + + + <p>Escaping:</p> + + <ul> <li>You can prevent Redmine links from being parsed by preceding them with an exclamation mark: !</li> </ul> @@ -219,7 +237,7 @@ <h2><a name="13" class="wiki-page"></a>Code highlighting</h2> - <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, html, javascript, rhtml, ruby, scheme, xml languages.</p> + <p>Code highlightment relies on <a href="http://coderay.rubychan.de/" class="external">CodeRay</a>, a fast syntax highlighting library written completely in Ruby. It currently supports c, cpp, css, delphi, groovy, html, java, javascript, json, php, python, rhtml, ruby, scheme, sql, xml and yaml languages.</p> <p>You can highlight code in your wiki page using this syntax:</p>
--- a/public/images/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/images/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/images http://redmine.rubyforge.org/svn @@ -162,6 +162,74 @@ 218 +milestone_late.png +file + + + + +2010-09-24T12:48:29.823793Z +ecc1979ed435769c700725495428359f +2010-09-10T03:09:02.311267Z +4072 +edavis10 + + + + + + + + + + + + + + + + + + + + + +160 + +2downarrow.png +file + + + + +2010-09-23T14:37:45.123788Z +6730b4ea633194233bec98ee5f7a3977 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +282 + folder_open_add.png file @@ -196,74 +264,6 @@ 375 -2downarrow.png -file - - - - -2010-09-23T14:37:45.123788Z -6730b4ea633194233bec98ee5f7a3977 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -282 - -milestone_late.png -file - - - - -2010-09-24T12:48:29.823793Z -ecc1979ed435769c700725495428359f -2010-09-10T03:09:02.311267Z -4072 -edavis10 - - - - - - - - - - - - - - - - - - - - - -160 - warning.png file @@ -298,6 +298,74 @@ 613 +fav_off.png +file + + + + +2010-09-23T14:37:45.131805Z +ff96c02d8f18116bb3f005f2c8b86e91 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +211 + +move.png +file + + + + +2010-09-23T14:37:45.155802Z +0a2ceb01cbc3c01186fdcc25ced8eb0d +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +321 + reload.png file @@ -332,74 +400,6 @@ 549 -move.png -file - - - - -2010-09-23T14:37:45.155802Z -0a2ceb01cbc3c01186fdcc25ced8eb0d -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -321 - -fav_off.png -file - - - - -2010-09-23T14:37:45.131805Z -ff96c02d8f18116bb3f005f2c8b86e91 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -211 - project_marker.png file @@ -468,6 +468,40 @@ 641 +zoom_in.png +file + + + + +2010-09-23T14:37:45.163769Z +91b883d074b727f1a95cd0ce48510a3c +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +461 + copy.png file @@ -502,40 +536,6 @@ 925 -zoom_in.png -file - - - - -2010-09-23T14:37:45.163769Z -91b883d074b727f1a95cd0ce48510a3c -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -461 - news.png file @@ -1083,6 +1083,40 @@ 137 +bullet_delete.png +file + + + + +2010-09-23T14:37:45.123788Z +fba036d7348ff28f7ab7dacbc52bc32a +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +255 + text_list_bullets.png file @@ -1117,40 +1151,6 @@ 291 -bullet_delete.png -file - - - - -2010-09-23T14:37:45.123788Z -fba036d7348ff28f7ab7dacbc52bc32a -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -255 - bullet_arrow_left.png file @@ -1423,6 +1423,40 @@ 403 +textfield.png +file + + + + +2010-09-23T14:37:45.159811Z +985a1dadffeaa303ff1eef4ea53ec0f4 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +100 + attachment.png file @@ -1457,40 +1491,6 @@ 939 -textfield.png -file - - - - -2010-09-23T14:37:45.159811Z -985a1dadffeaa303ff1eef4ea53ec0f4 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -100 - false.png file @@ -1525,6 +1525,40 @@ 459 +unlock.png +file + + + + +2010-09-23T14:37:45.159811Z +fa1be48a747127ee34d4fae020b825d4 +2010-02-14T13:13:16.743297Z +3430 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +448 + bullet_toggle_plus.png file @@ -1559,40 +1593,6 @@ 217 -unlock.png -file - - - - -2010-09-23T14:37:45.159811Z -fa1be48a747127ee34d4fae020b825d4 -2010-02-14T13:13:16.743297Z -3430 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -448 - group.png file @@ -1627,6 +1627,108 @@ 700 +save.png +file + + + + +2010-09-23T14:37:45.155802Z +9e64db8f4905a17e3a6f68792cd5e199 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +440 + +bullet_blue.png +file + + + + +2010-09-23T14:37:45.123788Z +3363f60299360fb5539b769d089e145f +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +241 + +loading.gif +file + + + + +2010-09-23T14:37:45.151760Z +03ce3dcc84af110e9da8699a841e5200 +2006-12-03T19:55:45.161980Z +62 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1553 + plugin.png file @@ -1661,108 +1763,6 @@ 538 -loading.gif -file - - - - -2010-09-23T14:37:45.151760Z -03ce3dcc84af110e9da8699a841e5200 -2006-12-03T19:55:45.161980Z -62 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1553 - -bullet_blue.png -file - - - - -2010-09-23T14:37:45.123788Z -3363f60299360fb5539b769d089e145f -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -241 - -save.png -file - - - - -2010-09-23T14:37:45.155802Z -9e64db8f4905a17e3a6f68792cd5e199 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -440 - bullet_add.png file @@ -1831,6 +1831,40 @@ 1885 +milestone_done.png +file + + + + +2010-09-24T12:48:29.823793Z +40c58172e0c52eee4deb5227ec37f0cf +2010-09-10T03:09:02.311267Z +4072 +edavis10 + + + + + + + + + + + + + + + + + + + + + +137 + exclamation.png file @@ -1865,40 +1899,6 @@ 648 -milestone_done.png -file - - - - -2010-09-24T12:48:29.823793Z -40c58172e0c52eee4deb5227ec37f0cf -2010-09-10T03:09:02.311267Z -4072 -edavis10 - - - - - - - - - - - - - - - - - - - - - -137 - ticket_go.png file @@ -1933,6 +1933,74 @@ 608 +zoom_out.png +file + + + + +2010-09-23T14:37:45.163769Z +42b319d6ad0249fb20833a17d5f373a4 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +461 + +report.png +file + + + + +2010-09-23T14:37:45.155802Z +8d8ec49f5773997411ff708a82e40568 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1014 + folder.png file @@ -1967,74 +2035,6 @@ 970 -report.png -file - - - - -2010-09-23T14:37:45.155802Z -8d8ec49f5773997411ff708a82e40568 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1014 - -zoom_out.png -file - - - - -2010-09-23T14:37:45.163769Z -42b319d6ad0249fb20833a17d5f373a4 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -461 - fav.png file @@ -2069,6 +2069,40 @@ 378 +bullet_purple.png +file + + + + +2010-09-23T14:37:45.127811Z +c4c76ce450e3e838afd6aa8f34a8d9a8 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +244 + document.png file @@ -2103,40 +2137,6 @@ 333 -bullet_purple.png -file - - - - -2010-09-23T14:37:45.127811Z -c4c76ce450e3e838afd6aa8f34a8d9a8 -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -244 - true.png file
--- a/public/images/files/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/images/files/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/images/files http://redmine.rubyforge.org/svn
--- a/public/images/jstoolbar/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/images/jstoolbar/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/images/jstoolbar http://redmine.rubyforge.org/svn @@ -94,6 +94,74 @@ 252 +bt_code.png +file + + + + +2010-09-23T14:37:45.151760Z +ef6624df45946b54e3b23db2a0c6b77b +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +927 + +bt_h3.png +file + + + + +2010-09-23T14:37:45.151760Z +cb940b592da5ed0367305cb0514d5684 +2010-02-13T09:08:12.698526Z +3419 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +261 + bt_ol.png file @@ -128,14 +196,14 @@ 248 -bt_h3.png +bt_img.png file 2010-09-23T14:37:45.151760Z -cb940b592da5ed0367305cb0514d5684 +04a0e86c9eec7d85d445e7627b5fc8ea 2010-02-13T09:08:12.698526Z 3419 jplang @@ -160,41 +228,7 @@ -261 - -bt_code.png -file - - - - -2010-09-23T14:37:45.151760Z -ef6624df45946b54e3b23db2a0c6b77b -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -927 +1027 bt_strong.png file @@ -230,40 +264,6 @@ 244 -bt_img.png -file - - - - -2010-09-23T14:37:45.151760Z -04a0e86c9eec7d85d445e7627b5fc8ea -2010-02-13T09:08:12.698526Z -3419 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1027 - bt_bq_remove.png file
--- a/public/javascripts/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/4060/trunk/public/javascripts +/svn/!svn/ver/4222/trunk/public/javascripts END prototype.js K 25 @@ -43,7 +43,7 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/3879/trunk/public/javascripts/application.js +/svn/!svn/ver/4222/trunk/public/javascripts/application.js END controls.js K 25
--- a/public/javascripts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/javascripts http://redmine.rubyforge.org/svn -2010-09-05T11:33:08.614151Z -4060 -winterheart +2010-09-28T21:09:06.467392Z +4222 +edavis10 @@ -242,11 +242,11 @@ -2010-09-23T14:37:45.171796Z -6645a3ecbb861b6ed2923565afa744aa -2010-07-25T10:34:55.569539Z -3879 -jplang +2010-11-19T13:04:51.565792Z +cff005d7bada484046dc85e1caaeebe2 +2010-09-28T21:09:06.467392Z +4222 +edavis10 has-props @@ -268,7 +268,7 @@ -6439 +6581 controls.js file
--- a/public/javascripts/.svn/text-base/application.js.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/.svn/text-base/application.js.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,13 @@ for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; } } +function setCheckboxesBySelector(checked, selector) { + var boxes = $$(selector); + boxes.each(function(ele) { + ele.checked = checked; + }); +} + function showAndScrollTo(id, focus) { Element.show(id); if (focus!=null) { Form.Element.focus(focus); } @@ -56,7 +63,6 @@ dLabel.addClassName('inline'); // Pulls the languge value used for Optional Description dLabel.update($('attachment_description_label_content').innerHTML) - p = document.getElementById("attachments_fields"); p.appendChild(document.createElement("br")); p.appendChild(f);
--- a/public/javascripts/application.js Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/application.js Fri Nov 19 13:24:41 2010 +0000 @@ -17,6 +17,13 @@ for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; } } +function setCheckboxesBySelector(checked, selector) { + var boxes = $$(selector); + boxes.each(function(ele) { + ele.checked = checked; + }); +} + function showAndScrollTo(id, focus) { Element.show(id); if (focus!=null) { Form.Element.focus(focus); } @@ -56,7 +63,6 @@ dLabel.addClassName('inline'); // Pulls the languge value used for Optional Description dLabel.update($('attachment_description_label_content').innerHTML) - p = document.getElementById("attachments_fields"); p.appendChild(document.createElement("br")); p.appendChild(f);
--- a/public/javascripts/calendar/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/calendar/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar http://redmine.rubyforge.org/svn
--- a/public/javascripts/calendar/lang/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/calendar/lang/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar/lang http://redmine.rubyforge.org/svn @@ -570,6 +570,40 @@ 3845 +calendar-gl.js +file + + + + +2010-09-23T14:37:45.195758Z +c4f74e36f6a3debcf8ec065bc6886f04 +2009-01-23T15:37:59.406714Z +2296 +winterheart + + + + + + + + + + + + + + + + + + + + + +3855 + calendar-en.js file @@ -604,40 +638,6 @@ 3600 -calendar-gl.js -file - - - - -2010-09-23T14:37:45.195758Z -c4f74e36f6a3debcf8ec065bc6886f04 -2009-01-23T15:37:59.406714Z -2296 -winterheart - - - - - - - - - - - - - - - - - - - - - -3855 - calendar-fr.js file @@ -672,6 +672,74 @@ 3870 +calendar-zh-tw.js +file + + + + +2010-09-23T14:37:45.203758Z +0bed4c9c046772a12267b4118bf1504a +2008-06-07T09:03:20.687527Z +1498 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3841 + +calendar-hr.js +file + + + + +2010-09-23T14:37:45.195758Z +f8d0daa275cf612206c43d4c9be95d08 +2010-01-17T10:33:30.937961Z +3320 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +3646 + calendar-nl.js file @@ -706,74 +774,6 @@ 3701 -calendar-hr.js -file - - - - -2010-09-23T14:37:45.195758Z -f8d0daa275cf612206c43d4c9be95d08 -2010-01-17T10:33:30.937961Z -3320 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3646 - -calendar-zh-tw.js -file - - - - -2010-09-23T14:37:45.203758Z -0bed4c9c046772a12267b4118bf1504a -2008-06-07T09:03:20.687527Z -1498 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -3841 - calendar-mn.js file @@ -808,40 +808,6 @@ 3904 -calendar-pl.js -file - - - - -2010-09-23T14:37:45.199778Z -eabf711c28d30bb9474f3f505766f286 -2007-09-22T14:56:09.057923Z -749 -jplang - - - - - - - - - - - - - - - - - - - - - -3974 - calendar-th.js file @@ -876,6 +842,40 @@ 4417 +calendar-pl.js +file + + + + +2010-09-23T14:37:45.199778Z +eabf711c28d30bb9474f3f505766f286 +2007-09-22T14:56:09.057923Z +749 +jplang + + + + + + + + + + + + + + + + + + + + + +3974 + calendar-it.js file @@ -978,40 +978,6 @@ 3909 -calendar-lv.js -file - - - - -2010-09-23T14:37:45.199778Z -b260d88c13c01ebf4e7c94b9cb022930 -2010-05-14T18:15:41.754813Z -3737 -winterheart - - - - - - - - - - - - - - - - - - - - - -3803 - calendar-zh.js file @@ -1046,6 +1012,40 @@ 3600 +calendar-lv.js +file + + + + +2010-09-23T14:37:45.199778Z +b260d88c13c01ebf4e7c94b9cb022930 +2010-05-14T18:15:41.754813Z +3737 +winterheart + + + + + + + + + + + + + + + + + + + + + +3803 + calendar-ca.js file
--- a/public/javascripts/jstoolbar/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/jstoolbar/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar http://redmine.rubyforge.org/svn
--- a/public/javascripts/jstoolbar/lang/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/javascripts/jstoolbar/lang/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar/lang http://redmine.rubyforge.org/svn @@ -570,6 +570,74 @@ 753 +jstoolbar-zh-tw.js +file + + + + +2010-09-23T14:37:45.239756Z +be45a6e710f3a07e9fab41d795a64030 +2008-06-07T09:03:20.687527Z +1498 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +716 + +jstoolbar-hr.js +file + + + + +2010-09-23T14:37:45.231813Z +f13f0553753c4b53bd96c294ca6ce15e +2010-01-17T10:33:30.937961Z +3320 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +721 + jstoolbar-nl.js file @@ -604,74 +672,6 @@ 753 -jstoolbar-hr.js -file - - - - -2010-09-23T14:37:45.231813Z -f13f0553753c4b53bd96c294ca6ce15e -2010-01-17T10:33:30.937961Z -3320 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -721 - -jstoolbar-zh-tw.js -file - - - - -2010-09-23T14:37:45.239756Z -be45a6e710f3a07e9fab41d795a64030 -2008-06-07T09:03:20.687527Z -1498 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -716 - jstoolbar-mn.js file @@ -706,6 +706,40 @@ 916 +jstoolbar-th.js +file + + + + +2010-09-23T14:37:45.239756Z +3f844a6495d4eebb122b5c7b21696282 +2008-05-30T16:35:36.510811Z +1479 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +931 + jstoolbar-pl.js file @@ -740,40 +774,6 @@ 851 -jstoolbar-th.js -file - - - - -2010-09-23T14:37:45.239756Z -3f844a6495d4eebb122b5c7b21696282 -2008-05-30T16:35:36.510811Z -1479 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -931 - jstoolbar-it.js file @@ -876,40 +876,6 @@ 754 -jstoolbar-lv.js -file - - - - -2010-09-23T14:37:45.235815Z -5a44b7a9bd5b7db86d0a7398ee5bc779 -2010-05-14T18:15:41.754813Z -3737 -winterheart - - - - - - - - - - - - - - - - - - - - - -836 - jstoolbar-zh.js file @@ -944,6 +910,74 @@ 722 +jstoolbar-lv.js +file + + + + +2010-09-23T14:37:45.235815Z +5a44b7a9bd5b7db86d0a7398ee5bc779 +2010-05-14T18:15:41.754813Z +3737 +winterheart + + + + + + + + + + + + + + + + + + + + + +836 + +jstoolbar-ca.js +file + + + + +2010-09-23T14:37:45.231813Z +6aacb53ed49e6e14831baf8c38096662 +2008-09-15T16:07:30.857601Z +1865 +winterheart + + + + + + + + + + + + + + + + + + + + + +763 + jstoolbar-pt.js file @@ -978,39 +1012,39 @@ 823 -jstoolbar-ca.js +jstoolbar-da.js file 2010-09-23T14:37:45.231813Z -6aacb53ed49e6e14831baf8c38096662 -2008-09-15T16:07:30.857601Z -1865 -winterheart - - - - - - - - - - - - - - - - - - - - - -763 +4061b38de5e085dac922f77f94bd254a +2009-10-11T09:24:45.635758Z +2921 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +746 jstoolbar-pt-br.js file @@ -1046,40 +1080,6 @@ 819 -jstoolbar-da.js -file - - - - -2010-09-23T14:37:45.231813Z -4061b38de5e085dac922f77f94bd254a -2009-10-11T09:24:45.635758Z -2921 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -746 - jstoolbar-sr.js file
--- a/public/stylesheets/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/public/stylesheets/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/4072/trunk/public/stylesheets +/svn/!svn/ver/4377/trunk/public/stylesheets END context_menu.css K 25 @@ -49,5 +49,5 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/4072/trunk/public/stylesheets/application.css +/svn/!svn/ver/4377/trunk/public/stylesheets/application.css END
--- a/public/stylesheets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/stylesheets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/stylesheets http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-06T18:52:07.556711Z +4377 +jplang @@ -271,9 +271,9 @@ -e6a7b38459368e48b9c463dadb2e9f5f -2010-09-10T03:09:02.311267Z -4072 -edavis10 +d7fddb955f6ccbe8119b5ba02b0fc466 +2010-11-06T18:52:07.556711Z +4377 +jplang has-props
--- a/public/stylesheets/.svn/text-base/application.css.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/public/stylesheets/.svn/text-base/application.css.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -113,7 +113,7 @@ tr.project td.name a { white-space:nowrap; } -tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} +tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} tr.project.idnt-1 td.name {padding-left: 0.5em;} tr.project.idnt-2 td.name {padding-left: 2em;} tr.project.idnt-3 td.name {padding-left: 3.5em;} @@ -419,6 +419,7 @@ .tabular.settings textarea { width: 99%; } fieldset.settings label { display: block; } +.parent { padding-left: 20px; } .required {color: #bb0000;} .summary {font-style: italic;} @@ -714,9 +715,10 @@ div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; } div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; } -div.wiki ul.toc li { list-style-type:none;} -div.wiki ul.toc li.heading2 { margin-left: 6px; } -div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; } +div.wiki ul.toc ul { margin: 0; padding: 0; } +div.wiki ul.toc li { list-style-type:none; margin: 0;} +div.wiki ul.toc li li { margin-left: 1.5em; } +div.wiki ul.toc li li li { font-size: 0.8em; } div.wiki ul.toc a { font-size: 0.9em; @@ -853,6 +855,8 @@ .icon-summary { background-image: url(../images/lightning.png); } .icon-server-authentication { background-image: url(../images/server_key.png); } .icon-issue { background-image: url(../images/ticket.png); } +.icon-zoom-in { background-image: url(../images/zoom_in.png); } +.icon-zoom-out { background-image: url(../images/zoom_out.png); } .icon-file { background-image: url(../images/files/default.png); } .icon-file.text-plain { background-image: url(../images/files/text.png); }
--- a/public/stylesheets/application.css Fri Sep 24 14:06:04 2010 +0100 +++ b/public/stylesheets/application.css Fri Nov 19 13:24:41 2010 +0000 @@ -113,7 +113,7 @@ tr.project td.name a { white-space:nowrap; } -tr.project.idnt td.name a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} +tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;} tr.project.idnt-1 td.name {padding-left: 0.5em;} tr.project.idnt-2 td.name {padding-left: 2em;} tr.project.idnt-3 td.name {padding-left: 3.5em;} @@ -419,6 +419,7 @@ .tabular.settings textarea { width: 99%; } fieldset.settings label { display: block; } +.parent { padding-left: 20px; } .required {color: #bb0000;} .summary {font-style: italic;} @@ -714,9 +715,10 @@ div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; } div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; } -div.wiki ul.toc li { list-style-type:none;} -div.wiki ul.toc li.heading2 { margin-left: 6px; } -div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; } +div.wiki ul.toc ul { margin: 0; padding: 0; } +div.wiki ul.toc li { list-style-type:none; margin: 0;} +div.wiki ul.toc li li { margin-left: 1.5em; } +div.wiki ul.toc li li li { font-size: 0.8em; } div.wiki ul.toc a { font-size: 0.9em; @@ -853,6 +855,8 @@ .icon-summary { background-image: url(../images/lightning.png); } .icon-server-authentication { background-image: url(../images/server_key.png); } .icon-issue { background-image: url(../images/ticket.png); } +.icon-zoom-in { background-image: url(../images/zoom_in.png); } +.icon-zoom-out { background-image: url(../images/zoom_out.png); } .icon-file { background-image: url(../images/files/default.png); } .icon-file.text-plain { background-image: url(../images/files/text.png); }
--- a/public/themes/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes http://redmine.rubyforge.org/svn
--- a/public/themes/alternate/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/alternate/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes/alternate http://redmine.rubyforge.org/svn
--- a/public/themes/alternate/stylesheets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/alternate/stylesheets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes/alternate/stylesheets http://redmine.rubyforge.org/svn
--- a/public/themes/classic/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/classic/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes/classic http://redmine.rubyforge.org/svn
--- a/public/themes/classic/images/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/classic/images/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes/classic/images http://redmine.rubyforge.org/svn
--- a/public/themes/classic/stylesheets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/public/themes/classic/stylesheets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/public/themes/classic/stylesheets http://redmine.rubyforge.org/svn
--- a/script/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,59 +1,59 @@ K 25 svn:wc:ra_dav:version-url V 31 -/svn/!svn/ver/2783/trunk/script +/svn/!svn/ver/4359/trunk/script END console K 25 svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/331/trunk/script/console +V 39 +/svn/!svn/ver/4359/trunk/script/console END breakpointer K 25 svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/331/trunk/script/breakpointer +V 44 +/svn/!svn/ver/4359/trunk/script/breakpointer END server K 25 svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/331/trunk/script/server +V 38 +/svn/!svn/ver/4359/trunk/script/server END dbconsole K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/1623/trunk/script/dbconsole +/svn/!svn/ver/4359/trunk/script/dbconsole END destroy K 25 svn:wc:ra_dav:version-url -V 38 -/svn/!svn/ver/331/trunk/script/destroy +V 39 +/svn/!svn/ver/4359/trunk/script/destroy END runner K 25 svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/331/trunk/script/runner +V 38 +/svn/!svn/ver/4359/trunk/script/runner END about K 25 svn:wc:ra_dav:version-url V 37 -/svn/!svn/ver/2783/trunk/script/about +/svn/!svn/ver/4359/trunk/script/about END generate K 25 svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/331/trunk/script/generate +V 40 +/svn/!svn/ver/4359/trunk/script/generate END plugin K 25 svn:wc:ra_dav:version-url -V 37 -/svn/!svn/ver/331/trunk/script/plugin +V 38 +/svn/!svn/ver/4359/trunk/script/plugin END
--- a/script/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/script http://redmine.rubyforge.org/svn -2009-06-07T18:22:27.408484Z -2783 -edavis10 +2010-11-02T00:20:21.419252Z +4359 +jbbarth @@ -35,11 +35,11 @@ -2010-09-23T14:37:45.263770Z -e9da4d9bd98b629d856b280caa927f42 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +623b2f8265970f73bdb3489872d00eb6 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -61,7 +61,7 @@ -97 +104 breakpointer file @@ -69,11 +69,11 @@ -2010-09-23T14:37:45.263770Z -efe05546991854cb1323026c0cdc7d27 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +2ac529bf7a654b9b91b2fea2275aa44e +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -95,7 +95,7 @@ -102 +109 server file @@ -103,11 +103,11 @@ -2010-09-23T14:37:45.271755Z -bba2905059daec6033f7a51cff19aff6 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +ff97a702418dbc85fec089b97506281f +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -129,7 +129,7 @@ -96 +103 dbconsole file @@ -137,11 +137,11 @@ -2010-09-23T14:37:45.263770Z -5a6a7708fafd8f806775405f2f33fe99 -2008-07-04T17:58:14.743502Z -1623 -jplang +2010-11-19T13:04:51.017028Z +1fd5fa2d4aeee5b4111a40f62ae85446 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -163,7 +163,7 @@ -100 +106 destroy file @@ -171,11 +171,11 @@ -2010-09-23T14:37:45.263770Z -f09bb329fb28e89340567a704a4619f8 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +95866cb3b894816b540afd282b952618 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -197,7 +197,7 @@ -97 +104 runner file @@ -205,11 +205,11 @@ -2010-09-23T14:37:45.271755Z -78522a2f43ce4bf932cf237076c0d2a1 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +0cccc4eabf129ebd7b571d3eceda8893 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -231,7 +231,7 @@ -96 +103 about file @@ -239,11 +239,11 @@ -2010-09-23T14:37:45.263770Z -a1b78de0b704be4cfa29b11cfbd35a5e -2009-06-07T18:22:27.408484Z -2783 -edavis10 +2010-11-19T13:04:51.017028Z +b0aeca2e257a2226502c570e671e1b76 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -265,7 +265,7 @@ -187 +193 generate file @@ -273,11 +273,11 @@ -2010-09-23T14:37:45.267755Z -ef69c53ee39f550f43a4bd3a09482ff7 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +fb51df9bca94c25a928f40468354700f +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -299,7 +299,7 @@ -98 +105 process dir @@ -310,11 +310,11 @@ -2010-09-23T14:37:45.267755Z -4c5aa44730cde119ab839486212f4ac5 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.017028Z +db0dd437d39c21fe52e1fc05a0680163 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -336,5 +336,5 @@ -96 +103
--- a/script/.svn/text-base/about.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/about.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' +require File.expand_path('../../config/boot', __FILE__) $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info" require 'commands/about'
--- a/script/.svn/text-base/breakpointer.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/breakpointer.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/breakpointer' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/breakpointer'
--- a/script/.svn/text-base/console.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/console.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/console' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/console'
--- a/script/.svn/text-base/dbconsole.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/dbconsole.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/dbconsole'
--- a/script/.svn/text-base/destroy.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/destroy.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/destroy' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/destroy'
--- a/script/.svn/text-base/generate.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/generate.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/generate' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/generate'
--- a/script/.svn/text-base/plugin.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/plugin.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/plugin' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/plugin'
--- a/script/.svn/text-base/runner.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/runner.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/runner' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/runner'
--- a/script/.svn/text-base/server.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/.svn/text-base/server.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/server' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/server'
--- a/script/about Fri Sep 24 14:06:04 2010 +0100 +++ b/script/about Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' +require File.expand_path('../../config/boot', __FILE__) $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info" require 'commands/about'
--- a/script/breakpointer Fri Sep 24 14:06:04 2010 +0100 +++ b/script/breakpointer Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/breakpointer' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/breakpointer'
--- a/script/console Fri Sep 24 14:06:04 2010 +0100 +++ b/script/console Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/console' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/console'
--- a/script/dbconsole Fri Sep 24 14:06:04 2010 +0100 +++ b/script/dbconsole Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/dbconsole'
--- a/script/destroy Fri Sep 24 14:06:04 2010 +0100 +++ b/script/destroy Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/destroy' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/destroy'
--- a/script/generate Fri Sep 24 14:06:04 2010 +0100 +++ b/script/generate Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/generate' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/generate'
--- a/script/performance/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,23 +1,23 @@ K 25 svn:wc:ra_dav:version-url V 43 -/svn/!svn/ver/1623/trunk/script/performance +/svn/!svn/ver/4359/trunk/script/performance END benchmarker K 25 svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/331/trunk/script/performance/benchmarker +V 55 +/svn/!svn/ver/4359/trunk/script/performance/benchmarker END profiler K 25 svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/331/trunk/script/performance/profiler +V 52 +/svn/!svn/ver/4359/trunk/script/performance/profiler END request K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/1623/trunk/script/performance/request +/svn/!svn/ver/4359/trunk/script/performance/request END
--- a/script/performance/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/script/performance http://redmine.rubyforge.org/svn -2008-07-04T17:58:14.743502Z -1623 -jplang +2010-11-02T00:20:21.419252Z +4359 +jbbarth @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.267755Z -91086af38733556c5aabc91eb4b20bed -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:50.988983Z +33063b7a3d4dbef12ac8bcb55a5e6e3e +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -58,7 +58,7 @@ -117 +123 profiler file @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.267755Z -4dd7faa9b0b5f678082e19c97852b005 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:50.988983Z +9d3b872769337c49e648b9fe47e4e280 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -92,7 +92,7 @@ -114 +120 request file @@ -100,11 +100,11 @@ -2010-09-23T14:37:45.267755Z -9316140f20aace6cf628d17b5bfd1119 -2008-07-04T17:58:14.743502Z -1623 -jplang +2010-11-19T13:04:50.988983Z +b6500710f6029724e44cbd25f80eaaf1 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -126,5 +126,5 @@ -113 +116
--- a/script/performance/.svn/text-base/benchmarker.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/.svn/text-base/benchmarker.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../../config/boot', __FILE__) require 'commands/performance/benchmarker'
--- a/script/performance/.svn/text-base/profiler.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/.svn/text-base/profiler.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../../config/boot', __FILE__) require 'commands/performance/profiler'
--- a/script/performance/.svn/text-base/request.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/.svn/text-base/request.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/performance/request'
--- a/script/performance/benchmarker Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/benchmarker Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../../config/boot', __FILE__) require 'commands/performance/benchmarker'
--- a/script/performance/profiler Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/profiler Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../../config/boot', __FILE__) require 'commands/performance/profiler'
--- a/script/performance/request Fri Sep 24 14:06:04 2010 +0100 +++ b/script/performance/request Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/performance/request'
--- a/script/plugin Fri Sep 24 14:06:04 2010 +0100 +++ b/script/plugin Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/plugin' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/plugin'
--- a/script/process/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,29 +1,29 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/1623/trunk/script/process +/svn/!svn/ver/4359/trunk/script/process END spawner K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/331/trunk/script/process/spawner +V 47 +/svn/!svn/ver/4359/trunk/script/process/spawner END inspector K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/1623/trunk/script/process/inspector +/svn/!svn/ver/4359/trunk/script/process/inspector END reaper K 25 svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/331/trunk/script/process/reaper +V 46 +/svn/!svn/ver/4359/trunk/script/process/reaper END spinner K 25 svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/331/trunk/script/process/spinner +V 47 +/svn/!svn/ver/4359/trunk/script/process/spinner END
--- a/script/process/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/script/process http://redmine.rubyforge.org/svn -2008-07-04T17:58:14.743502Z -1623 -jplang +2010-11-02T00:20:21.419252Z +4359 +jbbarth @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.271755Z -e7e52ded28489a821b5eb156f92ca0f5 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.012938Z +47bf41d8d2c97d220d9f70916e94c651 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -58,7 +58,7 @@ -109 +112 inspector file @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.271755Z -73662c6991e4d3ea2332b5fcadd5b3d3 -2008-07-04T17:58:14.743502Z -1623 -jplang +2010-11-19T13:04:51.012938Z +9137857ebdaf61d57a3496f7e61fede3 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -92,7 +92,7 @@ -111 +114 reaper file @@ -100,11 +100,11 @@ -2010-09-23T14:37:45.271755Z -77608fa9e09e9f24410e7374c67956b7 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.012938Z +99af2666610d48d13e2eeceacf487d16 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -126,7 +126,7 @@ -108 +111 spinner file @@ -134,11 +134,11 @@ -2010-09-23T14:37:45.271755Z -69800f080d6bdd2f06c76c32f23c2c86 -2007-03-12T17:29:04.309051Z -331 -jplang +2010-11-19T13:04:51.012938Z +64b5316e88e7555bf827ad04edbce4a6 +2010-11-02T00:20:21.419252Z +4359 +jbbarth has-props @@ -160,5 +160,5 @@ -109 +112
--- a/script/process/.svn/text-base/inspector.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/text-base/inspector.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/inspector'
--- a/script/process/.svn/text-base/reaper.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/text-base/reaper.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/reaper'
--- a/script/process/.svn/text-base/spawner.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/text-base/spawner.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/spawner'
--- a/script/process/.svn/text-base/spinner.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/.svn/text-base/spinner.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/spinner'
--- a/script/process/inspector Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/inspector Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/inspector'
--- a/script/process/reaper Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/reaper Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/reaper'
--- a/script/process/spawner Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/spawner Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/spawner'
--- a/script/process/spinner Fri Sep 24 14:06:04 2010 +0100 +++ b/script/process/spinner Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' +require File.expand_path('../../config/boot', __FILE__) require 'commands/process/spinner'
--- a/script/runner Fri Sep 24 14:06:04 2010 +0100 +++ b/script/runner Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/runner' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/runner'
--- a/script/server Fri Sep 24 14:06:04 2010 +0100 +++ b/script/server Fri Nov 19 13:24:41 2010 +0000 @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/server' \ No newline at end of file +require File.expand_path('../../config/boot', __FILE__) +require 'commands/server'
--- a/test/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 29 -/svn/!svn/ver/4172/trunk/test +/svn/!svn/ver/4411/trunk/test END object_daddy_helpers.rb K 25 @@ -13,7 +13,7 @@ K 25 svn:wc:ra_dav:version-url V 44 -/svn/!svn/ver/4010/trunk/test/test_helper.rb +/svn/!svn/ver/4366/trunk/test/test_helper.rb END helper_testcase.rb K 25
--- a/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-17T18:27:38.712585Z +4411 +jplang @@ -72,10 +72,10 @@ -2010-09-23T14:37:45.443777Z -ac78351cc24dae03cb70f9e4bd9163fa -2010-08-19T22:24:42.251508Z -4010 +2010-11-19T13:04:46.868876Z +cc87df32bc2794f57f75ec6b0ed7e373 +2010-11-05T17:49:20.446583Z +4366 edavis10 has-props @@ -98,7 +98,7 @@ -6789 +16405 functional dir
--- a/test/.svn/text-base/test_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/.svn/text-base/test_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -113,11 +113,15 @@ def self.repository_configured?(vendor) File.directory?(repository_path(vendor)) end + + def assert_error_tag(options={}) + assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options)) + end # Shoulda macros def self.should_render_404 should_respond_with :not_found - should_render_template 'common/404' + should_render_template 'common/error' end def self.should_have_before_filter(expected_method, options = {}) @@ -181,4 +185,236 @@ assert !user.new_record? end end + + # Test that a request allows the three types of API authentication + # + # * HTTP Basic with username and password + # * HTTP Basic with an api key for the username + # * Key based with the key=X parameter + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_api_authentication(http_method, url, parameters={}, options={}) + should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters, options) + should_allow_http_basic_auth_with_key(http_method, url, parameters, options) + should_allow_key_based_auth(http_method, url, parameters, options) + end + + # Test that a request allows the username and password for HTTP BASIC + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow http basic auth using a username and password for #{http_method} #{url}" do + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password', :admin => true) # Admin so they can access the project + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid HTTP authentication" do + setup do + @user = User.generate_with_protected! + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "without credentials" do + setup do + send(http_method, url, parameters, {:authorization => ''}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "include_www_authenticate_header" do + assert @controller.response.headers.has_key?('WWW-Authenticate') + end + end + end + + end + + # Test that a request allows the API key with HTTP BASIC + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_http_basic_auth_with_key(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow http basic auth with a key for #{http_method} #{url}" do + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected!(:admin => true) + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should_be_a_valid_response_string_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid HTTP authentication" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'feeds') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + end + + # Test that a request allows full key authentication + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url, without the key=ZXY parameter + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_key_based_auth(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow key based auth using key=X for #{http_method} #{url}" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected!(:admin => true) + @token = Token.generate!(:user => @user, :action => 'api') + # Simple url parse to add on ?key= or &key= + request_url = if url.match(/\?/) + url + "&key=#{@token.value}" + else + url + "?key=#{@token.value}" + end + send(http_method, request_url, parameters) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should_be_a_valid_response_string_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'feeds') + # Simple url parse to add on ?key= or &key= + request_url = if url.match(/\?/) + url + "&key=#{@token.value}" + else + url + "?key=#{@token.value}" + end + send(http_method, request_url, parameters) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + + end + + # Uses should_respond_with_content_type based on what's in the url: + # + # '/project/issues.xml' => should_respond_with_content_type :xml + # '/project/issues.json' => should_respond_with_content_type :json + # + # @param [String] url Request + def self.should_respond_with_content_type_based_on_url(url) + case + when url.match(/xml/i) + should_respond_with_content_type :xml + when url.match(/json/i) + should_respond_with_content_type :json + else + raise "Unknown content type for should_respond_with_content_type_based_on_url: #{url}" + end + + end + + # Uses the url to assert which format the response should be in + # + # '/project/issues.xml' => should_be_a_valid_xml_string + # '/project/issues.json' => should_be_a_valid_json_string + # + # @param [String] url Request + def self.should_be_a_valid_response_string_based_on_url(url) + case + when url.match(/xml/i) + should_be_a_valid_xml_string + when url.match(/json/i) + should_be_a_valid_json_string + else + raise "Unknown content type for should_be_a_valid_response_based_on_url: #{url}" + end + + end + + # Checks that the response is a valid JSON string + def self.should_be_a_valid_json_string + should "be a valid JSON string (or empty)" do + assert (response.body.blank? || ActiveSupport::JSON.decode(response.body)) + end + end + + # Checks that the response is a valid XML string + def self.should_be_a_valid_xml_string + should "be a valid XML string" do + assert REXML::Document.new(response.body) + end + end + end + +# Simple module to "namespace" all of the API tests +module ApiTest +end
--- a/test/exemplars/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4010/trunk/test/exemplars +/svn/!svn/ver/4406/trunk/test/exemplars END message_exemplar.rb K 25 @@ -79,7 +79,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3759/trunk/test/exemplars/project_exemplar.rb +/svn/!svn/ver/4406/trunk/test/exemplars/project_exemplar.rb END custom_value_exemplar.rb K 25 @@ -135,17 +135,23 @@ V 57 /svn/!svn/ver/3340/trunk/test/exemplars/board_exemplar.rb END +member_role_exemplar.rb +K 25 +svn:wc:ra_dav:version-url +V 63 +/svn/!svn/ver/3340/trunk/test/exemplars/member_role_exemplar.rb +END issue_exemplar.rb K 25 svn:wc:ra_dav:version-url V 57 /svn/!svn/ver/3398/trunk/test/exemplars/issue_exemplar.rb END -member_role_exemplar.rb +tracker_exemplar.rb K 25 svn:wc:ra_dav:version-url -V 63 -/svn/!svn/ver/3340/trunk/test/exemplars/member_role_exemplar.rb +V 59 +/svn/!svn/ver/2930/trunk/test/exemplars/tracker_exemplar.rb END issue_status_exemplar.rb K 25 @@ -153,11 +159,11 @@ V 64 /svn/!svn/ver/2930/trunk/test/exemplars/issue_status_exemplar.rb END -tracker_exemplar.rb +time_entry_activity.rb K 25 svn:wc:ra_dav:version-url -V 59 -/svn/!svn/ver/2930/trunk/test/exemplars/tracker_exemplar.rb +V 62 +/svn/!svn/ver/2930/trunk/test/exemplars/time_entry_activity.rb END subversion_repository_exemplar.rb K 25 @@ -165,11 +171,11 @@ V 73 /svn/!svn/ver/3340/trunk/test/exemplars/subversion_repository_exemplar.rb END -time_entry_activity.rb +role_exemplar.rb K 25 svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/2930/trunk/test/exemplars/time_entry_activity.rb +V 56 +/svn/!svn/ver/2930/trunk/test/exemplars/role_exemplar.rb END changeset_exemplar.rb K 25 @@ -177,12 +183,6 @@ V 61 /svn/!svn/ver/3340/trunk/test/exemplars/changeset_exemplar.rb END -role_exemplar.rb -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/2930/trunk/test/exemplars/role_exemplar.rb -END comment_exemplar.rb K 25 svn:wc:ra_dav:version-url @@ -211,7 +211,7 @@ K 25 svn:wc:ra_dav:version-url V 56 -/svn/!svn/ver/3010/trunk/test/exemplars/user_exemplar.rb +/svn/!svn/ver/4218/trunk/test/exemplars/user_exemplar.rb END time_entry_exemplar.rb K 25
--- a/test/exemplars/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/exemplars http://redmine.rubyforge.org/svn -2010-08-19T22:24:42.251508Z -4010 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -440,33 +440,33 @@ -2010-09-23T14:37:45.291809Z -0b0e9ab56f34b8d5f3fd7265d2dd4ffe -2010-05-27T17:16:05.103190Z -3759 -edavis10 - - - - - - - - - - - - - - - - - - - - - -816 +2010-11-19T13:04:41.365641Z +9be3a10325013fa24b00903db30d1ca3 +2010-11-14T16:24:21.989522Z +4406 +jplang + + + + + + + + + + + + + + + + + + + + + +810 custom_value_exemplar.rb file @@ -774,6 +774,40 @@ 481 +issue_exemplar.rb +file + + + + +2010-09-23T14:37:45.287807Z +92ac53d6b3a2e00ae1a9e0e4bc5d548b +2010-02-08T18:53:12.750770Z +3398 +edavis10 + + + + + + + + + + + + + + + + + + + + + +449 + member_role_exemplar.rb file @@ -808,16 +842,16 @@ 250 -issue_exemplar.rb +issue_status_exemplar.rb file 2010-09-23T14:37:45.287807Z -92ac53d6b3a2e00ae1a9e0e4bc5d548b -2010-02-08T18:53:12.750770Z -3398 +d17dfd87c9c081965089712a4ce42a6d +2009-10-18T22:25:00.956502Z +2930 edavis10 @@ -840,7 +874,7 @@ -449 +182 tracker_exemplar.rb file @@ -876,16 +910,16 @@ 179 -issue_status_exemplar.rb +subversion_repository_exemplar.rb file -2010-09-23T14:37:45.287807Z -d17dfd87c9c081965089712a4ce42a6d -2009-10-18T22:25:00.956502Z -2930 +2010-09-23T14:37:45.291809Z +908d8689f3ff469978b8af8bb55084b4 +2010-01-27T18:29:03.119133Z +3340 edavis10 @@ -908,7 +942,7 @@ -182 +235 time_entry_activity.rb file @@ -944,14 +978,14 @@ 236 -subversion_repository_exemplar.rb +changeset_exemplar.rb file -2010-09-23T14:37:45.291809Z -908d8689f3ff469978b8af8bb55084b4 +2010-09-23T14:37:45.287807Z +c01820cc719616bb5a0895cfddb40798 2010-01-27T18:29:03.119133Z 3340 edavis10 @@ -976,7 +1010,7 @@ -235 +377 role_exemplar.rb file @@ -1012,40 +1046,6 @@ 157 -changeset_exemplar.rb -file - - - - -2010-09-23T14:37:45.287807Z -c01820cc719616bb5a0895cfddb40798 -2010-01-27T18:29:03.119133Z -3340 -edavis10 - - - - - - - - - - - - - - - - - - - - - -377 - comment_exemplar.rb file @@ -1188,10 +1188,10 @@ -2010-09-23T14:37:45.291809Z -c4ea7f6c706d04e3ef3f809e37867766 -2009-11-05T21:32:26.784578Z -3010 +2010-11-19T13:04:41.365641Z +44278bb3b28eed2566aab063777becf7 +2010-09-28T18:22:10.512346Z +4218 edavis10 @@ -1214,7 +1214,7 @@ -648 +650 time_entry_exemplar.rb file
--- a/test/exemplars/.svn/text-base/project_exemplar.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/.svn/text-base/project_exemplar.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -18,7 +18,7 @@ end def self.all_modules - returning [] do |modules| + [].tap do |modules| Redmine::AccessControl.available_project_modules.each do |name| modules << EnabledModule.new(:name => name.to_s) end
--- a/test/exemplars/.svn/text-base/user_exemplar.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/.svn/text-base/user_exemplar.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -3,7 +3,7 @@ generator_for :mail, :method => :next_email generator_for :firstname, :method => :next_firstname generator_for :lastname, :method => :next_lastname - + def self.next_login @gen_login ||= 'user1' @gen_login.succ!
--- a/test/exemplars/project_exemplar.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/project_exemplar.rb Fri Nov 19 13:24:41 2010 +0000 @@ -18,7 +18,7 @@ end def self.all_modules - returning [] do |modules| + [].tap do |modules| Redmine::AccessControl.available_project_modules.each do |name| modules << EnabledModule.new(:name => name.to_s) end
--- a/test/exemplars/user_exemplar.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/exemplars/user_exemplar.rb Fri Nov 19 13:24:41 2010 +0000 @@ -3,7 +3,7 @@ generator_for :mail, :method => :next_email generator_for :firstname, :method => :next_firstname generator_for :lastname, :method => :next_lastname - + def self.next_login @gen_login ||= 'user1' @gen_login.succ!
--- a/test/fixtures/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 38 -/svn/!svn/ver/4013/trunk/test/fixtures +/svn/!svn/ver/4404/trunk/test/fixtures END journal_details.yml K 25 @@ -61,7 +61,7 @@ K 25 svn:wc:ra_dav:version-url V 56 -/svn/!svn/ver/3112/trunk/test/fixtures/custom_values.yml +/svn/!svn/ver/4382/trunk/test/fixtures/custom_values.yml END issue_categories.yml K 25 @@ -105,23 +105,17 @@ V 50 /svn/!svn/ver/2895/trunk/test/fixtures/changes.yml END -enumerations.yml -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3573/trunk/test/fixtures/enumerations.yml -END custom_fields_projects.yml K 25 svn:wc:ra_dav:version-url V 65 /svn/!svn/ver/3278/trunk/test/fixtures/custom_fields_projects.yml END -issues.yml +enumerations.yml K 25 svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/3663/trunk/test/fixtures/issues.yml +V 55 +/svn/!svn/ver/3573/trunk/test/fixtures/enumerations.yml END member_roles.yml K 25 @@ -129,23 +123,35 @@ V 55 /svn/!svn/ver/3250/trunk/test/fixtures/member_roles.yml END +issues.yml +K 25 +svn:wc:ra_dav:version-url +V 49 +/svn/!svn/ver/4186/trunk/test/fixtures/issues.yml +END queries.yml K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/3071/trunk/test/fixtures/queries.yml END +watchers.yml +K 25 +svn:wc:ra_dav:version-url +V 51 +/svn/!svn/ver/2456/trunk/test/fixtures/watchers.yml +END wiki_contents.yml K 25 svn:wc:ra_dav:version-url V 56 /svn/!svn/ver/3412/trunk/test/fixtures/wiki_contents.yml END -watchers.yml +enabled_modules.yml K 25 svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/2456/trunk/test/fixtures/watchers.yml +V 58 +/svn/!svn/ver/4013/trunk/test/fixtures/enabled_modules.yml END wiki_pages.yml K 25 @@ -153,11 +159,11 @@ V 53 /svn/!svn/ver/3412/trunk/test/fixtures/wiki_pages.yml END -enabled_modules.yml +wiki_content_versions.yml K 25 svn:wc:ra_dav:version-url -V 58 -/svn/!svn/ver/4013/trunk/test/fixtures/enabled_modules.yml +V 64 +/svn/!svn/ver/2895/trunk/test/fixtures/wiki_content_versions.yml END comments.yml K 25 @@ -165,30 +171,24 @@ V 51 /svn/!svn/ver/2895/trunk/test/fixtures/comments.yml END -wiki_content_versions.yml -K 25 -svn:wc:ra_dav:version-url -V 64 -/svn/!svn/ver/2895/trunk/test/fixtures/wiki_content_versions.yml -END members.yml K 25 svn:wc:ra_dav:version-url V 50 /svn/!svn/ver/3250/trunk/test/fixtures/members.yml END +workflows.yml +K 25 +svn:wc:ra_dav:version-url +V 52 +/svn/!svn/ver/2895/trunk/test/fixtures/workflows.yml +END journals.yml K 25 svn:wc:ra_dav:version-url V 51 /svn/!svn/ver/3123/trunk/test/fixtures/journals.yml END -workflows.yml -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/2895/trunk/test/fixtures/workflows.yml -END custom_fields.yml K 25 svn:wc:ra_dav:version-url @@ -199,7 +199,7 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/3024/trunk/test/fixtures/users.yml +/svn/!svn/ver/4216/trunk/test/fixtures/users.yml END auth_sources.yml K 25
--- a/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures http://redmine.rubyforge.org/svn -2010-08-22T18:42:00.112555Z -4013 -edavis10 +2010-11-14T13:48:01.671461Z +4404 +jplang @@ -313,10 +313,10 @@ -2010-09-23T14:37:45.319762Z -7c37bf142019bf7e3d15cb2f10c6c5ba -2009-12-02T18:57:17.339733Z -3112 +2010-11-19T13:04:46.864726Z +4d480d87e42663a5e874353649c86039 +2010-11-07T14:15:01.891476Z +4382 jplang has-props @@ -339,7 +339,7 @@ -1919 +1933 projects.yml file @@ -616,6 +616,43 @@ 377 +mailer +dir + +enumerations.yml +file + + + + +2010-09-23T14:37:45.323763Z +bafbddc194242dbdcac1f2bfc550c27b +2010-03-13T14:56:49.379682Z +3573 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1391 + custom_fields_projects.yml file @@ -650,17 +687,17 @@ 71 -enumerations.yml +issues.yml file -2010-09-23T14:37:45.323763Z -bafbddc194242dbdcac1f2bfc550c27b -2010-03-13T14:56:49.379682Z -3573 -jplang +2010-11-19T13:04:46.864726Z +6d21fa7811e1d7b4a1db0f4062fcba45 +2010-09-26T18:13:31.522853Z +4186 +edavis10 has-props @@ -682,10 +719,7 @@ -1391 - -mailer -dir +5661 member_roles.yml file @@ -721,40 +755,6 @@ 692 -issues.yml -file - - - - -2010-09-23T14:37:45.327799Z -5c4431f5ee0ecd68c45712b87da9ca3e -2010-04-11T16:27:37.584909Z -3663 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -5644 - queries.yml file @@ -789,6 +789,40 @@ 2345 +wiki_contents.yml +file + + + + +2010-09-23T14:37:45.355763Z +8e7549cddb3ed2eb4c5778e3506e3e0c +2010-02-11T19:30:53.136370Z +3412 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1795 + watchers.yml file @@ -823,17 +857,17 @@ 219 -wiki_contents.yml +enabled_modules.yml file -2010-09-23T14:37:45.355763Z -8e7549cddb3ed2eb4c5778e3506e3e0c -2010-02-11T19:30:53.136370Z -3412 -jplang +2010-09-23T14:37:45.319762Z +8a815e166641ad170ffddcf33646ca04 +2010-08-22T18:42:00.112555Z +4013 +edavis10 has-props @@ -855,7 +889,7 @@ -1795 +1539 wiki_pages.yml file @@ -891,40 +925,6 @@ 1227 -enabled_modules.yml -file - - - - -2010-09-23T14:37:45.319762Z -8a815e166641ad170ffddcf33646ca04 -2010-08-22T18:42:00.112555Z -4013 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -1539 - comments.yml file @@ -1141,11 +1141,11 @@ -2010-09-23T14:37:45.351765Z -ac7c965e48b0bb9568999ecaa86a627e -2009-11-11T10:48:54.418561Z -3024 -jplang +2010-11-19T13:04:46.864726Z +f590d477ec468a76d8d31d5ed99de0e6 +2010-09-28T18:22:00.231301Z +4216 +edavis10 has-props @@ -1167,7 +1167,7 @@ -3262 +3294 auth_sources.yml file
--- a/test/fixtures/.svn/text-base/custom_values.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/.svn/text-base/custom_values.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ custom_field_id: 4 customized_id: 2 id: 3 - value: "" + value: "01 42 50 00 00" custom_values_004: customized_type: Issue custom_field_id: 2
--- a/test/fixtures/.svn/text-base/issues.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/.svn/text-base/issues.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -38,6 +38,7 @@ lft: 1 rgt: 2 lock_version: 3 + done_ratio: 30 issues_003: created_on: 2006-07-19 21:07:27 +02:00 project_id: 1
--- a/test/fixtures/.svn/text-base/users.yml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/.svn/text-base/users.yml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -12,7 +12,7 @@ firstname: Robert id: 4 auth_source_id: - mail_notification: true + mail_notification: all login: rhill type: User users_001: @@ -28,7 +28,7 @@ firstname: redMine id: 1 auth_source_id: - mail_notification: true + mail_notification: all login: admin type: User users_002: @@ -44,7 +44,7 @@ firstname: John id: 2 auth_source_id: - mail_notification: true + mail_notification: all login: jsmith type: User users_003: @@ -60,7 +60,7 @@ firstname: Dave id: 3 auth_source_id: - mail_notification: true + mail_notification: all login: dlopper type: User users_005: @@ -77,7 +77,7 @@ lastname: Lopper2 firstname: Dave2 auth_source_id: - mail_notification: true + mail_notification: all login: dlopper2 type: User users_006: @@ -93,7 +93,7 @@ lastname: Anonymous firstname: '' auth_source_id: - mail_notification: false + mail_notification: only_my_events login: '' type: AnonymousUser users_007: @@ -109,7 +109,7 @@ lastname: One firstname: Some auth_source_id: - mail_notification: false + mail_notification: only_my_events login: someone type: User users_008: @@ -125,7 +125,7 @@ lastname: Misc firstname: User auth_source_id: - mail_notification: false + mail_notification: only_my_events login: miscuser8 type: User users_009: @@ -141,7 +141,7 @@ lastname: Misc firstname: User auth_source_id: - mail_notification: false + mail_notification: only_my_events login: miscuser9 type: User groups_010: @@ -153,4 +153,4 @@ lastname: B Team type: Group - \ No newline at end of file +
--- a/test/fixtures/custom_values.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/custom_values.yml Fri Nov 19 13:24:41 2010 +0000 @@ -28,7 +28,7 @@ custom_field_id: 4 customized_id: 2 id: 3 - value: "" + value: "01 42 50 00 00" custom_values_004: customized_type: Issue custom_field_id: 2
--- a/test/fixtures/diffs/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/diffs/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/diffs http://redmine.rubyforge.org/svn
--- a/test/fixtures/encoding/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/encoding/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/encoding http://redmine.rubyforge.org/svn
--- a/test/fixtures/files/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/files/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/files http://redmine.rubyforge.org/svn
--- a/test/fixtures/issues.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/issues.yml Fri Nov 19 13:24:41 2010 +0000 @@ -38,6 +38,7 @@ lft: 1 rgt: 2 lock_version: 3 + done_ratio: 30 issues_003: created_on: 2006-07-19 21:07:27 +02:00 project_id: 1
--- a/test/fixtures/ldap/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/ldap/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/ldap http://redmine.rubyforge.org/svn
--- a/test/fixtures/mail_handler/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3801/trunk/test/fixtures/mail_handler +/svn/!svn/ver/4404/trunk/test/fixtures/mail_handler +END +message_reply_by_subject.eml +K 25 +svn:wc:ra_dav:version-url +V 80 +/svn/!svn/ver/2294/trunk/test/fixtures/mail_handler/message_reply_by_subject.eml END ticket_html_only.eml K 25 @@ -9,11 +15,11 @@ V 72 /svn/!svn/ver/2136/trunk/test/fixtures/mail_handler/ticket_html_only.eml END -message_reply_by_subject.eml +issue_update_with_multiple_quoted_reply_above.eml K 25 svn:wc:ra_dav:version-url -V 80 -/svn/!svn/ver/2294/trunk/test/fixtures/mail_handler/message_reply_by_subject.eml +V 101 +/svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml END ticket_with_spaces_between_attribute_and_separator.eml K 25 @@ -21,6 +27,12 @@ V 106 /svn/!svn/ver/2838/trunk/test/fixtures/mail_handler/ticket_with_spaces_between_attribute_and_separator.eml END +ticket_with_localized_attributes.eml +K 25 +svn:wc:ra_dav:version-url +V 88 +/svn/!svn/ver/4395/trunk/test/fixtures/mail_handler/ticket_with_localized_attributes.eml +END ticket_with_long_subject.eml K 25 svn:wc:ra_dav:version-url @@ -69,17 +81,35 @@ V 78 /svn/!svn/ver/2789/trunk/test/fixtures/mail_handler/ticket_by_unknown_user.eml END +ticket_with_invalid_attributes.eml +K 25 +svn:wc:ra_dav:version-url +V 86 +/svn/!svn/ver/4404/trunk/test/fixtures/mail_handler/ticket_with_invalid_attributes.eml +END ticket_reply_with_status.eml K 25 svn:wc:ra_dav:version-url V 80 -/svn/!svn/ver/3764/trunk/test/fixtures/mail_handler/ticket_reply_with_status.eml +/svn/!svn/ver/4394/trunk/test/fixtures/mail_handler/ticket_reply_with_status.eml END ticket_on_given_project.eml K 25 svn:wc:ra_dav:version-url V 79 -/svn/!svn/ver/3764/trunk/test/fixtures/mail_handler/ticket_on_given_project.eml +/svn/!svn/ver/4394/trunk/test/fixtures/mail_handler/ticket_on_given_project.eml +END +issue_update_with_quoted_reply_above.eml +K 25 +svn:wc:ra_dav:version-url +V 92 +/svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml +END +ticket_reply.eml +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/!svn/ver/2288/trunk/test/fixtures/mail_handler/ticket_reply.eml END ticket_with_custom_fields.eml K 25 @@ -87,12 +117,6 @@ V 81 /svn/!svn/ver/2211/trunk/test/fixtures/mail_handler/ticket_with_custom_fields.eml END -ticket_reply.eml -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/2288/trunk/test/fixtures/mail_handler/ticket_reply.eml -END message_reply.eml K 25 svn:wc:ra_dav:version-url
--- a/test/fixtures/mail_handler/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/mail_handler http://redmine.rubyforge.org/svn -2010-06-20T16:22:36.211973Z -3801 -edavis10 +2010-11-14T13:48:01.671461Z +4404 +jplang @@ -26,6 +26,40 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +message_reply_by_subject.eml +file + + + + +2010-09-23T14:37:45.339796Z +09130a1100cb410ed07fdff5564b2993 +2009-01-21T18:22:30.765588Z +2294 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +410 + ticket_html_only.eml file @@ -60,18 +94,17 @@ 691 -message_reply_by_subject.eml +issue_update_with_multiple_quoted_reply_above.eml file -2010-09-23T14:37:45.339796Z -09130a1100cb410ed07fdff5564b2993 -2009-01-21T18:22:30.765588Z -2294 -jplang -has-props +2010-11-19T13:04:46.204713Z +ef4c0db9f76d81792292785d2ae9cb6a +2010-11-02T19:00:31.177706Z +4361 +edavis10 @@ -92,7 +125,8 @@ -410 + +2018 ticket_with_spaces_between_attribute_and_separator.eml file @@ -128,6 +162,40 @@ 1903 +ticket_with_localized_attributes.eml +file + + + + +2010-11-19T13:04:46.204713Z +8ac895d880e6f19fc21333c4003babaf +2010-11-12T12:29:35.878777Z +4395 +jplang + + + + + + + + + + + + + + + + + + + + + +1944 + ticket_with_long_subject.eml file @@ -400,17 +468,51 @@ 526 +ticket_with_invalid_attributes.eml +file + + + + +2010-11-19T13:04:46.204713Z +605f28e31469b6897f33cf34bbc1ad0a +2010-11-14T13:48:01.671461Z +4404 +jplang + + + + + + + + + + + + + + + + + + + + + +2028 + ticket_reply_with_status.eml file -2010-09-23T14:37:45.339796Z -2a98751dfc76fcc9eefa7eaf2a8098e4 -2010-05-29T00:05:24.040852Z -3764 -edavis10 +2010-11-19T13:04:46.204713Z +88a90b088de41d263e9135d1810cf58c +2010-11-12T11:34:53.754717Z +4394 +jplang @@ -432,7 +534,7 @@ -2026 +2065 ticket_on_given_project.eml file @@ -440,10 +542,44 @@ -2010-09-23T14:37:45.339796Z -6cd634ffcd88be96cbe8789ae9545c5f -2010-05-29T00:05:24.040852Z -3764 +2010-11-19T13:04:46.204713Z +af7f3e5f9caddc2cad5fba0ba9d73882 +2010-11-12T11:34:53.754717Z +4394 +jplang + + + + + + + + + + + + + + + + + + + + + +2255 + +issue_update_with_quoted_reply_above.eml +file + + + + +2010-11-19T13:04:46.204713Z +977375e727ce2d63ce878f877d692c62 +2010-11-02T19:00:31.177706Z +4361 edavis10 @@ -466,7 +602,41 @@ -2195 +1979 + +ticket_reply.eml +file + + + + +2010-09-23T14:37:45.339796Z +4bd4decc00f83404fdd1a835809e4552 +2009-01-19T18:29:07.726757Z +2288 +jplang + + + + + + + + + + + + + + + + + + + + + +2012 ticket_with_custom_fields.eml file @@ -502,40 +672,6 @@ 1887 -ticket_reply.eml -file - - - - -2010-09-23T14:37:45.339796Z -4bd4decc00f83404fdd1a835809e4552 -2009-01-19T18:29:07.726757Z -2288 -jplang - - - - - - - - - - - - - - - - - - - - - -2012 - message_reply.eml file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/.svn/text-base/issue_update_with_multiple_quoted_reply_above.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,48 @@ +Return-Path: <JSmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +In-Reply-To: <redmine.issue-2.20060719210421@osiris> +From: "John Smith" <JSmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: Re: update to issue 2 +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +An update to the issue by the sender. + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +>> > --- Reply above. Do not remove this line. --- +>> > +>> > Issue #6779 has been updated by Eric Davis. +>> > +>> > Subject changed from Projects with JSON to Project JSON API +>> > Status changed from New to Assigned +>> > Assignee set to Eric Davis +>> > Priority changed from Low to Normal +>> > Estimated time deleted (1.00) +>> > +>> > Looks like the JSON api for projects was missed. I'm going to be +>> > reviewing the existing APIs and trying to clean them up over the next +>> > few weeks.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/.svn/text-base/issue_update_with_quoted_reply_above.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,48 @@ +Return-Path: <JSmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +In-Reply-To: <redmine.issue-2.20060719210421@osiris> +From: "John Smith" <JSmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: Re: update to issue 2 +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +An update to the issue by the sender. + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +> --- Reply above. Do not remove this line. --- +> +> Issue #6779 has been updated by Eric Davis. +> +> Subject changed from Projects with JSON to Project JSON API +> Status changed from New to Assigned +> Assignee set to Eric Davis +> Priority changed from Low to Normal +> Estimated time deleted (1.00) +> +> Looks like the JSON api for projects was missed. I'm going to be +> reviewing the existing APIs and trying to clean them up over the next +> few weeks.
--- a/test/fixtures/mail_handler/.svn/text-base/ticket_on_given_project.eml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/.svn/text-base/ticket_on_given_project.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -54,4 +54,7 @@ due date: 2010-12-31 Start Date:2010-01-01 Assigned to: John Smith +fixed version: alpha +estimated hours: 2.5 +done ratio: 30
--- a/test/fixtures/mail_handler/.svn/text-base/ticket_reply_with_status.eml.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/.svn/text-base/ticket_reply_with_status.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -29,6 +29,7 @@ due date: 2010-12-31 Start Date:2010-01-01 Assigned to: jsmith@somenet.foo +searchable field: Updated custom value ------=_NextPart_000_0067_01C8D3CE.711F9CC0 Content-Type: text/html;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/.svn/text-base/ticket_with_invalid_attributes.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,47 @@ +Return-Path: <jsmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +From: "John Smith" <jsmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: New ticket on a given project +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque +sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. +Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, +dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, +massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo +pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. + +Project: onlinestore +Tracker: Feature request +category: Stock management +assigned to: miscuser9@foo.bar +priority: foo +done ratio: x +start date: some day +due date: never
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/.svn/text-base/ticket_with_localized_attributes.eml.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,43 @@ +Return-Path: <jsmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +From: "John Smith" <jsmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: New ticket on a given project +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque +sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. +Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, +dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, +massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo +pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. + +Projet: onlinestore +Tracker: Feature request +catégorie: Stock management +priorité: Urgent
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,48 @@ +Return-Path: <JSmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +In-Reply-To: <redmine.issue-2.20060719210421@osiris> +From: "John Smith" <JSmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: Re: update to issue 2 +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +An update to the issue by the sender. + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +>> > --- Reply above. Do not remove this line. --- +>> > +>> > Issue #6779 has been updated by Eric Davis. +>> > +>> > Subject changed from Projects with JSON to Project JSON API +>> > Status changed from New to Assigned +>> > Assignee set to Eric Davis +>> > Priority changed from Low to Normal +>> > Estimated time deleted (1.00) +>> > +>> > Looks like the JSON api for projects was missed. I'm going to be +>> > reviewing the existing APIs and trying to clean them up over the next +>> > few weeks.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,48 @@ +Return-Path: <JSmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +In-Reply-To: <redmine.issue-2.20060719210421@osiris> +From: "John Smith" <JSmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: Re: update to issue 2 +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +An update to the issue by the sender. + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +> --- Reply above. Do not remove this line. --- +> +> Issue #6779 has been updated by Eric Davis. +> +> Subject changed from Projects with JSON to Project JSON API +> Status changed from New to Assigned +> Assignee set to Eric Davis +> Priority changed from Low to Normal +> Estimated time deleted (1.00) +> +> Looks like the JSON api for projects was missed. I'm going to be +> reviewing the existing APIs and trying to clean them up over the next +> few weeks.
--- a/test/fixtures/mail_handler/ticket_on_given_project.eml Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/ticket_on_given_project.eml Fri Nov 19 13:24:41 2010 +0000 @@ -54,4 +54,7 @@ due date: 2010-12-31 Start Date:2010-01-01 Assigned to: John Smith +fixed version: alpha +estimated hours: 2.5 +done ratio: 30
--- a/test/fixtures/mail_handler/ticket_reply_with_status.eml Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mail_handler/ticket_reply_with_status.eml Fri Nov 19 13:24:41 2010 +0000 @@ -29,6 +29,7 @@ due date: 2010-12-31 Start Date:2010-01-01 Assigned to: jsmith@somenet.foo +searchable field: Updated custom value ------=_NextPart_000_0067_01C8D3CE.711F9CC0 Content-Type: text/html;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/ticket_with_invalid_attributes.eml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,47 @@ +Return-Path: <jsmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +From: "John Smith" <jsmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: New ticket on a given project +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque +sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. +Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, +dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, +massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo +pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. + +Project: onlinestore +Tracker: Feature request +category: Stock management +assigned to: miscuser9@foo.bar +priority: foo +done ratio: x +start date: some day +due date: never
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/fixtures/mail_handler/ticket_with_localized_attributes.eml Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,43 @@ +Return-Path: <jsmith@somenet.foo> +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +From: "John Smith" <jsmith@somenet.foo> +To: <redmine@somenet.foo> +Subject: New ticket on a given project +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque +sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. +Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, +dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, +massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo +pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. + +Projet: onlinestore +Tracker: Feature request +catégorie: Stock management +priorité: Urgent
--- a/test/fixtures/mailer/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/mailer/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/mailer http://redmine.rubyforge.org/svn
--- a/test/fixtures/repositories/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/repositories/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 51 -/svn/!svn/ver/3828/trunk/test/fixtures/repositories +/svn/!svn/ver/4310/trunk/test/fixtures/repositories END darcs_repository.tar.gz K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 73 -/svn/!svn/ver/3828/trunk/test/fixtures/repositories/git_repository.tar.gz +/svn/!svn/ver/4310/trunk/test/fixtures/repositories/git_repository.tar.gz END mercurial_repository.tar.gz K 25
--- a/test/fixtures/repositories/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/repositories/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/fixtures/repositories http://redmine.rubyforge.org/svn -2010-07-06T02:07:46.557097Z -3828 -edavis10 +2010-10-29T23:21:57.240368Z +4310 +jbbarth @@ -134,11 +134,11 @@ -2010-09-23T14:37:45.351765Z -4717d4ab5ae991a07ac8256d6cc83c36 -2010-07-06T02:07:46.557097Z -3828 -edavis10 +2010-11-19T13:04:46.860726Z +300e21b10239e2fa28df3111924b8328 +2010-10-29T23:21:57.240368Z +4310 +jbbarth has-props @@ -160,7 +160,7 @@ -19452 +20730 mercurial_repository.tar.gz file
--- a/test/fixtures/users.yml Fri Sep 24 14:06:04 2010 +0100 +++ b/test/fixtures/users.yml Fri Nov 19 13:24:41 2010 +0000 @@ -12,7 +12,7 @@ firstname: Robert id: 4 auth_source_id: - mail_notification: true + mail_notification: all login: rhill type: User users_001: @@ -28,7 +28,7 @@ firstname: redMine id: 1 auth_source_id: - mail_notification: true + mail_notification: all login: admin type: User users_002: @@ -44,7 +44,7 @@ firstname: John id: 2 auth_source_id: - mail_notification: true + mail_notification: all login: jsmith type: User users_003: @@ -60,7 +60,7 @@ firstname: Dave id: 3 auth_source_id: - mail_notification: true + mail_notification: all login: dlopper type: User users_005: @@ -77,7 +77,7 @@ lastname: Lopper2 firstname: Dave2 auth_source_id: - mail_notification: true + mail_notification: all login: dlopper2 type: User users_006: @@ -93,7 +93,7 @@ lastname: Anonymous firstname: '' auth_source_id: - mail_notification: false + mail_notification: only_my_events login: '' type: AnonymousUser users_007: @@ -109,7 +109,7 @@ lastname: One firstname: Some auth_source_id: - mail_notification: false + mail_notification: only_my_events login: someone type: User users_008: @@ -125,7 +125,7 @@ lastname: Misc firstname: User auth_source_id: - mail_notification: false + mail_notification: only_my_events login: miscuser8 type: User users_009: @@ -141,7 +141,7 @@ lastname: Misc firstname: User auth_source_id: - mail_notification: false + mail_notification: only_my_events login: miscuser9 type: User groups_010: @@ -153,4 +153,4 @@ lastname: B Team type: Group - \ No newline at end of file +
--- a/test/functional/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,19 +1,19 @@ K 25 svn:wc:ra_dav:version-url V 40 -/svn/!svn/ver/4172/trunk/test/functional +/svn/!svn/ver/4411/trunk/test/functional END issues_controller_test.rb K 25 svn:wc:ra_dav:version-url V 66 -/svn/!svn/ver/4083/trunk/test/functional/issues_controller_test.rb +/svn/!svn/ver/4411/trunk/test/functional/issues_controller_test.rb END news_controller_test.rb K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/4172/trunk/test/functional/news_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/news_controller_test.rb END queries_controller_test.rb K 25 @@ -43,19 +43,19 @@ K 25 svn:wc:ra_dav:version-url V 65 -/svn/!svn/ver/3435/trunk/test/functional/roles_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/roles_controller_test.rb END my_controller_test.rb K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/3217/trunk/test/functional/my_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/my_controller_test.rb END comments_controller_test.rb K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/4172/trunk/test/functional/comments_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/comments_controller_test.rb END wikis_controller_test.rb K 25 @@ -79,19 +79,25 @@ K 25 svn:wc:ra_dav:version-url V 73 -/svn/!svn/ver/4055/trunk/test/functional/context_menus_controller_test.rb +/svn/!svn/ver/4242/trunk/test/functional/context_menus_controller_test.rb END account_controller_test.rb K 25 svn:wc:ra_dav:version-url V 67 -/svn/!svn/ver/3933/trunk/test/functional/account_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/account_controller_test.rb END calendars_controller_test.rb K 25 svn:wc:ra_dav:version-url V 69 -/svn/!svn/ver/3913/trunk/test/functional/calendars_controller_test.rb +/svn/!svn/ver/4245/trunk/test/functional/calendars_controller_test.rb +END +journals_controller_test.rb +K 25 +svn:wc:ra_dav:version-url +V 68 +/svn/!svn/ver/4034/trunk/test/functional/journals_controller_test.rb END workflows_controller_test.rb K 25 @@ -99,41 +105,41 @@ V 69 /svn/!svn/ver/3188/trunk/test/functional/workflows_controller_test.rb END -journals_controller_test.rb +time_entry_reports_controller_test.rb K 25 svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/4034/trunk/test/functional/journals_controller_test.rb +V 78 +/svn/!svn/ver/4232/trunk/test/functional/time_entry_reports_controller_test.rb END project_enumerations_controller_test.rb K 25 svn:wc:ra_dav:version-url V 80 -/svn/!svn/ver/4075/trunk/test/functional/project_enumerations_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/project_enumerations_controller_test.rb END gantts_controller_test.rb K 25 svn:wc:ra_dav:version-url V 66 -/svn/!svn/ver/4072/trunk/test/functional/gantts_controller_test.rb +/svn/!svn/ver/4280/trunk/test/functional/gantts_controller_test.rb +END +users_controller_test.rb +K 25 +svn:wc:ra_dav:version-url +V 65 +/svn/!svn/ver/4382/trunk/test/functional/users_controller_test.rb END issue_moves_controller_test.rb K 25 svn:wc:ra_dav:version-url V 71 -/svn/!svn/ver/3937/trunk/test/functional/issue_moves_controller_test.rb -END -users_controller_test.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/4066/trunk/test/functional/users_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/issue_moves_controller_test.rb END repositories_cvs_controller_test.rb K 25 svn:wc:ra_dav:version-url V 76 -/svn/!svn/ver/2887/trunk/test/functional/repositories_cvs_controller_test.rb +/svn/!svn/ver/4289/trunk/test/functional/repositories_cvs_controller_test.rb END application_controller_test.rb K 25 @@ -147,17 +153,23 @@ V 70 /svn/!svn/ver/4047/trunk/test/functional/activities_controller_test.rb END +search_controller_test.rb +K 25 +svn:wc:ra_dav:version-url +V 66 +/svn/!svn/ver/4407/trunk/test/functional/search_controller_test.rb +END ldap_auth_sources_controller.rb K 25 svn:wc:ra_dav:version-url V 72 /svn/!svn/ver/3744/trunk/test/functional/ldap_auth_sources_controller.rb END -search_controller_test.rb +messages_controller_test.rb K 25 svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3806/trunk/test/functional/search_controller_test.rb +V 68 +/svn/!svn/ver/4407/trunk/test/functional/messages_controller_test.rb END repositories_bazaar_controller_test.rb K 25 @@ -165,17 +177,11 @@ V 79 /svn/!svn/ver/2887/trunk/test/functional/repositories_bazaar_controller_test.rb END -messages_controller_test.rb -K 25 -svn:wc:ra_dav:version-url -V 68 -/svn/!svn/ver/3687/trunk/test/functional/messages_controller_test.rb -END attachments_controller_test.rb K 25 svn:wc:ra_dav:version-url V 71 -/svn/!svn/ver/3687/trunk/test/functional/attachments_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/attachments_controller_test.rb END sys_controller_test.rb K 25 @@ -187,7 +193,7 @@ K 25 svn:wc:ra_dav:version-url V 66 -/svn/!svn/ver/2989/trunk/test/functional/groups_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/groups_controller_test.rb END issues_controller_transaction_test.rb K 25 @@ -211,19 +217,19 @@ K 25 svn:wc:ra_dav:version-url V 72 -/svn/!svn/ver/3687/trunk/test/functional/repositories_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/repositories_controller_test.rb END projects_controller_test.rb K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/4070/trunk/test/functional/projects_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/projects_controller_test.rb END repositories_git_controller_test.rb K 25 svn:wc:ra_dav:version-url V 76 -/svn/!svn/ver/3828/trunk/test/functional/repositories_git_controller_test.rb +/svn/!svn/ver/4289/trunk/test/functional/repositories_git_controller_test.rb END members_controller_test.rb K 25 @@ -259,25 +265,25 @@ K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/3013/trunk/test/functional/settings_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/settings_controller_test.rb END timelog_controller_test.rb K 25 svn:wc:ra_dav:version-url V 67 -/svn/!svn/ver/4087/trunk/test/functional/timelog_controller_test.rb +/svn/!svn/ver/4250/trunk/test/functional/timelog_controller_test.rb END documents_controller_test.rb K 25 svn:wc:ra_dav:version-url V 69 -/svn/!svn/ver/3788/trunk/test/functional/documents_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/documents_controller_test.rb END files_controller_test.rb K 25 svn:wc:ra_dav:version-url V 65 -/svn/!svn/ver/4085/trunk/test/functional/files_controller_test.rb +/svn/!svn/ver/4407/trunk/test/functional/files_controller_test.rb END repositories_darcs_controller_test.rb K 25 @@ -289,7 +295,7 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/3686/trunk/test/functional/wiki_controller_test.rb +/svn/!svn/ver/4375/trunk/test/functional/wiki_controller_test.rb END auth_sources_controller_test.rb K 25 @@ -301,13 +307,13 @@ K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/3946/trunk/test/functional/previews_controller_test.rb +/svn/!svn/ver/4174/trunk/test/functional/previews_controller_test.rb END repositories_subversion_controller_test.rb K 25 svn:wc:ra_dav:version-url V 83 -/svn/!svn/ver/3800/trunk/test/functional/repositories_subversion_controller_test.rb +/svn/!svn/ver/4289/trunk/test/functional/repositories_subversion_controller_test.rb END issue_relations_controller_test.rb K 25 @@ -319,7 +325,7 @@ K 25 svn:wc:ra_dav:version-url V 68 -/svn/!svn/ver/4097/trunk/test/functional/versions_controller_test.rb +/svn/!svn/ver/4354/trunk/test/functional/versions_controller_test.rb END enumerations_controller_test.rb K 25
--- a/test/functional/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/functional http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-17T18:27:38.712585Z +4411 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:25.875739Z -07a21279794955753d580c1ae2e523fb -2010-09-11T20:21:27.018967Z -4083 -jbbarth +2010-11-19T13:04:41.460658Z +63b42848e4b9c141f6081fb9b5187e91 +2010-11-17T18:27:38.712585Z +4411 +jplang has-props @@ -58,7 +58,7 @@ -38747 +46917 news_controller_test.rb file @@ -66,11 +66,11 @@ -2010-09-24T12:48:25.875739Z -1c72a2e1843e72e60be2f30f97197b91 -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-19T13:04:41.460658Z +0673b926675d6ac108f0af70a8f609f4 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -92,7 +92,7 @@ -4365 +3948 queries_controller_test.rb file @@ -236,11 +236,11 @@ -2010-09-23T14:37:45.423771Z -e2ab383bae04b68e626c1f5f9a196bfb -2010-02-15T16:41:16.346582Z -3435 -edavis10 +2010-11-19T13:04:41.460658Z +7258b2945e07b02349515daea0f85ce7 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -262,7 +262,7 @@ -6078 +6089 my_controller_test.rb file @@ -270,11 +270,11 @@ -2010-09-23T14:37:45.387766Z -23fcfd5e58263663f9a6507566e6fe2d -2009-12-23T06:27:28.577661Z -3217 -edavis10 +2010-11-19T13:04:41.464645Z +cbb9551bd925ce88a319d20ca2b127ab +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -296,7 +296,7 @@ -6205 +6207 comments_controller_test.rb file @@ -304,33 +304,33 @@ -2010-09-24T12:48:25.875739Z -70dea926748aacbab944bce556c551c6 -2010-09-23T15:20:19.085385Z -4172 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2027 +2010-11-19T13:04:41.464645Z +8a36a09743e192b6be46bb008ac7297e +2010-11-14T16:45:32.457767Z +4407 +jplang + + + + + + + + + + + + + + + + + + + + + +2030 wikis_controller_test.rb file @@ -440,10 +440,10 @@ -2010-09-24T12:48:25.875739Z -c73a61b28b04990574ae25575051aa52 -2010-09-03T19:54:24.083210Z -4055 +2010-11-19T13:04:41.464645Z +96877cbbea85ba3fd99502907477340f +2010-10-08T03:09:51.863032Z +4242 jbbarth @@ -466,7 +466,7 @@ -5093 +6032 account_controller_test.rb file @@ -474,11 +474,11 @@ -2010-09-23T14:37:45.383766Z -01299f951a82e5acf560044b7e89b5ab -2010-08-10T21:12:32.103531Z -3933 -jbbarth +2010-11-19T13:04:41.464645Z +a907569b5ac8764a0d6db597aa736851 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -500,7 +500,7 @@ -7329 +7335 calendars_controller_test.rb file @@ -508,10 +508,10 @@ -2010-09-23T14:37:45.383766Z -998bc7746491ec2c407187c5c7646990 -2010-08-04T15:04:30.993800Z -3913 +2010-11-19T13:04:41.464645Z +ff8293f6d80647d3d03c66072bde5c98 +2010-10-10T21:17:10.784165Z +4245 edavis10 @@ -534,7 +534,41 @@ -2188 +2385 + +workflows_controller_test.rb +file + + + + +2010-09-23T14:37:45.427769Z +be835c79372fac52c849870791d982ff +2009-12-18T15:41:32.828284Z +3188 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +6668 journals_controller_test.rb file @@ -570,39 +604,39 @@ 2642 -workflows_controller_test.rb +time_entry_reports_controller_test.rb file -2010-09-23T14:37:45.427769Z -be835c79372fac52c849870791d982ff -2009-12-18T15:41:32.828284Z -3188 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6668 +2010-11-19T13:04:41.464645Z +89c906bd5446b26ea9463b90cebaa807 +2010-10-05T16:07:17.015270Z +4232 +edavis10 + + + + + + + + + + + + + + + + + + + + + +5419 project_enumerations_controller_test.rb file @@ -610,33 +644,33 @@ -2010-09-24T12:48:25.875739Z -abb9be62ab6ed5867d6070fd14ffd31d -2010-09-10T16:00:49.687515Z -4075 -edavis10 - - - - - - - - - - - - - - - - - - - - - -9530 +2010-11-19T13:04:41.464645Z +37775addcfb51a3ce3d8cddc3b1e907a +2010-11-14T16:45:32.457767Z +4407 +jplang + + + + + + + + + + + + + + + + + + + + + +9534 gantts_controller_test.rb file @@ -644,33 +678,67 @@ -2010-09-24T12:48:25.875739Z -fb255e043b31b095c741248bc5a9a287 -2010-09-10T03:09:02.311267Z -4072 -edavis10 - - - - - - - - - - - - - - - - - - - - - -1716 +2010-11-19T13:04:41.464645Z +3037031df4af4a9e2e77bd75083a4bcc +2010-10-22T22:13:39.617506Z +4280 +jplang + + + + + + + + + + + + + + + + + + + + + +2272 + +issue_moves_controller_test.rb +file + + + + +2010-11-19T13:04:41.464645Z +79f29b51a76072a1272e3ec50bec0e0f +2010-11-14T16:45:32.457767Z +4407 +jplang + + + + + + + + + + + + + + + + + + + + + +5098 users_controller_test.rb file @@ -678,11 +746,11 @@ -2010-09-24T12:48:25.875739Z -bc114889d45857af9ea3a87862f6f0e5 -2010-09-06T01:02:52.851079Z -4066 -edavis10 +2010-11-19T13:04:41.464645Z +79742c00eadbe609d9abb6317856022f +2010-11-07T14:15:01.891476Z +4382 +jplang has-props @@ -704,41 +772,7 @@ -5574 - -issue_moves_controller_test.rb -file - - - - -2010-09-23T14:37:45.387766Z -54756d7f1e65c8d37dca5b41aac6e3ae -2010-08-12T13:57:46.562058Z -3937 -edavis10 - - - - - - - - - - - - - - - - - - - - - -4304 +7363 repositories_cvs_controller_test.rb file @@ -746,10 +780,10 @@ -2010-09-23T14:37:45.419982Z -e8d80bc0ee812d5226adf9c1d952ece8 -2009-09-13T17:14:35.707881Z -2887 +2010-11-19T13:04:41.468647Z +e01a04614a9b23c31bb216e61c81759d +2010-10-25T15:42:41.795656Z +4289 edavis10 has-props @@ -772,7 +806,7 @@ -6556 +6562 application_controller_test.rb file @@ -842,6 +876,40 @@ 2695 +search_controller_test.rb +file + + + + +2010-11-19T13:04:41.468647Z +2e14f0628773a6ad6b3b59b3429d187d +2010-11-14T16:45:32.457767Z +4407 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +4675 + ldap_auth_sources_controller.rb file @@ -876,17 +944,17 @@ 491 -search_controller_test.rb +messages_controller_test.rb file -2010-09-23T14:37:45.423771Z -9dc6da996eea99b8108da65990ef6be3 -2010-06-20T20:01:32.722003Z -3806 -edavis10 +2010-11-19T13:04:41.468647Z +4514c9f19bf7270410fbf05098128346 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -908,7 +976,7 @@ -4674 +5042 repositories_bazaar_controller_test.rb file @@ -944,51 +1012,17 @@ 5054 -messages_controller_test.rb -file - - - - -2010-09-23T14:37:45.387766Z -e70455a2b4bd135f10862b69df7a70bf -2010-04-21T16:02:55.125733Z -3687 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -5038 - attachments_controller_test.rb file -2010-09-23T14:37:45.383766Z -25de9e7d8cc73997221a567f9ae1c363 -2010-04-21T16:02:55.125733Z -3687 -edavis10 +2010-11-19T13:04:41.468647Z +06a5a66df669f08e5f357931edb12db1 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -1010,7 +1044,7 @@ -4244 +4245 sys_controller_test.rb file @@ -1052,10 +1086,10 @@ -2010-09-23T14:37:45.383766Z -440543b92d6281235fa9a3ec7b569514 -2009-10-29T18:40:00.797736Z -2989 +2010-11-19T13:04:41.468647Z +708f3fdb0cee16797fdd197cc5de756e +2010-11-14T16:45:32.457767Z +4407 jplang has-props @@ -1078,7 +1112,7 @@ -3014 +3017 issues_controller_transaction_test.rb file @@ -1188,11 +1222,11 @@ -2010-09-23T14:37:45.419982Z -d89f24390b27494109c2e4b393fbce7c -2010-04-21T16:02:55.125733Z -3687 -edavis10 +2010-11-19T13:04:41.468647Z +8e3650db9518fe44471fc80fbb6dbd21 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -1214,7 +1248,7 @@ -4569 +4570 projects_controller_test.rb file @@ -1222,11 +1256,11 @@ -2010-09-24T12:48:25.875739Z -8a06ffc175377efeb3bac6e70067fa45 -2010-09-08T16:01:51.939478Z -4070 -edavis10 +2010-11-19T13:04:41.468647Z +c4b243a5a18c509cc65794be84ffd752 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -1248,7 +1282,7 @@ -14899 +15977 members_controller_test.rb file @@ -1290,10 +1324,10 @@ -2010-09-23T14:37:45.423771Z -c2447def1a06fe360c98745749ef2066 -2010-07-06T02:07:46.557097Z -3828 +2010-11-19T13:04:41.472627Z +f64a33705a8376f5a398502f116c0db4 +2010-10-25T15:42:41.795656Z +4289 edavis10 has-props @@ -1316,7 +1350,7 @@ -6470 +6689 repositories_mercurial_controller_test.rb file @@ -1460,10 +1494,10 @@ -2010-09-23T14:37:45.423771Z -580f9a678b8f7f505a52b444d5f70dba -2009-11-07T08:44:56.035544Z -3013 +2010-11-19T13:04:41.472627Z +cc2bc5f554f121c21ba82c60216f01d5 +2010-11-14T16:45:32.457767Z +4407 jplang has-props @@ -1486,7 +1520,7 @@ -2121 +2122 timelog_controller_test.rb file @@ -1494,10 +1528,10 @@ -2010-09-24T12:48:25.879729Z -478bfd41fe3ea1d3f9d2c91b26ee7a62 -2010-09-14T19:02:25.847894Z -4087 +2010-11-19T13:04:41.472627Z +be5f7d864581bed744c8991964a97ae6 +2010-10-12T15:55:21.984670Z +4250 edavis10 has-props @@ -1520,7 +1554,7 @@ -13631 +8487 documents_controller_test.rb file @@ -1528,11 +1562,11 @@ -2010-09-23T14:37:45.383766Z -6d6a011a4f7f17ccff7b514eac561ce8 -2010-06-19T22:17:34.496523Z -3788 -edavis10 +2010-11-19T13:04:41.472627Z +e92d7b72633aaca649a4df81ea39305a +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -1554,7 +1588,7 @@ -4670 +4672 files_controller_test.rb file @@ -1562,33 +1596,33 @@ -2010-09-24T12:48:25.879729Z -5d12ff23b3756ee66c539417f2d5dedc -2010-09-14T16:24:07.840869Z -4085 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2306 +2010-11-19T13:04:41.472627Z +1682b4116f36633c8816d1dff0d49cb5 +2010-11-14T16:45:32.457767Z +4407 +jplang + + + + + + + + + + + + + + + + + + + + + +2308 repositories_darcs_controller_test.rb file @@ -1630,11 +1664,11 @@ -2010-09-23T14:37:45.427769Z -5e11aaeb4ee3d552c2668034c201d6e2 -2010-04-20T15:42:57.800422Z -3686 -edavis10 +2010-11-19T13:04:41.472627Z +35fe09d5b7c9ad179df6c1aa5d09e25d +2010-11-06T14:30:32.528294Z +4375 +jplang has-props @@ -1656,7 +1690,7 @@ -13195 +16321 auth_sources_controller_test.rb file @@ -1698,10 +1732,10 @@ -2010-09-23T14:37:45.387766Z -7bac137a145f14ca591811bb76d56bee -2010-08-18T15:01:35.032314Z -3946 +2010-11-19T13:04:41.472627Z +055c4c3716d7eb1d123482c20d453a67 +2010-09-24T16:26:46.819682Z +4174 edavis10 @@ -1724,7 +1758,7 @@ -688 +1101 repositories_subversion_controller_test.rb file @@ -1732,10 +1766,10 @@ -2010-09-23T14:37:45.423771Z -3a3e1acd6e8097c938879aca2284280b -2010-06-20T16:08:26.745839Z -3800 +2010-11-19T13:04:41.472627Z +78fad597ea49ad0dfc7d71f2d33c381f +2010-10-25T15:42:41.795656Z +4289 edavis10 has-props @@ -1758,7 +1792,7 @@ -8790 +8796 issue_relations_controller_test.rb file @@ -1800,11 +1834,11 @@ -2010-09-24T12:48:25.879729Z -0ec41a16228288272bc26862cb87c358 -2010-09-17T15:55:08.377083Z -4097 -edavis10 +2010-11-19T13:04:41.476627Z +dcafef0668ab2fa1356e11ec2651965e +2010-11-01T13:13:32.982466Z +4354 +jplang has-props @@ -1826,7 +1860,7 @@ -5035 +5338 enumerations_controller_test.rb file
--- a/test/functional/.svn/text-base/account_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/account_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -64,7 +64,7 @@ assert existing_user.save! post :login, :openid_url => existing_user.identity_url - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' end def test_login_with_invalid_openid_provider @@ -86,14 +86,14 @@ assert existing_user.save! post :login, :openid_url => existing_user.identity_url - assert_redirected_to 'login' + assert_redirected_to '/login' end def test_login_with_openid_with_new_user_created Setting.self_registration = '3' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' user = User.find_by_login('cool_user') assert user assert_equal 'Cool', user.firstname @@ -113,7 +113,7 @@ Setting.self_registration = '1' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'login' + assert_redirected_to '/login' user = User.find_by_login('cool_user') assert user @@ -125,7 +125,7 @@ Setting.self_registration = '2' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'login' + assert_redirected_to '/login' user = User.find_by_login('cool_user') assert user assert_equal User::STATUS_REGISTERED, user.status @@ -157,7 +157,7 @@ def test_logout @request.session[:user_id] = 2 get :logout - assert_redirected_to '' + assert_redirected_to '/' assert_nil @request.session[:user_id] end
--- a/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/attachments_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -95,7 +95,7 @@ post :destroy, :id => 1 end # no referrer - assert_redirected_to 'projects/ecookbook' + assert_redirected_to '/projects/ecookbook' assert_nil Attachment.find_by_id(1) j = issue.journals.find(:first, :order => 'created_on DESC') assert_equal 'attachment', j.details.first.property
--- a/test/functional/.svn/text-base/calendars_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/calendars_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,16 @@ assert_template 'calendar' assert_not_nil assigns(:calendar) end + + context "GET :show" do + should "run custom queries" do + @query = Query.generate_default! + + get :show, :query_id => @query.id + assert_response :success + end + + end def test_week_number_calculation Setting.start_of_week = 7
--- a/test/functional/.svn/text-base/comments_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/comments_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ def test_add_comment @request.session[:user_id] = 2 post :create, :id => 1, :comment => { :comments => 'This is a test comment' } - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' comment = News.find(1).comments.find(:first, :order => 'created_on DESC') assert_not_nil comment @@ -40,7 +40,7 @@ assert_no_difference 'Comment.count' do post :create, :id => 1, :comment => { :comments => '' } assert_response :redirect - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' end end @@ -48,7 +48,7 @@ comments_count = News.find(1).comments.size @request.session[:user_id] = 2 delete :destroy, :id => 1, :comment_id => 2 - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' assert_nil Comment.find_by_id(2) assert_equal comments_count - 1, News.find(1).comments.size end
--- a/test/functional/.svn/text-base/context_menus_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/context_menus_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -79,14 +79,27 @@ :class => 'icon-del' } end - def test_context_menu_multiple_issues_of_different_project + def test_context_menu_multiple_issues_of_different_projects @request.session[:user_id] = 2 - get :issues, :ids => [1, 2, 4] + get :issues, :ids => [1, 2, 6] assert_response :success assert_template 'context_menu' + ids = "ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=6" + assert_tag :tag => 'a', :content => 'Edit', + :attributes => { :href => "/issues/bulk_edit?#{ids}", + :class => 'icon-edit' } + assert_tag :tag => 'a', :content => 'Closed', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bstatus_id%5D=5", + :class => '' } + assert_tag :tag => 'a', :content => 'Immediate', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bpriority_id%5D=8", + :class => '' } + assert_tag :tag => 'a', :content => 'John Smith', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bassigned_to_id%5D=2", + :class => '' } assert_tag :tag => 'a', :content => 'Delete', - :attributes => { :href => '#', - :class => 'icon-del disabled' } + :attributes => { :href => "/issues/destroy?#{ids}", + :class => 'icon-del' } end end
--- a/test/functional/.svn/text-base/documents_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/documents_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -77,7 +77,7 @@ :category_id => 2}, :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} - assert_redirected_to 'projects/ecookbook/documents' + assert_redirected_to '/projects/ecookbook/documents' document = Document.find_by_title('DocumentsControllerTest#test_post_new') assert_not_nil document @@ -90,7 +90,7 @@ def test_destroy @request.session[:user_id] = 2 post :destroy, :id => 1 - assert_redirected_to 'projects/ecookbook/documents' + assert_redirected_to '/projects/ecookbook/documents' assert_nil Document.find_by_id(1) end end
--- a/test/functional/.svn/text-base/files_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/files_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -37,7 +37,7 @@ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} assert_response :redirect end - assert_redirected_to 'projects/ecookbook/files' + assert_redirected_to '/projects/ecookbook/files' a = Attachment.find(:first, :order => 'created_on DESC') assert_equal 'testfile.txt', a.filename assert_equal Project.find(1), a.container @@ -58,7 +58,7 @@ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} assert_response :redirect end - assert_redirected_to 'projects/ecookbook/files' + assert_redirected_to '/projects/ecookbook/files' a = Attachment.find(:first, :order => 'created_on DESC') assert_equal 'testfile.txt', a.filename assert_equal Version.find(2), a.container
--- a/test/functional/.svn/text-base/gantts_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/gantts_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,25 @@ i = Issue.find(2) assert_select "div a.issue", /##{i.id}/ end + + should "work without issue due dates" do + Issue.update_all("due_date = NULL") + + get :show, :project_id => 1 + assert_response :success + assert_template 'show.html.erb' + assert_not_nil assigns(:gantt) + end + + should "work without issue and version due dates" do + Issue.update_all("due_date = NULL") + Version.update_all("effective_date = NULL") + + get :show, :project_id => 1 + assert_response :success + assert_template 'show.html.erb' + assert_not_nil assigns(:gantt) + end should "work cross project" do get :show
--- a/test/functional/.svn/text-base/groups_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/groups_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ assert_difference 'Group.count' do post :create, :group => {:lastname => 'New group'} end - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_edit @@ -65,14 +65,14 @@ def test_update post :update, :id => 10 - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_destroy assert_difference 'Group.count', -1 do post :destroy, :id => 10 end - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_add_users
--- a/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/issue_moves_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -40,6 +40,31 @@ assert_equal 2, Issue.find(2).tracker_id end + context "#create via bulk move" do + setup do + @request.session[:user_id] = 2 + end + + should "allow changing the issue priority" do + post :create, :ids => [1, 2], :priority_id => 6 + + assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook' + assert_equal 6, Issue.find(1).priority_id + assert_equal 6, Issue.find(2).priority_id + + end + + should "allow adding a note when moving" do + post :create, :ids => [1, 2], :notes => 'Moving two issues' + + assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook' + assert_equal 'Moving two issues', Issue.find(1).journals.last.notes + assert_equal 'Moving two issues', Issue.find(2).journals.last.notes + + end + + end + def test_bulk_copy_to_another_project @request.session[:user_id] = 2 assert_difference 'Issue.count', 2 do @@ -47,7 +72,7 @@ post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'} end end - assert_redirected_to 'projects/ecookbook/issues' + assert_redirected_to '/projects/ecookbook/issues' end context "#create via bulk copy" do
--- a/test/functional/.svn/text-base/issues_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/issues_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -125,11 +125,42 @@ assert_tag :tag => 'a', :content => /Issue of a private subproject/ end - def test_index_with_project_and_filter + def test_index_with_project_and_default_filter get :index, :project_id => 1, :set_filter => 1 assert_response :success assert_template 'index.rhtml' assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # default filter + assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters) + end + + def test_index_with_project_and_filter + get :index, :project_id => 1, :set_filter => 1, + :fields => ['tracker_id'], + :operators => {'tracker_id' => '='}, + :values => {'tracker_id' => ['1']} + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters) + end + + def test_index_with_project_and_empty_filters + get :index, :project_id => 1, :set_filter => 1, :fields => [''] + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # no filter + assert_equal({}, query.filters) end def test_index_with_query @@ -340,9 +371,7 @@ get :new, :project_id => 1 assert_response 500 - assert_not_nil flash[:error] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, - :content => /No default issue/ + assert_error_tag :content => /No default issue/ end def test_get_new_with_no_tracker_should_display_an_error @@ -351,9 +380,7 @@ get :new, :project_id => 1 assert_response 500 - assert_not_nil flash[:error] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, - :content => /No tracker/ + assert_error_tag :content => /No tracker/ end def test_update_new_form @@ -382,6 +409,7 @@ :subject => 'This is the test_new issue', :description => 'This is the description', :priority_id => 5, + :start_date => '2010-11-07', :estimated_hours => '', :custom_field_values => {'2' => 'Value for field 2'}} end @@ -392,12 +420,33 @@ assert_equal 2, issue.author_id assert_equal 3, issue.tracker_id assert_equal 2, issue.status_id + assert_equal Date.parse('2010-11-07'), issue.start_date assert_nil issue.estimated_hours v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2}) assert_not_nil v assert_equal 'Value for field 2', v.value end + def test_post_create_without_start_date + @request.session[:user_id] = 2 + assert_difference 'Issue.count' do + post :create, :project_id => 1, + :issue => {:tracker_id => 3, + :status_id => 2, + :subject => 'This is the test_new issue', + :description => 'This is the description', + :priority_id => 5, + :start_date => '', + :estimated_hours => '', + :custom_field_values => {'2' => 'Value for field 2'}} + end + assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id + + issue = Issue.find_by_subject('This is the test_new issue') + assert_not_nil issue + assert_nil issue.start_date + end + def test_post_create_and_continue @request.session[:user_id] = 2 post :create, :project_id => 1, @@ -531,7 +580,7 @@ context "without workflow privilege" do setup do Workflow.delete_all(["role_id = ?", Role.anonymous.id]) - Role.anonymous.add_permission! :add_issues + Role.anonymous.add_permission! :add_issues, :add_issue_notes end context "#new" do @@ -556,6 +605,17 @@ assert_equal IssueStatus.default, issue.status end + should "accept default status" do + assert_difference 'Issue.count' do + post :create, :project_id => 1, + :issue => {:tracker_id => 1, + :subject => 'This is an issue', + :status_id => 1} + end + issue = Issue.last(:order => 'id') + assert_equal IssueStatus.default, issue.status + end + should "ignore unauthorized status" do assert_difference 'Issue.count' do post :create, :project_id => 1, @@ -567,6 +627,94 @@ assert_equal IssueStatus.default, issue.status end end + + context "#update" do + should "ignore status change" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 1, Issue.find(1).status_id + end + + should "ignore attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal "Can't print recipes", issue.subject + assert_nil issue.assigned_to + end + end + end + + context "with workflow privilege" do + setup do + Workflow.delete_all(["role_id = ?", Role.anonymous.id]) + Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3) + Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) + Role.anonymous.add_permission! :add_issues, :add_issue_notes + end + + context "#update" do + should "accept authorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 3, Issue.find(1).status_id + end + + should "ignore unauthorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2} + end + assert_equal 1, Issue.find(1).status_id + end + + should "accept authorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal 2, issue.assigned_to_id + end + + should "ignore unauthorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'} + end + issue = Issue.find(1) + assert_equal "Can't print recipes", issue.subject + end + end + + context "and :edit_issues permission" do + setup do + Role.anonymous.add_permission! :add_issues, :edit_issues + end + + should "accept authorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 3, Issue.find(1).status_id + end + + should "ignore unauthorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2} + end + assert_equal 1, Issue.find(1).status_id + end + + should "accept authorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal "changed", issue.subject + assert_equal 2, issue.assigned_to_id + end + end end def test_copy_issue @@ -589,7 +737,8 @@ def test_get_edit_with_params @request.session[:user_id] = 2 - get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 } + get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }, + :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id } assert_response :success assert_template 'edit' @@ -607,6 +756,12 @@ :child => { :tag => 'option', :content => 'Urgent', :attributes => { :selected => 'selected' } } + + assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => '2.5' } + assert_tag :select, :attributes => { :name => 'time_entry[activity_id]' }, + :child => { :tag => 'option', + :attributes => { :selected => 'selected', :value => TimeEntryActivity.first.id } } + assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => 'test_get_edit_with_params' } end def test_update_edit_form @@ -911,6 +1066,19 @@ assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'} end + def test_get_bulk_edit_on_different_projects + @request.session[:user_id] = 2 + get :bulk_edit, :ids => [1, 2, 6] + assert_response :success + assert_template 'bulk_edit' + + # Project specific custom field, date type + field = CustomField.find(9) + assert !field.is_for_all? + assert !field.project_ids.include?(Issue.find(6).project_id) + assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'} + end + def test_bulk_update @request.session[:user_id] = 2 # update issues priority @@ -930,6 +1098,39 @@ assert_equal 1, journal.details.size end + def test_bulk_update_on_different_projects + @request.session[:user_id] = 2 + # update issues priority + post :bulk_update, :ids => [1, 2, 6], :notes => 'Bulk editing', + :issue => {:priority_id => 7, + :assigned_to_id => '', + :custom_field_values => {'2' => ''}} + + assert_response 302 + # check that the issues were updated + assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id) + + issue = Issue.find(1) + journal = issue.journals.find(:first, :order => 'created_on DESC') + assert_equal '125', issue.custom_value_for(2).value + assert_equal 'Bulk editing', journal.notes + assert_equal 1, journal.details.size + end + + def test_bulk_update_on_different_projects_without_rights + @request.session[:user_id] = 3 + user = User.find(3) + action = { :controller => "issues", :action => "bulk_update" } + assert user.allowed_to?(action, Issue.find(1).project) + assert ! user.allowed_to?(action, Issue.find(6).project) + post :bulk_update, :ids => [1, 6], :notes => 'Bulk should fail', + :issue => {:priority_id => 7, + :assigned_to_id => '', + :custom_field_values => {'2' => ''}} + assert_response 403 + assert_not_equal "Bulk should fail", Journal.last.notes + end + def test_bullk_update_should_send_a_notification @request.session[:user_id] = 2 ActionMailer::Base.deliveries.clear @@ -1061,6 +1262,13 @@ assert_equal 2, TimeEntry.find(2).issue_id end + def test_destroy_issues_from_different_projects + @request.session[:user_id] = 2 + post :destroy, :ids => [1, 2, 6], :todo => 'destroy' + assert_redirected_to :controller => 'issues', :action => 'index' + assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6)) + end + def test_default_search_scope get :index assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/.svn/text-base/messages_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/messages_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -87,7 +87,7 @@ :content => 'Message body'} message = Message.find_by_subject('Test created message') assert_not_nil message - assert_redirected_to "boards/1/topics/#{message.to_param}" + assert_redirected_to "/boards/1/topics/#{message.to_param}" assert_equal 'Message body', message.content assert_equal 2, message.author_id assert_equal 1, message.board_id @@ -114,7 +114,7 @@ post :edit, :board_id => 1, :id => 1, :message => { :subject => 'New subject', :content => 'New body'} - assert_redirected_to 'boards/1/topics/1' + assert_redirected_to '/boards/1/topics/1' message = Message.find(1) assert_equal 'New subject', message.subject assert_equal 'New body', message.content @@ -124,14 +124,14 @@ @request.session[:user_id] = 2 post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' } reply = Message.find(:first, :order => 'id DESC') - assert_redirected_to "boards/1/topics/1?r=#{reply.id}" + assert_redirected_to "/boards/1/topics/1?r=#{reply.id}" assert Message.find_by_subject('Test reply') end def test_destroy_topic @request.session[:user_id] = 2 post :destroy, :board_id => 1, :id => 1 - assert_redirected_to 'projects/ecookbook/boards/1' + assert_redirected_to '/projects/ecookbook/boards/1' assert_nil Message.find_by_id(1) end
--- a/test/functional/.svn/text-base/my_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/my_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -68,7 +68,7 @@ :login => "root", :admin => 1, :custom_field_values => {"4" => "0100562500"}} - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' user = User.find(2) assert_equal user, assigns(:user) assert_equal "Joe", user.firstname @@ -102,7 +102,7 @@ post :password, :password => 'jsmith', :new_password => 'hello', :new_password_confirmation => 'hello' - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' assert User.try_to_login('jsmith', 'hello') end
--- a/test/functional/.svn/text-base/news_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/news_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -73,7 +73,7 @@ post :create, :project_id => 1, :news => { :title => 'NewsControllerTest', :description => 'This is the description', :summary => '' } - assert_redirected_to 'projects/ecookbook/news' + assert_redirected_to '/projects/ecookbook/news' news = News.find_by_title('NewsControllerTest') assert_not_nil news @@ -93,7 +93,7 @@ def test_put_update @request.session[:user_id] = 2 put :update, :id => 1, :news => { :description => 'Description changed by test_post_edit' } - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' news = News.find(1) assert_equal 'Description changed by test_post_edit', news.description end @@ -113,19 +113,8 @@ def test_destroy @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to 'projects/ecookbook/news' + delete :destroy, :id => 1 + assert_redirected_to '/projects/ecookbook/news' assert_nil News.find_by_id(1) end - - def test_preview - get :preview, :project_id => 1, - :news => {:title => '', - :description => 'News description', - :summary => ''} - assert_response :success - assert_template 'common/_preview' - assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' }, - :content => /News description/ - end end
--- a/test/functional/.svn/text-base/previews_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/previews_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -19,4 +19,14 @@ assert_not_nil assigns(:notes) end + def test_news + get :news, :project_id => 1, + :news => {:title => '', + :description => 'News description', + :summary => ''} + assert_response :success + assert_template 'common/_preview' + assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' }, + :content => /News description/ + end end
--- a/test/functional/.svn/text-base/project_enumerations_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/project_enumerations_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -20,7 +20,7 @@ } assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' # Created project specific activities... project = Project.find('ecookbook') @@ -83,7 +83,7 @@ } assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' # Created project specific activities... project = Project.find('ecookbook') @@ -159,7 +159,7 @@ delete :destroy, :project_id => 1 assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' assert_nil TimeEntryActivity.find_by_id(project_activity.id) assert_nil TimeEntryActivity.find_by_id(project_activity_two.id) @@ -179,7 +179,7 @@ delete :destroy, :project_id => 1 assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' assert_nil TimeEntryActivity.find_by_id(project_activity.id) assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
--- a/test/functional/.svn/text-base/projects_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/projects_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -284,6 +284,18 @@ assert_template 'show' assert_not_nil assigns(:project) assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) + + assert_tag 'li', :content => /Development status/ + end + + def test_show_should_not_display_hidden_custom_fields + ProjectCustomField.find_by_name('Development status').update_attribute :visible, false + get :show, :id => 'ecookbook' + assert_response :success + assert_template 'show' + assert_not_nil assigns(:project) + + assert_no_tag 'li', :content => /Development status/ end def test_show_should_not_fail_when_custom_values_are_nil @@ -296,6 +308,16 @@ assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) end + def show_archived_project_should_be_denied + project = Project.find_by_identifier('ecookbook') + project.archive! + + get :show, :id => 'ecookbook' + assert_response 403 + assert_nil assigns(:project) + assert_tag :tag => 'p', :content => /archived/ + end + def test_private_subprojects_hidden get :show, :id => 'ecookbook' assert_response :success @@ -322,7 +344,7 @@ @request.session[:user_id] = 2 # manager post :update, :id => 1, :project => {:name => 'Test changed name', :issue_custom_field_ids => ['']} - assert_redirected_to 'projects/ecookbook/settings' + assert_redirected_to '/projects/ecookbook/settings' project = Project.find(1) assert_equal 'Test changed name', project.name end @@ -338,14 +360,14 @@ def test_post_destroy @request.session[:user_id] = 1 # admin post :destroy, :id => 1, :confirm => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert_nil Project.find_by_id(1) end def test_archive @request.session[:user_id] = 1 # admin post :archive, :id => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert !Project.find(1).active? end @@ -353,7 +375,7 @@ @request.session[:user_id] = 1 # admin Project.find(1).archive post :unarchive, :id => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert Project.find(1).active? end @@ -389,9 +411,20 @@ assert_redirected_to :controller => 'admin', :action => 'projects' end + context "POST :copy" do + should "TODO: test the rest of the method" + + should "redirect to the project settings when successful" do + @request.session[:user_id] = 1 # admin + post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'} + assert_response :redirect + assert_redirected_to :controller => 'projects', :action => 'settings' + end + end + def test_jump_should_redirect_to_active_tab get :show, :id => 1, :jump => 'issues' - assert_redirected_to 'projects/ecookbook/issues' + assert_redirected_to '/projects/ecookbook/issues' end def test_jump_should_not_redirect_to_inactive_tab
--- a/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/repositories_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -98,7 +98,7 @@ assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']} - assert_redirected_to 'projects/ecookbook/repository/committers' + assert_redirected_to '/projects/ecookbook/repository/committers' assert_equal User.find(2), c.reload.user end end
--- a/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -106,7 +106,7 @@ def test_entry_not_found get :entry, :id => 1, :path => ['sources', 'zzz.c'] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /The entry or revision was not found in the repository/ end
--- a/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -50,7 +50,7 @@ assert_response :success assert_template 'show' assert_not_nil assigns(:entries) - assert_equal 7, assigns(:entries).size + assert_equal 9, assigns(:entries).size assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'} assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'} assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'} @@ -58,6 +58,8 @@ assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'} assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'} assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'} + assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'} + assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'} end def test_browse_branch @@ -152,7 +154,7 @@ def test_annotate_binary_file get :annotate, :id => 3, :path => ['images', 'edit.png'] assert_response 500 - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /can not be annotated/ end else
--- a/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -129,7 +129,7 @@ def test_entry_not_found get :entry, :id => 1, :path => ['subversion_test', 'zzz.c'] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /The entry or revision was not found in the repository/ end
--- a/test/functional/.svn/text-base/roles_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/roles_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -65,7 +65,7 @@ :permissions => ['add_issues', 'edit_issues', 'log_time', ''], :assignable => '0'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find_by_name('RoleWithoutWorkflowCopy') assert_not_nil role assert_equal [:add_issues, :edit_issues, :log_time], role.permissions @@ -78,7 +78,7 @@ :assignable => '0'}, :copy_workflow_from => '1' - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find_by_name('RoleWithWorkflowCopy') assert_not_nil role assert_equal Role.find(1).workflows.size, role.workflows.size @@ -97,7 +97,7 @@ :permissions => ['edit_project', ''], :assignable => '0'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find(1) assert_equal [:edit_project], role.permissions end @@ -107,13 +107,13 @@ assert r.save post :destroy, :id => r - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_nil Role.find_by_id(r.id) end def test_destroy_role_in_use post :destroy, :id => 1 - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert flash[:error] == 'This role is in use and can not be deleted.' assert_not_nil Role.find_by_id(1) end @@ -139,7 +139,7 @@ def test_post_report post :report, :permissions => { '0' => '', '1' => ['edit_issues'], '3' => ['add_issues', 'delete_issues']} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal [:edit_issues], Role.find(1).permissions assert_equal [:add_issues, :delete_issues], Role.find(3).permissions @@ -148,33 +148,33 @@ def test_clear_all_permissions post :report, :permissions => { '0' => '' } - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert Role.find(1).permissions.empty? end def test_move_highest post :edit, :id => 3, :role => {:move_to => 'highest'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal 1, Role.find(3).position end def test_move_higher position = Role.find(3).position post :edit, :id => 3, :role => {:move_to => 'higher'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal position - 1, Role.find(3).position end def test_move_lower position = Role.find(2).position post :edit, :id => 2, :role => {:move_to => 'lower'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal position + 1, Role.find(2).position end def test_move_lowest post :edit, :id => 2, :role => {:move_to => 'lowest'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal Role.count, Role.find(2).position end end
--- a/test/functional/.svn/text-base/search_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/search_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -126,7 +126,7 @@ def test_quick_jump_to_issue # issue of a public project get :index, :q => "3" - assert_redirected_to 'issues/3' + assert_redirected_to '/issues/3' # issue of a private project get :index, :q => "4"
--- a/test/functional/.svn/text-base/settings_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/settings_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -50,7 +50,7 @@ :notified_events => %w(issue_added issue_updated news_added), :emails_footer => 'Test footer' } - assert_redirected_to 'settings/edit' + assert_redirected_to '/settings/edit' assert_equal 'functional@test.foo', Setting.mail_from assert !Setting.bcc_recipients? assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/functional/.svn/text-base/time_entry_reports_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +require File.dirname(__FILE__) + '/../test_helper' + +class TimeEntryReportsControllerTest < ActionController::TestCase + fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values + + def test_report_no_criteria + get :report, :project_id => 1 + assert_response :success + assert_template 'report' + end + + def test_report_all_projects + get :report + assert_response :success + assert_template 'report' + end + + def test_report_all_projects_denied + r = Role.anonymous + r.permissions.delete(:view_time_entries) + r.permissions_will_change! + r.save + get :report + assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport' + end + + def test_report_all_projects_one_criteria + get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "8.65", "%.2f" % assigns(:total_hours) + end + + def test_report_all_time + get :report, :project_id => 1, :criterias => ['project', 'issue'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + end + + def test_report_all_time_by_day + get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day' + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + assert_tag :tag => 'th', :content => '2007-03-12' + end + + def test_report_one_criteria + get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "8.65", "%.2f" % assigns(:total_hours) + end + + def test_report_two_criterias + get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + end + + def test_report_one_day + get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "4.25", "%.2f" % assigns(:total_hours) + end + + def test_report_at_issue_level + get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "154.25", "%.2f" % assigns(:total_hours) + end + + def test_report_custom_field_criteria + get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_not_nil assigns(:criterias) + assert_equal 3, assigns(:criterias).size + assert_equal "162.90", "%.2f" % assigns(:total_hours) + # Custom field column + assert_tag :tag => 'th', :content => 'Database' + # Custom field row + assert_tag :tag => 'td', :content => 'MySQL', + :sibling => { :tag => 'td', :attributes => { :class => 'hours' }, + :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' }, + :content => '1' }} + # Second custom field column + assert_tag :tag => 'th', :content => 'Billable' + end + + def test_report_one_criteria_no_result + get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "0.00", "%.2f" % assigns(:total_hours) + end + + def test_report_all_projects_csv_export + get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" + assert_response :success + assert_equal 'text/csv', @response.content_type + lines = @response.body.chomp.split("\n") + # Headers + assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first + # Total row + assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last + end + + def test_report_csv_export + get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" + assert_response :success + assert_equal 'text/csv', @response.content_type + lines = @response.body.chomp.split("\n") + # Headers + assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first + # Total row + assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last + end + +end
--- a/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/timelog_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -31,9 +31,9 @@ @response = ActionController::TestResponse.new end - def test_get_edit + def test_get_new @request.session[:user_id] = 3 - get :edit, :project_id => 1 + get :new, :project_id => 1 assert_response :success assert_template 'edit' # Default activity selected @@ -41,24 +41,24 @@ :content => 'Development' end + def test_get_new_should_only_show_active_time_entry_activities + @request.session[:user_id] = 3 + get :new, :project_id => 1 + assert_response :success + assert_template 'edit' + assert_no_tag :tag => 'option', :content => 'Inactive Activity' + + end + def test_get_edit_existing_time @request.session[:user_id] = 2 get :edit, :id => 2, :project_id => nil assert_response :success assert_template 'edit' # Default activity selected - assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/timelog/edit/2' } + assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/time_entries/2' } end - def test_get_edit_should_only_show_active_time_entry_activities - @request.session[:user_id] = 3 - get :edit, :project_id => 1 - assert_response :success - assert_template 'edit' - assert_no_tag :tag => 'option', :content => 'Inactive Activity' - - end - def test_get_edit_with_an_existing_time_entry_with_inactive_activity te = TimeEntry.find(1) te.activity = TimeEntryActivity.find_by_name("Inactive Activity") @@ -72,18 +72,18 @@ assert_tag :tag => 'option', :content => '--- Please select ---' end - def test_post_edit + def test_post_create # TODO: should POST to issues’ time log instead of project. change form # and routing @request.session[:user_id] = 3 - post :edit, :project_id => 1, + post :create, :project_id => 1, :time_entry => {:comments => 'Some work on TimelogControllerTest', # Not the default activity :activity_id => '11', :spent_on => '2008-03-14', :issue_id => '1', :hours => '7.3'} - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' i = Issue.find(1) t = TimeEntry.find_by_comments('Some work on TimelogControllerTest') @@ -101,10 +101,10 @@ assert_equal 2, entry.user_id @request.session[:user_id] = 1 - post :edit, :id => 1, + put :update, :id => 1, :time_entry => {:issue_id => '2', :hours => '8'} - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' entry.reload assert_equal 8, entry.hours @@ -114,8 +114,8 @@ def test_destroy @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + delete :destroy, :id => 1 + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal I18n.t(:notice_successful_delete), flash[:notice] assert_nil TimeEntry.find_by_id(1) end @@ -128,8 +128,8 @@ end @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + delete :destroy, :id => 1 + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error] assert_not_nil TimeEntry.find_by_id(1) @@ -137,145 +137,18 @@ TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain } end - def test_report_no_criteria - get :report, :project_id => 1 + def test_index_all_projects + get :index assert_response :success - assert_template 'report' - end - - def test_report_all_projects - get :report - assert_response :success - assert_template 'report' - end - - def test_report_all_projects_denied - r = Role.anonymous - r.permissions.delete(:view_time_entries) - r.permissions_will_change! - r.save - get :report - assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport' - end - - def test_report_all_projects_one_criteria - get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "8.65", "%.2f" % assigns(:total_hours) - end - - def test_report_all_time - get :report, :project_id => 1, :criterias => ['project', 'issue'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - end - - def test_report_all_time_by_day - get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day' - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - assert_tag :tag => 'th', :content => '2007-03-12' - end - - def test_report_one_criteria - get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "8.65", "%.2f" % assigns(:total_hours) - end - - def test_report_two_criterias - get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] - assert_response :success - assert_template 'report' + assert_template 'index' assert_not_nil assigns(:total_hours) assert_equal "162.90", "%.2f" % assigns(:total_hours) end - def test_report_one_day - get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"] + def test_index_at_project_level + get :index, :project_id => 1 assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "4.25", "%.2f" % assigns(:total_hours) - end - - def test_report_at_issue_level - get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "154.25", "%.2f" % assigns(:total_hours) - end - - def test_report_custom_field_criteria - get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_not_nil assigns(:criterias) - assert_equal 3, assigns(:criterias).size - assert_equal "162.90", "%.2f" % assigns(:total_hours) - # Custom field column - assert_tag :tag => 'th', :content => 'Database' - # Custom field row - assert_tag :tag => 'td', :content => 'MySQL', - :sibling => { :tag => 'td', :attributes => { :class => 'hours' }, - :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' }, - :content => '1' }} - # Second custom field column - assert_tag :tag => 'th', :content => 'Billable' - end - - def test_report_one_criteria_no_result - get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "0.00", "%.2f" % assigns(:total_hours) - end - - def test_report_all_projects_csv_export - get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" - assert_response :success - assert_equal 'text/csv', @response.content_type - lines = @response.body.chomp.split("\n") - # Headers - assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first - # Total row - assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last - end - - def test_report_csv_export - get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" - assert_response :success - assert_equal 'text/csv', @response.content_type - lines = @response.body.chomp.split("\n") - # Headers - assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first - # Total row - assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last - end - - def test_details_all_projects - get :details - assert_response :success - assert_template 'details' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - end - - def test_details_at_project_level - get :details, :project_id => 1 - assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 4, assigns(:entries).size # project and subproject @@ -287,10 +160,10 @@ assert_equal '2007-04-22'.to_date, assigns(:to) end - def test_details_at_project_level_with_date_range - get :details, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30' + def test_index_at_project_level_with_date_range + get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30' assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 3, assigns(:entries).size assert_not_nil assigns(:total_hours) @@ -299,28 +172,28 @@ assert_equal '2007-04-30'.to_date, assigns(:to) end - def test_details_at_project_level_with_period - get :details, :project_id => 1, :period => '7_days' + def test_index_at_project_level_with_period + get :index, :project_id => 1, :period => '7_days' assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_not_nil assigns(:total_hours) assert_equal Date.today - 7, assigns(:from) assert_equal Date.today, assigns(:to) end - def test_details_one_day - get :details, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23" + def test_index_one_day + get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23" assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:total_hours) assert_equal "4.25", "%.2f" % assigns(:total_hours) end - def test_details_at_issue_level - get :details, :issue_id => 1 + def test_index_at_issue_level + get :index, :issue_id => 1 assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 2, assigns(:entries).size assert_not_nil assigns(:total_hours) @@ -330,26 +203,26 @@ assert_equal '2007-04-22'.to_date, assigns(:to) end - def test_details_atom_feed - get :details, :project_id => 1, :format => 'atom' + def test_index_atom_feed + get :index, :project_id => 1, :format => 'atom' assert_response :success assert_equal 'application/atom+xml', @response.content_type assert_not_nil assigns(:items) assert assigns(:items).first.is_a?(TimeEntry) end - def test_details_all_projects_csv_export + def test_index_all_projects_csv_export Setting.date_format = '%m/%d/%Y' - get :details, :format => 'csv' + get :index, :format => 'csv' assert_response :success assert_equal 'text/csv', @response.content_type assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n") assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n") end - def test_details_csv_export + def test_index_csv_export Setting.date_format = '%m/%d/%Y' - get :details, :project_id => 1, :format => 'csv' + get :index, :project_id => 1, :format => 'csv' assert_response :success assert_equal 'text/csv', @response.content_type assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
--- a/test/functional/.svn/text-base/users_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/users_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -24,7 +24,7 @@ class UsersControllerTest < ActionController::TestCase include Redmine::I18n - fixtures :users, :projects, :members, :member_roles, :roles + fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values def setup @controller = UsersController.new @@ -65,6 +65,19 @@ assert_response :success assert_template 'show' assert_not_nil assigns(:user) + + assert_tag 'li', :content => /Phone number/ + end + + def test_show_should_not_display_hidden_custom_fields + @request.session[:user_id] = nil + UserCustomField.find_by_name('Phone number').update_attribute :visible, false + get :show, :id => 2 + assert_response :success + assert_template 'show' + assert_not_nil assigns(:user) + + assert_no_tag 'li', :content => /Phone number/ end def test_show_should_not_fail_when_custom_values_are_nil @@ -107,14 +120,65 @@ assert project_ids.include?(2) #private project admin can see end - def test_edit + context "GET :new" do + setup do + get :new + end + + should_assign_to :user + should_respond_with :success + should_render_template :new + end + + context "POST :create" do + context "when successful" do + setup do + post :create, :user => { + :firstname => 'John', + :lastname => 'Doe', + :login => 'jdoe', + :password => 'test', + :password_confirmation => 'test', + :mail => 'jdoe@gmail.com' + }, + :notification_option => 'none' + end + + should_assign_to :user + should_respond_with :redirect + should_redirect_to('user edit') { {:controller => 'users', :action => 'edit', :id => User.find_by_login('jdoe')}} + + should 'set the users mail notification' do + user = User.last + assert_equal 'none', user.mail_notification + end + end + + context "when unsuccessful" do + setup do + post :create, :user => {} + end + + should_assign_to :user + should_respond_with :success + should_render_template :new + end + + end + + def test_update ActionMailer::Base.deliveries.clear - post :edit, :id => 2, :user => {:firstname => 'Changed'} - assert_equal 'Changed', User.find(2).firstname + put :update, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'} + + user = User.find(2) + assert_equal 'Changed', user.firstname + assert_equal 'all', user.mail_notification + assert_equal true, user.pref[:hide_mail] + assert_equal 'desc', user.pref[:comments_sorting] assert ActionMailer::Base.deliveries.empty? end - def test_edit_with_activation_should_send_a_notification + def test_update_with_activation_should_send_a_notification u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr') u.login = 'foo' u.status = User::STATUS_REGISTERED @@ -122,7 +186,7 @@ ActionMailer::Base.deliveries.clear Setting.bcc_recipients = '1' - post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE} + put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE} assert u.reload.active? mail = ActionMailer::Base.deliveries.last assert_not_nil mail @@ -130,12 +194,12 @@ assert mail.body.include?(ll('fr', :notice_account_activated)) end - def test_edit_with_password_change_should_send_a_notification + def test_updat_with_password_change_should_send_a_notification ActionMailer::Base.deliveries.clear Setting.bcc_recipients = '1' u = User.find(2) - post :edit, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1' + put :update, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1' assert_equal User.hash_password('newpass'), u.reload.hashed_password mail = ActionMailer::Base.deliveries.last @@ -144,13 +208,13 @@ assert mail.body.include?('newpass') end - test "POST :edit with a password change to an AuthSource user switching to Internal authentication" do + test "put :update with a password change to an AuthSource user switching to Internal authentication" do # Configure as auth source u = User.find(2) u.auth_source = AuthSource.find(1) u.save! - post :edit, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass' + put :update, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass' assert_equal nil, u.reload.auth_source assert_equal User.hash_password('newpass'), u.reload.hashed_password
--- a/test/functional/.svn/text-base/versions_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/versions_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -123,6 +123,15 @@ assert_equal 'New version name', version.name assert_equal Date.today, version.effective_date end + + def test_post_update_with_validation_failure + @request.session[:user_id] = 2 + put :update, :id => 2, + :version => { :name => '', + :effective_date => Date.today.strftime("%Y-%m-%d")} + assert_response :success + assert_template 'edit' + end def test_destroy @request.session[:user_id] = 2
--- a/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/.svn/text-base/wiki_controller_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -32,7 +32,7 @@ end def test_show_start_page - get :index, :id => 'ecookbook' + get :show, :project_id => 'ecookbook' assert_response :success assert_template 'show' assert_tag :tag => 'h1', :content => /CookBook documentation/ @@ -45,7 +45,7 @@ end def test_show_page_with_name - get :index, :id => 1, :page => 'Another_page' + get :show, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'show' assert_tag :tag => 'h1', :content => /Another page/ @@ -60,32 +60,32 @@ page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar') page.save! - get :index, :id => 1, :page => 'Another_page' + get :show, :project_id => 1, :id => 'Another_page' assert_response :success assert_tag :tag => 'div', :attributes => {:id => 'sidebar'}, :content => /Side bar content for test_show_with_sidebar/ end def test_show_unexistent_page_without_edit_right - get :index, :id => 1, :page => 'Unexistent page' + get :show, :project_id => 1, :id => 'Unexistent page' assert_response 404 end def test_show_unexistent_page_with_edit_right @request.session[:user_id] = 2 - get :index, :id => 1, :page => 'Unexistent page' + get :show, :project_id => 1, :id => 'Unexistent page' assert_response :success assert_template 'edit' end def test_create_page @request.session[:user_id] = 2 - post :edit, :id => 1, - :page => 'New page', + put :update, :project_id => 1, + :id => 'New page', :content => {:comments => 'Created the page', :text => "h1. New page\n\nThis is a new page", :version => 0} - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'New_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'New_page' page = Project.find(1).wiki.find_page('New page') assert !page.new_record? assert_not_nil page.content @@ -96,8 +96,8 @@ @request.session[:user_id] = 2 assert_difference 'WikiPage.count' do assert_difference 'Attachment.count' do - post :edit, :id => 1, - :page => 'New page', + put :update, :project_id => 1, + :id => 'New page', :content => {:comments => 'Created the page', :text => "h1. New page\n\nThis is a new page", :version => 0}, @@ -111,7 +111,7 @@ def test_preview @request.session[:user_id] = 2 - xhr :post, :preview, :id => 1, :page => 'CookBook_documentation', + xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation', :content => { :comments => '', :text => 'this is a *previewed text*', :version => 3 } @@ -122,7 +122,7 @@ def test_preview_new_page @request.session[:user_id] = 2 - xhr :post, :preview, :id => 1, :page => 'New page', + xhr :post, :preview, :project_id => 1, :id => 'New page', :content => { :text => 'h1. New page', :comments => '', :version => 0 } @@ -132,7 +132,7 @@ end def test_history - get :history, :id => 1, :page => 'CookBook_documentation' + get :history, :project_id => 1, :id => 'CookBook_documentation' assert_response :success assert_template 'history' assert_not_nil assigns(:versions) @@ -141,7 +141,7 @@ end def test_history_with_one_version - get :history, :id => 1, :page => 'Another_page' + get :history, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'history' assert_not_nil assigns(:versions) @@ -150,7 +150,7 @@ end def test_diff - get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1 + get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1 assert_response :success assert_template 'diff' assert_tag :tag => 'span', :attributes => { :class => 'diff_in'}, @@ -158,7 +158,7 @@ end def test_annotate - get :annotate, :id => 1, :page => 'CookBook_documentation', :version => 2 + get :annotate, :project_id => 1, :id => 'CookBook_documentation', :version => 2 assert_response :success assert_template 'annotate' # Line 1 @@ -170,13 +170,45 @@ :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ }, :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ } end + + def test_get_rename + @request.session[:user_id] = 2 + get :rename, :project_id => 1, :id => 'Another_page' + assert_response :success + assert_template 'rename' + assert_tag 'option', + :attributes => {:value => ''}, + :content => '', + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + assert_no_tag 'option', + :attributes => {:selected => 'selected'}, + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + end + + def test_get_rename_child_page + @request.session[:user_id] = 2 + get :rename, :project_id => 1, :id => 'Child_1' + assert_response :success + assert_template 'rename' + assert_tag 'option', + :attributes => {:value => ''}, + :content => '', + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + assert_tag 'option', + :attributes => {:value => '2', :selected => 'selected'}, + :content => /Another page/, + :parent => { + :tag => 'select', + :attributes => {:name => 'wiki_page[parent_id]'} + } + end def test_rename_with_redirect @request.session[:user_id] = 2 - post :rename, :id => 1, :page => 'Another_page', + post :rename, :project_id => 1, :id => 'Another_page', :wiki_page => { :title => 'Another renamed page', :redirect_existing_links => 1 } - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page' wiki = Project.find(1).wiki # Check redirects assert_not_nil wiki.find_page('Another page') @@ -185,25 +217,41 @@ def test_rename_without_redirect @request.session[:user_id] = 2 - post :rename, :id => 1, :page => 'Another_page', + post :rename, :project_id => 1, :id => 'Another_page', :wiki_page => { :title => 'Another renamed page', :redirect_existing_links => "0" } - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page' wiki = Project.find(1).wiki # Check that there's no redirects assert_nil wiki.find_page('Another page') end + def test_rename_with_parent_assignment + @request.session[:user_id] = 2 + post :rename, :project_id => 1, :id => 'Another_page', + :wiki_page => { :title => 'Another page', :redirect_existing_links => "0", :parent_id => '4' } + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page' + assert_equal WikiPage.find(4), WikiPage.find_by_title('Another_page').parent + end + + def test_rename_with_parent_unassignment + @request.session[:user_id] = 2 + post :rename, :project_id => 1, :id => 'Child_1', + :wiki_page => { :title => 'Child 1', :redirect_existing_links => "0", :parent_id => '' } + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1' + assert_nil WikiPage.find_by_title('Child_1').parent + end + def test_destroy_child @request.session[:user_id] = 2 - post :destroy, :id => 1, :page => 'Child_1' - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + delete :destroy, :project_id => 1, :id => 'Child_1' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' end def test_destroy_parent @request.session[:user_id] = 2 assert_no_difference('WikiPage.count') do - post :destroy, :id => 1, :page => 'Another_page' + delete :destroy, :project_id => 1, :id => 'Another_page' end assert_response :success assert_template 'destroy' @@ -212,18 +260,18 @@ def test_destroy_parent_with_nullify @request.session[:user_id] = 2 assert_difference('WikiPage.count', -1) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'nullify' + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'nullify' end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) end def test_destroy_parent_with_cascade @request.session[:user_id] = 2 assert_difference('WikiPage.count', -3) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'destroy' + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'destroy' end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) assert_nil WikiPage.find_by_id(5) end @@ -231,17 +279,17 @@ def test_destroy_parent_with_reassign @request.session[:user_id] = 2 assert_difference('WikiPage.count', -1) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1 + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'reassign', :reassign_to_id => 1 end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent end - def test_page_index - get :special, :id => 'ecookbook', :page => 'Page_index' + def test_index + get :index, :project_id => 'ecookbook' assert_response :success - assert_template 'special_page_index' + assert_template 'index' pages = assigns(:pages) assert_not_nil pages assert_equal Project.find(1).wiki.pages.size, pages.size @@ -256,9 +304,49 @@ :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Another_page' }, :content => 'Another page' } } end + + context "GET :export" do + context "with an authorized user to export the wiki" do + setup do + @request.session[:user_id] = 2 + get :export, :project_id => 'ecookbook' + end + + should_respond_with :success + should_assign_to :pages + should_respond_with_content_type "text/html" + should "export all of the wiki pages to a single html file" do + assert_select "a[name=?]", "CookBook_documentation" + assert_select "a[name=?]", "Another_page" + assert_select "a[name=?]", "Page_with_an_inline_image" + end + + end + + context "with an unauthorized user" do + setup do + get :export, :project_id => 'ecookbook' + + should_respond_with :redirect + should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :id => nil} } + end + end + end + + context "GET :date_index" do + setup do + get :date_index, :project_id => 'ecookbook' + end + + should_respond_with :success + should_assign_to :pages + should_assign_to :pages_by_date + should_render_template 'wiki/date_index' + + end def test_not_found - get :index, :id => 999 + get :show, :project_id => 999 assert_response 404 end @@ -266,8 +354,8 @@ page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page') assert !page.protected? @request.session[:user_id] = 2 - post :protect, :id => 1, :page => page.title, :protected => '1' - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_page' + post :protect, :project_id => 1, :id => page.title, :protected => '1' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page' assert page.reload.protected? end @@ -275,14 +363,14 @@ page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation') assert page.protected? @request.session[:user_id] = 2 - post :protect, :id => 1, :page => page.title, :protected => '0' - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'CookBook_documentation' + post :protect, :project_id => 1, :id => page.title, :protected => '0' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation' assert !page.reload.protected? end def test_show_page_with_edit_link @request.session[:user_id] = 2 - get :index, :id => 1 + get :show, :project_id => 1 assert_response :success assert_template 'show' assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } @@ -290,7 +378,7 @@ def test_show_page_without_edit_link @request.session[:user_id] = 4 - get :index, :id => 1 + get :show, :project_id => 1 assert_response :success assert_template 'show' assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } @@ -299,7 +387,7 @@ def test_edit_unprotected_page # Non members can edit unprotected wiki pages @request.session[:user_id] = 4 - get :edit, :id => 1, :page => 'Another_page' + get :edit, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'edit' end @@ -307,19 +395,19 @@ def test_edit_protected_page_by_nonmember # Non members can't edit protected wiki pages @request.session[:user_id] = 4 - get :edit, :id => 1, :page => 'CookBook_documentation' + get :edit, :project_id => 1, :id => 'CookBook_documentation' assert_response 403 end def test_edit_protected_page_by_member @request.session[:user_id] = 2 - get :edit, :id => 1, :page => 'CookBook_documentation' + get :edit, :project_id => 1, :id => 'CookBook_documentation' assert_response :success assert_template 'edit' end def test_history_of_non_existing_page_should_return_404 - get :history, :id => 1, :page => 'Unknown_page' + get :history, :project_id => 1, :id => 'Unknown_page' assert_response 404 end end
--- a/test/functional/account_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/account_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -64,7 +64,7 @@ assert existing_user.save! post :login, :openid_url => existing_user.identity_url - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' end def test_login_with_invalid_openid_provider @@ -86,14 +86,14 @@ assert existing_user.save! post :login, :openid_url => existing_user.identity_url - assert_redirected_to 'login' + assert_redirected_to '/login' end def test_login_with_openid_with_new_user_created Setting.self_registration = '3' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' user = User.find_by_login('cool_user') assert user assert_equal 'Cool', user.firstname @@ -113,7 +113,7 @@ Setting.self_registration = '1' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'login' + assert_redirected_to '/login' user = User.find_by_login('cool_user') assert user @@ -125,7 +125,7 @@ Setting.self_registration = '2' Setting.openid = '1' post :login, :openid_url => 'http://openid.example.com/good_user' - assert_redirected_to 'login' + assert_redirected_to '/login' user = User.find_by_login('cool_user') assert user assert_equal User::STATUS_REGISTERED, user.status @@ -157,7 +157,7 @@ def test_logout @request.session[:user_id] = 2 get :logout - assert_redirected_to '' + assert_redirected_to '/' assert_nil @request.session[:user_id] end
--- a/test/functional/attachments_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/attachments_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -95,7 +95,7 @@ post :destroy, :id => 1 end # no referrer - assert_redirected_to 'projects/ecookbook' + assert_redirected_to '/projects/ecookbook' assert_nil Attachment.find_by_id(1) j = issue.journals.find(:first, :order => 'created_on DESC') assert_equal 'attachment', j.details.first.property
--- a/test/functional/calendars_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/calendars_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -16,6 +16,16 @@ assert_template 'calendar' assert_not_nil assigns(:calendar) end + + context "GET :show" do + should "run custom queries" do + @query = Query.generate_default! + + get :show, :query_id => @query.id + assert_response :success + end + + end def test_week_number_calculation Setting.start_of_week = 7
--- a/test/functional/comments_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/comments_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ def test_add_comment @request.session[:user_id] = 2 post :create, :id => 1, :comment => { :comments => 'This is a test comment' } - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' comment = News.find(1).comments.find(:first, :order => 'created_on DESC') assert_not_nil comment @@ -40,7 +40,7 @@ assert_no_difference 'Comment.count' do post :create, :id => 1, :comment => { :comments => '' } assert_response :redirect - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' end end @@ -48,7 +48,7 @@ comments_count = News.find(1).comments.size @request.session[:user_id] = 2 delete :destroy, :id => 1, :comment_id => 2 - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' assert_nil Comment.find_by_id(2) assert_equal comments_count - 1, News.find(1).comments.size end
--- a/test/functional/context_menus_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/context_menus_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -79,14 +79,27 @@ :class => 'icon-del' } end - def test_context_menu_multiple_issues_of_different_project + def test_context_menu_multiple_issues_of_different_projects @request.session[:user_id] = 2 - get :issues, :ids => [1, 2, 4] + get :issues, :ids => [1, 2, 6] assert_response :success assert_template 'context_menu' + ids = "ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=6" + assert_tag :tag => 'a', :content => 'Edit', + :attributes => { :href => "/issues/bulk_edit?#{ids}", + :class => 'icon-edit' } + assert_tag :tag => 'a', :content => 'Closed', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bstatus_id%5D=5", + :class => '' } + assert_tag :tag => 'a', :content => 'Immediate', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bpriority_id%5D=8", + :class => '' } + assert_tag :tag => 'a', :content => 'John Smith', + :attributes => { :href => "/issues/bulk_edit?#{ids}&issue%5Bassigned_to_id%5D=2", + :class => '' } assert_tag :tag => 'a', :content => 'Delete', - :attributes => { :href => '#', - :class => 'icon-del disabled' } + :attributes => { :href => "/issues/destroy?#{ids}", + :class => 'icon-del' } end end
--- a/test/functional/documents_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/documents_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -77,7 +77,7 @@ :category_id => 2}, :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} - assert_redirected_to 'projects/ecookbook/documents' + assert_redirected_to '/projects/ecookbook/documents' document = Document.find_by_title('DocumentsControllerTest#test_post_new') assert_not_nil document @@ -90,7 +90,7 @@ def test_destroy @request.session[:user_id] = 2 post :destroy, :id => 1 - assert_redirected_to 'projects/ecookbook/documents' + assert_redirected_to '/projects/ecookbook/documents' assert_nil Document.find_by_id(1) end end
--- a/test/functional/files_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/files_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -37,7 +37,7 @@ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} assert_response :redirect end - assert_redirected_to 'projects/ecookbook/files' + assert_redirected_to '/projects/ecookbook/files' a = Attachment.find(:first, :order => 'created_on DESC') assert_equal 'testfile.txt', a.filename assert_equal Project.find(1), a.container @@ -58,7 +58,7 @@ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}} assert_response :redirect end - assert_redirected_to 'projects/ecookbook/files' + assert_redirected_to '/projects/ecookbook/files' a = Attachment.find(:first, :order => 'created_on DESC') assert_equal 'testfile.txt', a.filename assert_equal Version.find(2), a.container
--- a/test/functional/gantts_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/gantts_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,25 @@ i = Issue.find(2) assert_select "div a.issue", /##{i.id}/ end + + should "work without issue due dates" do + Issue.update_all("due_date = NULL") + + get :show, :project_id => 1 + assert_response :success + assert_template 'show.html.erb' + assert_not_nil assigns(:gantt) + end + + should "work without issue and version due dates" do + Issue.update_all("due_date = NULL") + Version.update_all("effective_date = NULL") + + get :show, :project_id => 1 + assert_response :success + assert_template 'show.html.erb' + assert_not_nil assigns(:gantt) + end should "work cross project" do get :show
--- a/test/functional/groups_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/groups_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -54,7 +54,7 @@ assert_difference 'Group.count' do post :create, :group => {:lastname => 'New group'} end - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_edit @@ -65,14 +65,14 @@ def test_update post :update, :id => 10 - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_destroy assert_difference 'Group.count', -1 do post :destroy, :id => 10 end - assert_redirected_to 'groups' + assert_redirected_to '/groups' end def test_add_users
--- a/test/functional/issue_moves_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/issue_moves_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -40,6 +40,31 @@ assert_equal 2, Issue.find(2).tracker_id end + context "#create via bulk move" do + setup do + @request.session[:user_id] = 2 + end + + should "allow changing the issue priority" do + post :create, :ids => [1, 2], :priority_id => 6 + + assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook' + assert_equal 6, Issue.find(1).priority_id + assert_equal 6, Issue.find(2).priority_id + + end + + should "allow adding a note when moving" do + post :create, :ids => [1, 2], :notes => 'Moving two issues' + + assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook' + assert_equal 'Moving two issues', Issue.find(1).journals.last.notes + assert_equal 'Moving two issues', Issue.find(2).journals.last.notes + + end + + end + def test_bulk_copy_to_another_project @request.session[:user_id] = 2 assert_difference 'Issue.count', 2 do @@ -47,7 +72,7 @@ post :create, :ids => [1, 2], :new_project_id => 2, :copy_options => {:copy => '1'} end end - assert_redirected_to 'projects/ecookbook/issues' + assert_redirected_to '/projects/ecookbook/issues' end context "#create via bulk copy" do
--- a/test/functional/issues_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/issues_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -125,11 +125,42 @@ assert_tag :tag => 'a', :content => /Issue of a private subproject/ end - def test_index_with_project_and_filter + def test_index_with_project_and_default_filter get :index, :project_id => 1, :set_filter => 1 assert_response :success assert_template 'index.rhtml' assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # default filter + assert_equal({'status_id' => {:operator => 'o', :values => ['']}}, query.filters) + end + + def test_index_with_project_and_filter + get :index, :project_id => 1, :set_filter => 1, + :fields => ['tracker_id'], + :operators => {'tracker_id' => '='}, + :values => {'tracker_id' => ['1']} + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + assert_equal({'tracker_id' => {:operator => '=', :values => ['1']}}, query.filters) + end + + def test_index_with_project_and_empty_filters + get :index, :project_id => 1, :set_filter => 1, :fields => [''] + assert_response :success + assert_template 'index.rhtml' + assert_not_nil assigns(:issues) + + query = assigns(:query) + assert_not_nil query + # no filter + assert_equal({}, query.filters) end def test_index_with_query @@ -340,9 +371,7 @@ get :new, :project_id => 1 assert_response 500 - assert_not_nil flash[:error] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, - :content => /No default issue/ + assert_error_tag :content => /No default issue/ end def test_get_new_with_no_tracker_should_display_an_error @@ -351,9 +380,7 @@ get :new, :project_id => 1 assert_response 500 - assert_not_nil flash[:error] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, - :content => /No tracker/ + assert_error_tag :content => /No tracker/ end def test_update_new_form @@ -382,6 +409,7 @@ :subject => 'This is the test_new issue', :description => 'This is the description', :priority_id => 5, + :start_date => '2010-11-07', :estimated_hours => '', :custom_field_values => {'2' => 'Value for field 2'}} end @@ -392,12 +420,33 @@ assert_equal 2, issue.author_id assert_equal 3, issue.tracker_id assert_equal 2, issue.status_id + assert_equal Date.parse('2010-11-07'), issue.start_date assert_nil issue.estimated_hours v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2}) assert_not_nil v assert_equal 'Value for field 2', v.value end + def test_post_create_without_start_date + @request.session[:user_id] = 2 + assert_difference 'Issue.count' do + post :create, :project_id => 1, + :issue => {:tracker_id => 3, + :status_id => 2, + :subject => 'This is the test_new issue', + :description => 'This is the description', + :priority_id => 5, + :start_date => '', + :estimated_hours => '', + :custom_field_values => {'2' => 'Value for field 2'}} + end + assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id + + issue = Issue.find_by_subject('This is the test_new issue') + assert_not_nil issue + assert_nil issue.start_date + end + def test_post_create_and_continue @request.session[:user_id] = 2 post :create, :project_id => 1, @@ -531,7 +580,7 @@ context "without workflow privilege" do setup do Workflow.delete_all(["role_id = ?", Role.anonymous.id]) - Role.anonymous.add_permission! :add_issues + Role.anonymous.add_permission! :add_issues, :add_issue_notes end context "#new" do @@ -556,6 +605,17 @@ assert_equal IssueStatus.default, issue.status end + should "accept default status" do + assert_difference 'Issue.count' do + post :create, :project_id => 1, + :issue => {:tracker_id => 1, + :subject => 'This is an issue', + :status_id => 1} + end + issue = Issue.last(:order => 'id') + assert_equal IssueStatus.default, issue.status + end + should "ignore unauthorized status" do assert_difference 'Issue.count' do post :create, :project_id => 1, @@ -567,6 +627,94 @@ assert_equal IssueStatus.default, issue.status end end + + context "#update" do + should "ignore status change" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 1, Issue.find(1).status_id + end + + should "ignore attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal "Can't print recipes", issue.subject + assert_nil issue.assigned_to + end + end + end + + context "with workflow privilege" do + setup do + Workflow.delete_all(["role_id = ?", Role.anonymous.id]) + Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3) + Workflow.create!(:role => Role.anonymous, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) + Role.anonymous.add_permission! :add_issues, :add_issue_notes + end + + context "#update" do + should "accept authorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 3, Issue.find(1).status_id + end + + should "ignore unauthorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2} + end + assert_equal 1, Issue.find(1).status_id + end + + should "accept authorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal 2, issue.assigned_to_id + end + + should "ignore unauthorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed'} + end + issue = Issue.find(1) + assert_equal "Can't print recipes", issue.subject + end + end + + context "and :edit_issues permission" do + setup do + Role.anonymous.add_permission! :add_issues, :edit_issues + end + + should "accept authorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 3} + end + assert_equal 3, Issue.find(1).status_id + end + + should "ignore unauthorized status" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:status_id => 2} + end + assert_equal 1, Issue.find(1).status_id + end + + should "accept authorized attributes changes" do + assert_difference 'Journal.count' do + put :update, :id => 1, :notes => 'just trying', :issue => {:subject => 'changed', :assigned_to_id => 2} + end + issue = Issue.find(1) + assert_equal "changed", issue.subject + assert_equal 2, issue.assigned_to_id + end + end end def test_copy_issue @@ -589,7 +737,8 @@ def test_get_edit_with_params @request.session[:user_id] = 2 - get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 } + get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }, + :time_entry => { :hours => '2.5', :comments => 'test_get_edit_with_params', :activity_id => TimeEntryActivity.first.id } assert_response :success assert_template 'edit' @@ -607,6 +756,12 @@ :child => { :tag => 'option', :content => 'Urgent', :attributes => { :selected => 'selected' } } + + assert_tag :input, :attributes => { :name => 'time_entry[hours]', :value => '2.5' } + assert_tag :select, :attributes => { :name => 'time_entry[activity_id]' }, + :child => { :tag => 'option', + :attributes => { :selected => 'selected', :value => TimeEntryActivity.first.id } } + assert_tag :input, :attributes => { :name => 'time_entry[comments]', :value => 'test_get_edit_with_params' } end def test_update_edit_form @@ -911,6 +1066,19 @@ assert_tag :select, :attributes => {:name => 'issue[custom_field_values][1]'} end + def test_get_bulk_edit_on_different_projects + @request.session[:user_id] = 2 + get :bulk_edit, :ids => [1, 2, 6] + assert_response :success + assert_template 'bulk_edit' + + # Project specific custom field, date type + field = CustomField.find(9) + assert !field.is_for_all? + assert !field.project_ids.include?(Issue.find(6).project_id) + assert_no_tag :input, :attributes => {:name => 'issue[custom_field_values][9]'} + end + def test_bulk_update @request.session[:user_id] = 2 # update issues priority @@ -930,6 +1098,39 @@ assert_equal 1, journal.details.size end + def test_bulk_update_on_different_projects + @request.session[:user_id] = 2 + # update issues priority + post :bulk_update, :ids => [1, 2, 6], :notes => 'Bulk editing', + :issue => {:priority_id => 7, + :assigned_to_id => '', + :custom_field_values => {'2' => ''}} + + assert_response 302 + # check that the issues were updated + assert_equal [7, 7, 7], Issue.find([1,2,6]).map(&:priority_id) + + issue = Issue.find(1) + journal = issue.journals.find(:first, :order => 'created_on DESC') + assert_equal '125', issue.custom_value_for(2).value + assert_equal 'Bulk editing', journal.notes + assert_equal 1, journal.details.size + end + + def test_bulk_update_on_different_projects_without_rights + @request.session[:user_id] = 3 + user = User.find(3) + action = { :controller => "issues", :action => "bulk_update" } + assert user.allowed_to?(action, Issue.find(1).project) + assert ! user.allowed_to?(action, Issue.find(6).project) + post :bulk_update, :ids => [1, 6], :notes => 'Bulk should fail', + :issue => {:priority_id => 7, + :assigned_to_id => '', + :custom_field_values => {'2' => ''}} + assert_response 403 + assert_not_equal "Bulk should fail", Journal.last.notes + end + def test_bullk_update_should_send_a_notification @request.session[:user_id] = 2 ActionMailer::Base.deliveries.clear @@ -1061,6 +1262,13 @@ assert_equal 2, TimeEntry.find(2).issue_id end + def test_destroy_issues_from_different_projects + @request.session[:user_id] = 2 + post :destroy, :ids => [1, 2, 6], :todo => 'destroy' + assert_redirected_to :controller => 'issues', :action => 'index' + assert !(Issue.find_by_id(1) || Issue.find_by_id(2) || Issue.find_by_id(6)) + end + def test_default_search_scope get :index assert_tag :div, :attributes => {:id => 'quick-search'},
--- a/test/functional/messages_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/messages_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -87,7 +87,7 @@ :content => 'Message body'} message = Message.find_by_subject('Test created message') assert_not_nil message - assert_redirected_to "boards/1/topics/#{message.to_param}" + assert_redirected_to "/boards/1/topics/#{message.to_param}" assert_equal 'Message body', message.content assert_equal 2, message.author_id assert_equal 1, message.board_id @@ -114,7 +114,7 @@ post :edit, :board_id => 1, :id => 1, :message => { :subject => 'New subject', :content => 'New body'} - assert_redirected_to 'boards/1/topics/1' + assert_redirected_to '/boards/1/topics/1' message = Message.find(1) assert_equal 'New subject', message.subject assert_equal 'New body', message.content @@ -124,14 +124,14 @@ @request.session[:user_id] = 2 post :reply, :board_id => 1, :id => 1, :reply => { :content => 'This is a test reply', :subject => 'Test reply' } reply = Message.find(:first, :order => 'id DESC') - assert_redirected_to "boards/1/topics/1?r=#{reply.id}" + assert_redirected_to "/boards/1/topics/1?r=#{reply.id}" assert Message.find_by_subject('Test reply') end def test_destroy_topic @request.session[:user_id] = 2 post :destroy, :board_id => 1, :id => 1 - assert_redirected_to 'projects/ecookbook/boards/1' + assert_redirected_to '/projects/ecookbook/boards/1' assert_nil Message.find_by_id(1) end
--- a/test/functional/my_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/my_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -68,7 +68,7 @@ :login => "root", :admin => 1, :custom_field_values => {"4" => "0100562500"}} - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' user = User.find(2) assert_equal user, assigns(:user) assert_equal "Joe", user.firstname @@ -102,7 +102,7 @@ post :password, :password => 'jsmith', :new_password => 'hello', :new_password_confirmation => 'hello' - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' assert User.try_to_login('jsmith', 'hello') end
--- a/test/functional/news_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/news_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -73,7 +73,7 @@ post :create, :project_id => 1, :news => { :title => 'NewsControllerTest', :description => 'This is the description', :summary => '' } - assert_redirected_to 'projects/ecookbook/news' + assert_redirected_to '/projects/ecookbook/news' news = News.find_by_title('NewsControllerTest') assert_not_nil news @@ -93,7 +93,7 @@ def test_put_update @request.session[:user_id] = 2 put :update, :id => 1, :news => { :description => 'Description changed by test_post_edit' } - assert_redirected_to 'news/1' + assert_redirected_to '/news/1' news = News.find(1) assert_equal 'Description changed by test_post_edit', news.description end @@ -113,19 +113,8 @@ def test_destroy @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to 'projects/ecookbook/news' + delete :destroy, :id => 1 + assert_redirected_to '/projects/ecookbook/news' assert_nil News.find_by_id(1) end - - def test_preview - get :preview, :project_id => 1, - :news => {:title => '', - :description => 'News description', - :summary => ''} - assert_response :success - assert_template 'common/_preview' - assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' }, - :content => /News description/ - end end
--- a/test/functional/previews_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/previews_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -19,4 +19,14 @@ assert_not_nil assigns(:notes) end + def test_news + get :news, :project_id => 1, + :news => {:title => '', + :description => 'News description', + :summary => ''} + assert_response :success + assert_template 'common/_preview' + assert_tag :tag => 'fieldset', :attributes => { :class => 'preview' }, + :content => /News description/ + end end
--- a/test/functional/project_enumerations_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/project_enumerations_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -20,7 +20,7 @@ } assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' # Created project specific activities... project = Project.find('ecookbook') @@ -83,7 +83,7 @@ } assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' # Created project specific activities... project = Project.find('ecookbook') @@ -159,7 +159,7 @@ delete :destroy, :project_id => 1 assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' assert_nil TimeEntryActivity.find_by_id(project_activity.id) assert_nil TimeEntryActivity.find_by_id(project_activity_two.id) @@ -179,7 +179,7 @@ delete :destroy, :project_id => 1 assert_response :redirect - assert_redirected_to 'projects/ecookbook/settings/activities' + assert_redirected_to '/projects/ecookbook/settings/activities' assert_nil TimeEntryActivity.find_by_id(project_activity.id) assert_equal 0, TimeEntry.find_all_by_activity_id_and_project_id(project_activity.id, 1).size, "TimeEntries still assigned to project specific activity"
--- a/test/functional/projects_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/projects_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -284,6 +284,18 @@ assert_template 'show' assert_not_nil assigns(:project) assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) + + assert_tag 'li', :content => /Development status/ + end + + def test_show_should_not_display_hidden_custom_fields + ProjectCustomField.find_by_name('Development status').update_attribute :visible, false + get :show, :id => 'ecookbook' + assert_response :success + assert_template 'show' + assert_not_nil assigns(:project) + + assert_no_tag 'li', :content => /Development status/ end def test_show_should_not_fail_when_custom_values_are_nil @@ -296,6 +308,16 @@ assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) end + def show_archived_project_should_be_denied + project = Project.find_by_identifier('ecookbook') + project.archive! + + get :show, :id => 'ecookbook' + assert_response 403 + assert_nil assigns(:project) + assert_tag :tag => 'p', :content => /archived/ + end + def test_private_subprojects_hidden get :show, :id => 'ecookbook' assert_response :success @@ -322,7 +344,7 @@ @request.session[:user_id] = 2 # manager post :update, :id => 1, :project => {:name => 'Test changed name', :issue_custom_field_ids => ['']} - assert_redirected_to 'projects/ecookbook/settings' + assert_redirected_to '/projects/ecookbook/settings' project = Project.find(1) assert_equal 'Test changed name', project.name end @@ -338,14 +360,14 @@ def test_post_destroy @request.session[:user_id] = 1 # admin post :destroy, :id => 1, :confirm => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert_nil Project.find_by_id(1) end def test_archive @request.session[:user_id] = 1 # admin post :archive, :id => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert !Project.find(1).active? end @@ -353,7 +375,7 @@ @request.session[:user_id] = 1 # admin Project.find(1).archive post :unarchive, :id => 1 - assert_redirected_to 'admin/projects' + assert_redirected_to '/admin/projects' assert Project.find(1).active? end @@ -389,9 +411,20 @@ assert_redirected_to :controller => 'admin', :action => 'projects' end + context "POST :copy" do + should "TODO: test the rest of the method" + + should "redirect to the project settings when successful" do + @request.session[:user_id] = 1 # admin + post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'} + assert_response :redirect + assert_redirected_to :controller => 'projects', :action => 'settings' + end + end + def test_jump_should_redirect_to_active_tab get :show, :id => 1, :jump => 'issues' - assert_redirected_to 'projects/ecookbook/issues' + assert_redirected_to '/projects/ecookbook/issues' end def test_jump_should_not_redirect_to_inactive_tab
--- a/test/functional/repositories_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/repositories_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -98,7 +98,7 @@ assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']} - assert_redirected_to 'projects/ecookbook/repository/committers' + assert_redirected_to '/projects/ecookbook/repository/committers' assert_equal User.find(2), c.reload.user end end
--- a/test/functional/repositories_cvs_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/repositories_cvs_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -106,7 +106,7 @@ def test_entry_not_found get :entry, :id => 1, :path => ['sources', 'zzz.c'] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /The entry or revision was not found in the repository/ end
--- a/test/functional/repositories_git_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/repositories_git_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -50,7 +50,7 @@ assert_response :success assert_template 'show' assert_not_nil assigns(:entries) - assert_equal 7, assigns(:entries).size + assert_equal 9, assigns(:entries).size assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'} assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'} assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'} @@ -58,6 +58,8 @@ assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'} assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'} assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'} + assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'} + assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'} end def test_browse_branch @@ -152,7 +154,7 @@ def test_annotate_binary_file get :annotate, :id => 3, :path => ['images', 'edit.png'] assert_response 500 - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /can not be annotated/ end else
--- a/test/functional/repositories_subversion_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/repositories_subversion_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -129,7 +129,7 @@ def test_entry_not_found get :entry, :id => 1, :path => ['subversion_test', 'zzz.c'] - assert_tag :tag => 'div', :attributes => { :class => /error/ }, + assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, :content => /The entry or revision was not found in the repository/ end
--- a/test/functional/roles_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/roles_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -65,7 +65,7 @@ :permissions => ['add_issues', 'edit_issues', 'log_time', ''], :assignable => '0'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find_by_name('RoleWithoutWorkflowCopy') assert_not_nil role assert_equal [:add_issues, :edit_issues, :log_time], role.permissions @@ -78,7 +78,7 @@ :assignable => '0'}, :copy_workflow_from => '1' - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find_by_name('RoleWithWorkflowCopy') assert_not_nil role assert_equal Role.find(1).workflows.size, role.workflows.size @@ -97,7 +97,7 @@ :permissions => ['edit_project', ''], :assignable => '0'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' role = Role.find(1) assert_equal [:edit_project], role.permissions end @@ -107,13 +107,13 @@ assert r.save post :destroy, :id => r - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_nil Role.find_by_id(r.id) end def test_destroy_role_in_use post :destroy, :id => 1 - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert flash[:error] == 'This role is in use and can not be deleted.' assert_not_nil Role.find_by_id(1) end @@ -139,7 +139,7 @@ def test_post_report post :report, :permissions => { '0' => '', '1' => ['edit_issues'], '3' => ['add_issues', 'delete_issues']} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal [:edit_issues], Role.find(1).permissions assert_equal [:add_issues, :delete_issues], Role.find(3).permissions @@ -148,33 +148,33 @@ def test_clear_all_permissions post :report, :permissions => { '0' => '' } - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert Role.find(1).permissions.empty? end def test_move_highest post :edit, :id => 3, :role => {:move_to => 'highest'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal 1, Role.find(3).position end def test_move_higher position = Role.find(3).position post :edit, :id => 3, :role => {:move_to => 'higher'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal position - 1, Role.find(3).position end def test_move_lower position = Role.find(2).position post :edit, :id => 2, :role => {:move_to => 'lower'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal position + 1, Role.find(2).position end def test_move_lowest post :edit, :id => 2, :role => {:move_to => 'lowest'} - assert_redirected_to 'roles' + assert_redirected_to '/roles' assert_equal Role.count, Role.find(2).position end end
--- a/test/functional/search_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/search_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -126,7 +126,7 @@ def test_quick_jump_to_issue # issue of a public project get :index, :q => "3" - assert_redirected_to 'issues/3' + assert_redirected_to '/issues/3' # issue of a private project get :index, :q => "4"
--- a/test/functional/settings_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/settings_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -50,7 +50,7 @@ :notified_events => %w(issue_added issue_updated news_added), :emails_footer => 'Test footer' } - assert_redirected_to 'settings/edit' + assert_redirected_to '/settings/edit' assert_equal 'functional@test.foo', Setting.mail_from assert !Setting.bcc_recipients? assert_equal %w(issue_added issue_updated news_added), Setting.notified_events
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/functional/time_entry_reports_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +require File.dirname(__FILE__) + '/../test_helper' + +class TimeEntryReportsControllerTest < ActionController::TestCase + fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values + + def test_report_no_criteria + get :report, :project_id => 1 + assert_response :success + assert_template 'report' + end + + def test_report_all_projects + get :report + assert_response :success + assert_template 'report' + end + + def test_report_all_projects_denied + r = Role.anonymous + r.permissions.delete(:view_time_entries) + r.permissions_will_change! + r.save + get :report + assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport' + end + + def test_report_all_projects_one_criteria + get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "8.65", "%.2f" % assigns(:total_hours) + end + + def test_report_all_time + get :report, :project_id => 1, :criterias => ['project', 'issue'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + end + + def test_report_all_time_by_day + get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day' + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + assert_tag :tag => 'th', :content => '2007-03-12' + end + + def test_report_one_criteria + get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "8.65", "%.2f" % assigns(:total_hours) + end + + def test_report_two_criterias + get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "162.90", "%.2f" % assigns(:total_hours) + end + + def test_report_one_day + get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "4.25", "%.2f" % assigns(:total_hours) + end + + def test_report_at_issue_level + get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "154.25", "%.2f" % assigns(:total_hours) + end + + def test_report_custom_field_criteria + get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_not_nil assigns(:criterias) + assert_equal 3, assigns(:criterias).size + assert_equal "162.90", "%.2f" % assigns(:total_hours) + # Custom field column + assert_tag :tag => 'th', :content => 'Database' + # Custom field row + assert_tag :tag => 'td', :content => 'MySQL', + :sibling => { :tag => 'td', :attributes => { :class => 'hours' }, + :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' }, + :content => '1' }} + # Second custom field column + assert_tag :tag => 'th', :content => 'Billable' + end + + def test_report_one_criteria_no_result + get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project'] + assert_response :success + assert_template 'report' + assert_not_nil assigns(:total_hours) + assert_equal "0.00", "%.2f" % assigns(:total_hours) + end + + def test_report_all_projects_csv_export + get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" + assert_response :success + assert_equal 'text/csv', @response.content_type + lines = @response.body.chomp.split("\n") + # Headers + assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first + # Total row + assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last + end + + def test_report_csv_export + get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" + assert_response :success + assert_equal 'text/csv', @response.content_type + lines = @response.body.chomp.split("\n") + # Headers + assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first + # Total row + assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last + end + +end
--- a/test/functional/timelog_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/timelog_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -31,9 +31,9 @@ @response = ActionController::TestResponse.new end - def test_get_edit + def test_get_new @request.session[:user_id] = 3 - get :edit, :project_id => 1 + get :new, :project_id => 1 assert_response :success assert_template 'edit' # Default activity selected @@ -41,24 +41,24 @@ :content => 'Development' end + def test_get_new_should_only_show_active_time_entry_activities + @request.session[:user_id] = 3 + get :new, :project_id => 1 + assert_response :success + assert_template 'edit' + assert_no_tag :tag => 'option', :content => 'Inactive Activity' + + end + def test_get_edit_existing_time @request.session[:user_id] = 2 get :edit, :id => 2, :project_id => nil assert_response :success assert_template 'edit' # Default activity selected - assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/timelog/edit/2' } + assert_tag :tag => 'form', :attributes => { :action => '/projects/ecookbook/time_entries/2' } end - def test_get_edit_should_only_show_active_time_entry_activities - @request.session[:user_id] = 3 - get :edit, :project_id => 1 - assert_response :success - assert_template 'edit' - assert_no_tag :tag => 'option', :content => 'Inactive Activity' - - end - def test_get_edit_with_an_existing_time_entry_with_inactive_activity te = TimeEntry.find(1) te.activity = TimeEntryActivity.find_by_name("Inactive Activity") @@ -72,18 +72,18 @@ assert_tag :tag => 'option', :content => '--- Please select ---' end - def test_post_edit + def test_post_create # TODO: should POST to issues’ time log instead of project. change form # and routing @request.session[:user_id] = 3 - post :edit, :project_id => 1, + post :create, :project_id => 1, :time_entry => {:comments => 'Some work on TimelogControllerTest', # Not the default activity :activity_id => '11', :spent_on => '2008-03-14', :issue_id => '1', :hours => '7.3'} - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' i = Issue.find(1) t = TimeEntry.find_by_comments('Some work on TimelogControllerTest') @@ -101,10 +101,10 @@ assert_equal 2, entry.user_id @request.session[:user_id] = 1 - post :edit, :id => 1, + put :update, :id => 1, :time_entry => {:issue_id => '2', :hours => '8'} - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' entry.reload assert_equal 8, entry.hours @@ -114,8 +114,8 @@ def test_destroy @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + delete :destroy, :id => 1 + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal I18n.t(:notice_successful_delete), flash[:notice] assert_nil TimeEntry.find_by_id(1) end @@ -128,8 +128,8 @@ end @request.session[:user_id] = 2 - post :destroy, :id => 1 - assert_redirected_to :action => 'details', :project_id => 'ecookbook' + delete :destroy, :id => 1 + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error] assert_not_nil TimeEntry.find_by_id(1) @@ -137,145 +137,18 @@ TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain } end - def test_report_no_criteria - get :report, :project_id => 1 + def test_index_all_projects + get :index assert_response :success - assert_template 'report' - end - - def test_report_all_projects - get :report - assert_response :success - assert_template 'report' - end - - def test_report_all_projects_denied - r = Role.anonymous - r.permissions.delete(:view_time_entries) - r.permissions_will_change! - r.save - get :report - assert_redirected_to '/login?back_url=http%3A%2F%2Ftest.host%2Ftime_entries%2Freport' - end - - def test_report_all_projects_one_criteria - get :report, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "8.65", "%.2f" % assigns(:total_hours) - end - - def test_report_all_time - get :report, :project_id => 1, :criterias => ['project', 'issue'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - end - - def test_report_all_time_by_day - get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day' - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - assert_tag :tag => 'th', :content => '2007-03-12' - end - - def test_report_one_criteria - get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "8.65", "%.2f" % assigns(:total_hours) - end - - def test_report_two_criterias - get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] - assert_response :success - assert_template 'report' + assert_template 'index' assert_not_nil assigns(:total_hours) assert_equal "162.90", "%.2f" % assigns(:total_hours) end - def test_report_one_day - get :report, :project_id => 1, :columns => 'day', :from => "2007-03-23", :to => "2007-03-23", :criterias => ["member", "activity"] + def test_index_at_project_level + get :index, :project_id => 1 assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "4.25", "%.2f" % assigns(:total_hours) - end - - def test_report_at_issue_level - get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "154.25", "%.2f" % assigns(:total_hours) - end - - def test_report_custom_field_criteria - get :report, :project_id => 1, :criterias => ['project', 'cf_1', 'cf_7'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_not_nil assigns(:criterias) - assert_equal 3, assigns(:criterias).size - assert_equal "162.90", "%.2f" % assigns(:total_hours) - # Custom field column - assert_tag :tag => 'th', :content => 'Database' - # Custom field row - assert_tag :tag => 'td', :content => 'MySQL', - :sibling => { :tag => 'td', :attributes => { :class => 'hours' }, - :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' }, - :content => '1' }} - # Second custom field column - assert_tag :tag => 'th', :content => 'Billable' - end - - def test_report_one_criteria_no_result - get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project'] - assert_response :success - assert_template 'report' - assert_not_nil assigns(:total_hours) - assert_equal "0.00", "%.2f" % assigns(:total_hours) - end - - def test_report_all_projects_csv_export - get :report, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" - assert_response :success - assert_equal 'text/csv', @response.content_type - lines = @response.body.chomp.split("\n") - # Headers - assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first - # Total row - assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last - end - - def test_report_csv_export - get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv" - assert_response :success - assert_equal 'text/csv', @response.content_type - lines = @response.body.chomp.split("\n") - # Headers - assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first - # Total row - assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last - end - - def test_details_all_projects - get :details - assert_response :success - assert_template 'details' - assert_not_nil assigns(:total_hours) - assert_equal "162.90", "%.2f" % assigns(:total_hours) - end - - def test_details_at_project_level - get :details, :project_id => 1 - assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 4, assigns(:entries).size # project and subproject @@ -287,10 +160,10 @@ assert_equal '2007-04-22'.to_date, assigns(:to) end - def test_details_at_project_level_with_date_range - get :details, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30' + def test_index_at_project_level_with_date_range + get :index, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30' assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 3, assigns(:entries).size assert_not_nil assigns(:total_hours) @@ -299,28 +172,28 @@ assert_equal '2007-04-30'.to_date, assigns(:to) end - def test_details_at_project_level_with_period - get :details, :project_id => 1, :period => '7_days' + def test_index_at_project_level_with_period + get :index, :project_id => 1, :period => '7_days' assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_not_nil assigns(:total_hours) assert_equal Date.today - 7, assigns(:from) assert_equal Date.today, assigns(:to) end - def test_details_one_day - get :details, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23" + def test_index_one_day + get :index, :project_id => 1, :from => "2007-03-23", :to => "2007-03-23" assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:total_hours) assert_equal "4.25", "%.2f" % assigns(:total_hours) end - def test_details_at_issue_level - get :details, :issue_id => 1 + def test_index_at_issue_level + get :index, :issue_id => 1 assert_response :success - assert_template 'details' + assert_template 'index' assert_not_nil assigns(:entries) assert_equal 2, assigns(:entries).size assert_not_nil assigns(:total_hours) @@ -330,26 +203,26 @@ assert_equal '2007-04-22'.to_date, assigns(:to) end - def test_details_atom_feed - get :details, :project_id => 1, :format => 'atom' + def test_index_atom_feed + get :index, :project_id => 1, :format => 'atom' assert_response :success assert_equal 'application/atom+xml', @response.content_type assert_not_nil assigns(:items) assert assigns(:items).first.is_a?(TimeEntry) end - def test_details_all_projects_csv_export + def test_index_all_projects_csv_export Setting.date_format = '%m/%d/%Y' - get :details, :format => 'csv' + get :index, :format => 'csv' assert_response :success assert_equal 'text/csv', @response.content_type assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n") assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n") end - def test_details_csv_export + def test_index_csv_export Setting.date_format = '%m/%d/%Y' - get :details, :project_id => 1, :format => 'csv' + get :index, :project_id => 1, :format => 'csv' assert_response :success assert_equal 'text/csv', @response.content_type assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
--- a/test/functional/users_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/users_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -24,7 +24,7 @@ class UsersControllerTest < ActionController::TestCase include Redmine::I18n - fixtures :users, :projects, :members, :member_roles, :roles + fixtures :users, :projects, :members, :member_roles, :roles, :auth_sources, :custom_fields, :custom_values def setup @controller = UsersController.new @@ -65,6 +65,19 @@ assert_response :success assert_template 'show' assert_not_nil assigns(:user) + + assert_tag 'li', :content => /Phone number/ + end + + def test_show_should_not_display_hidden_custom_fields + @request.session[:user_id] = nil + UserCustomField.find_by_name('Phone number').update_attribute :visible, false + get :show, :id => 2 + assert_response :success + assert_template 'show' + assert_not_nil assigns(:user) + + assert_no_tag 'li', :content => /Phone number/ end def test_show_should_not_fail_when_custom_values_are_nil @@ -107,14 +120,65 @@ assert project_ids.include?(2) #private project admin can see end - def test_edit + context "GET :new" do + setup do + get :new + end + + should_assign_to :user + should_respond_with :success + should_render_template :new + end + + context "POST :create" do + context "when successful" do + setup do + post :create, :user => { + :firstname => 'John', + :lastname => 'Doe', + :login => 'jdoe', + :password => 'test', + :password_confirmation => 'test', + :mail => 'jdoe@gmail.com' + }, + :notification_option => 'none' + end + + should_assign_to :user + should_respond_with :redirect + should_redirect_to('user edit') { {:controller => 'users', :action => 'edit', :id => User.find_by_login('jdoe')}} + + should 'set the users mail notification' do + user = User.last + assert_equal 'none', user.mail_notification + end + end + + context "when unsuccessful" do + setup do + post :create, :user => {} + end + + should_assign_to :user + should_respond_with :success + should_render_template :new + end + + end + + def test_update ActionMailer::Base.deliveries.clear - post :edit, :id => 2, :user => {:firstname => 'Changed'} - assert_equal 'Changed', User.find(2).firstname + put :update, :id => 2, :user => {:firstname => 'Changed'}, :notification_option => 'all', :pref => {:hide_mail => '1', :comments_sorting => 'desc'} + + user = User.find(2) + assert_equal 'Changed', user.firstname + assert_equal 'all', user.mail_notification + assert_equal true, user.pref[:hide_mail] + assert_equal 'desc', user.pref[:comments_sorting] assert ActionMailer::Base.deliveries.empty? end - def test_edit_with_activation_should_send_a_notification + def test_update_with_activation_should_send_a_notification u = User.new(:firstname => 'Foo', :lastname => 'Bar', :mail => 'foo.bar@somenet.foo', :language => 'fr') u.login = 'foo' u.status = User::STATUS_REGISTERED @@ -122,7 +186,7 @@ ActionMailer::Base.deliveries.clear Setting.bcc_recipients = '1' - post :edit, :id => u.id, :user => {:status => User::STATUS_ACTIVE} + put :update, :id => u.id, :user => {:status => User::STATUS_ACTIVE} assert u.reload.active? mail = ActionMailer::Base.deliveries.last assert_not_nil mail @@ -130,12 +194,12 @@ assert mail.body.include?(ll('fr', :notice_account_activated)) end - def test_edit_with_password_change_should_send_a_notification + def test_updat_with_password_change_should_send_a_notification ActionMailer::Base.deliveries.clear Setting.bcc_recipients = '1' u = User.find(2) - post :edit, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1' + put :update, :id => u.id, :user => {}, :password => 'newpass', :password_confirmation => 'newpass', :send_information => '1' assert_equal User.hash_password('newpass'), u.reload.hashed_password mail = ActionMailer::Base.deliveries.last @@ -144,13 +208,13 @@ assert mail.body.include?('newpass') end - test "POST :edit with a password change to an AuthSource user switching to Internal authentication" do + test "put :update with a password change to an AuthSource user switching to Internal authentication" do # Configure as auth source u = User.find(2) u.auth_source = AuthSource.find(1) u.save! - post :edit, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass' + put :update, :id => u.id, :user => {:auth_source_id => ''}, :password => 'newpass', :password_confirmation => 'newpass' assert_equal nil, u.reload.auth_source assert_equal User.hash_password('newpass'), u.reload.hashed_password
--- a/test/functional/versions_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/versions_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -123,6 +123,15 @@ assert_equal 'New version name', version.name assert_equal Date.today, version.effective_date end + + def test_post_update_with_validation_failure + @request.session[:user_id] = 2 + put :update, :id => 2, + :version => { :name => '', + :effective_date => Date.today.strftime("%Y-%m-%d")} + assert_response :success + assert_template 'edit' + end def test_destroy @request.session[:user_id] = 2
--- a/test/functional/wiki_controller_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/functional/wiki_controller_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -32,7 +32,7 @@ end def test_show_start_page - get :index, :id => 'ecookbook' + get :show, :project_id => 'ecookbook' assert_response :success assert_template 'show' assert_tag :tag => 'h1', :content => /CookBook documentation/ @@ -45,7 +45,7 @@ end def test_show_page_with_name - get :index, :id => 1, :page => 'Another_page' + get :show, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'show' assert_tag :tag => 'h1', :content => /Another page/ @@ -60,32 +60,32 @@ page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar') page.save! - get :index, :id => 1, :page => 'Another_page' + get :show, :project_id => 1, :id => 'Another_page' assert_response :success assert_tag :tag => 'div', :attributes => {:id => 'sidebar'}, :content => /Side bar content for test_show_with_sidebar/ end def test_show_unexistent_page_without_edit_right - get :index, :id => 1, :page => 'Unexistent page' + get :show, :project_id => 1, :id => 'Unexistent page' assert_response 404 end def test_show_unexistent_page_with_edit_right @request.session[:user_id] = 2 - get :index, :id => 1, :page => 'Unexistent page' + get :show, :project_id => 1, :id => 'Unexistent page' assert_response :success assert_template 'edit' end def test_create_page @request.session[:user_id] = 2 - post :edit, :id => 1, - :page => 'New page', + put :update, :project_id => 1, + :id => 'New page', :content => {:comments => 'Created the page', :text => "h1. New page\n\nThis is a new page", :version => 0} - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'New_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'New_page' page = Project.find(1).wiki.find_page('New page') assert !page.new_record? assert_not_nil page.content @@ -96,8 +96,8 @@ @request.session[:user_id] = 2 assert_difference 'WikiPage.count' do assert_difference 'Attachment.count' do - post :edit, :id => 1, - :page => 'New page', + put :update, :project_id => 1, + :id => 'New page', :content => {:comments => 'Created the page', :text => "h1. New page\n\nThis is a new page", :version => 0}, @@ -111,7 +111,7 @@ def test_preview @request.session[:user_id] = 2 - xhr :post, :preview, :id => 1, :page => 'CookBook_documentation', + xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation', :content => { :comments => '', :text => 'this is a *previewed text*', :version => 3 } @@ -122,7 +122,7 @@ def test_preview_new_page @request.session[:user_id] = 2 - xhr :post, :preview, :id => 1, :page => 'New page', + xhr :post, :preview, :project_id => 1, :id => 'New page', :content => { :text => 'h1. New page', :comments => '', :version => 0 } @@ -132,7 +132,7 @@ end def test_history - get :history, :id => 1, :page => 'CookBook_documentation' + get :history, :project_id => 1, :id => 'CookBook_documentation' assert_response :success assert_template 'history' assert_not_nil assigns(:versions) @@ -141,7 +141,7 @@ end def test_history_with_one_version - get :history, :id => 1, :page => 'Another_page' + get :history, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'history' assert_not_nil assigns(:versions) @@ -150,7 +150,7 @@ end def test_diff - get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1 + get :diff, :project_id => 1, :id => 'CookBook_documentation', :version => 2, :version_from => 1 assert_response :success assert_template 'diff' assert_tag :tag => 'span', :attributes => { :class => 'diff_in'}, @@ -158,7 +158,7 @@ end def test_annotate - get :annotate, :id => 1, :page => 'CookBook_documentation', :version => 2 + get :annotate, :project_id => 1, :id => 'CookBook_documentation', :version => 2 assert_response :success assert_template 'annotate' # Line 1 @@ -170,13 +170,45 @@ :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ }, :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ } end + + def test_get_rename + @request.session[:user_id] = 2 + get :rename, :project_id => 1, :id => 'Another_page' + assert_response :success + assert_template 'rename' + assert_tag 'option', + :attributes => {:value => ''}, + :content => '', + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + assert_no_tag 'option', + :attributes => {:selected => 'selected'}, + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + end + + def test_get_rename_child_page + @request.session[:user_id] = 2 + get :rename, :project_id => 1, :id => 'Child_1' + assert_response :success + assert_template 'rename' + assert_tag 'option', + :attributes => {:value => ''}, + :content => '', + :parent => {:tag => 'select', :attributes => {:name => 'wiki_page[parent_id]'}} + assert_tag 'option', + :attributes => {:value => '2', :selected => 'selected'}, + :content => /Another page/, + :parent => { + :tag => 'select', + :attributes => {:name => 'wiki_page[parent_id]'} + } + end def test_rename_with_redirect @request.session[:user_id] = 2 - post :rename, :id => 1, :page => 'Another_page', + post :rename, :project_id => 1, :id => 'Another_page', :wiki_page => { :title => 'Another renamed page', :redirect_existing_links => 1 } - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page' wiki = Project.find(1).wiki # Check redirects assert_not_nil wiki.find_page('Another page') @@ -185,25 +217,41 @@ def test_rename_without_redirect @request.session[:user_id] = 2 - post :rename, :id => 1, :page => 'Another_page', + post :rename, :project_id => 1, :id => 'Another_page', :wiki_page => { :title => 'Another renamed page', :redirect_existing_links => "0" } - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_renamed_page' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_renamed_page' wiki = Project.find(1).wiki # Check that there's no redirects assert_nil wiki.find_page('Another page') end + def test_rename_with_parent_assignment + @request.session[:user_id] = 2 + post :rename, :project_id => 1, :id => 'Another_page', + :wiki_page => { :title => 'Another page', :redirect_existing_links => "0", :parent_id => '4' } + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page' + assert_equal WikiPage.find(4), WikiPage.find_by_title('Another_page').parent + end + + def test_rename_with_parent_unassignment + @request.session[:user_id] = 2 + post :rename, :project_id => 1, :id => 'Child_1', + :wiki_page => { :title => 'Child 1', :redirect_existing_links => "0", :parent_id => '' } + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Child_1' + assert_nil WikiPage.find_by_title('Child_1').parent + end + def test_destroy_child @request.session[:user_id] = 2 - post :destroy, :id => 1, :page => 'Child_1' - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + delete :destroy, :project_id => 1, :id => 'Child_1' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' end def test_destroy_parent @request.session[:user_id] = 2 assert_no_difference('WikiPage.count') do - post :destroy, :id => 1, :page => 'Another_page' + delete :destroy, :project_id => 1, :id => 'Another_page' end assert_response :success assert_template 'destroy' @@ -212,18 +260,18 @@ def test_destroy_parent_with_nullify @request.session[:user_id] = 2 assert_difference('WikiPage.count', -1) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'nullify' + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'nullify' end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) end def test_destroy_parent_with_cascade @request.session[:user_id] = 2 assert_difference('WikiPage.count', -3) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'destroy' + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'destroy' end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) assert_nil WikiPage.find_by_id(5) end @@ -231,17 +279,17 @@ def test_destroy_parent_with_reassign @request.session[:user_id] = 2 assert_difference('WikiPage.count', -1) do - post :destroy, :id => 1, :page => 'Another_page', :todo => 'reassign', :reassign_to_id => 1 + delete :destroy, :project_id => 1, :id => 'Another_page', :todo => 'reassign', :reassign_to_id => 1 end - assert_redirected_to :action => 'special', :id => 'ecookbook', :page => 'Page_index' + assert_redirected_to :action => 'index', :project_id => 'ecookbook' assert_nil WikiPage.find_by_id(2) assert_equal WikiPage.find(1), WikiPage.find_by_id(5).parent end - def test_page_index - get :special, :id => 'ecookbook', :page => 'Page_index' + def test_index + get :index, :project_id => 'ecookbook' assert_response :success - assert_template 'special_page_index' + assert_template 'index' pages = assigns(:pages) assert_not_nil pages assert_equal Project.find(1).wiki.pages.size, pages.size @@ -256,9 +304,49 @@ :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/projects/ecookbook/wiki/Another_page' }, :content => 'Another page' } } end + + context "GET :export" do + context "with an authorized user to export the wiki" do + setup do + @request.session[:user_id] = 2 + get :export, :project_id => 'ecookbook' + end + + should_respond_with :success + should_assign_to :pages + should_respond_with_content_type "text/html" + should "export all of the wiki pages to a single html file" do + assert_select "a[name=?]", "CookBook_documentation" + assert_select "a[name=?]", "Another_page" + assert_select "a[name=?]", "Page_with_an_inline_image" + end + + end + + context "with an unauthorized user" do + setup do + get :export, :project_id => 'ecookbook' + + should_respond_with :redirect + should_redirect_to('wiki index') { {:action => 'show', :project_id => @project, :id => nil} } + end + end + end + + context "GET :date_index" do + setup do + get :date_index, :project_id => 'ecookbook' + end + + should_respond_with :success + should_assign_to :pages + should_assign_to :pages_by_date + should_render_template 'wiki/date_index' + + end def test_not_found - get :index, :id => 999 + get :show, :project_id => 999 assert_response 404 end @@ -266,8 +354,8 @@ page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page') assert !page.protected? @request.session[:user_id] = 2 - post :protect, :id => 1, :page => page.title, :protected => '1' - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'Another_page' + post :protect, :project_id => 1, :id => page.title, :protected => '1' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'Another_page' assert page.reload.protected? end @@ -275,14 +363,14 @@ page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation') assert page.protected? @request.session[:user_id] = 2 - post :protect, :id => 1, :page => page.title, :protected => '0' - assert_redirected_to :action => 'index', :id => 'ecookbook', :page => 'CookBook_documentation' + post :protect, :project_id => 1, :id => page.title, :protected => '0' + assert_redirected_to :action => 'show', :project_id => 'ecookbook', :id => 'CookBook_documentation' assert !page.reload.protected? end def test_show_page_with_edit_link @request.session[:user_id] = 2 - get :index, :id => 1 + get :show, :project_id => 1 assert_response :success assert_template 'show' assert_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } @@ -290,7 +378,7 @@ def test_show_page_without_edit_link @request.session[:user_id] = 4 - get :index, :id => 1 + get :show, :project_id => 1 assert_response :success assert_template 'show' assert_no_tag :tag => 'a', :attributes => { :href => '/projects/1/wiki/CookBook_documentation/edit' } @@ -299,7 +387,7 @@ def test_edit_unprotected_page # Non members can edit unprotected wiki pages @request.session[:user_id] = 4 - get :edit, :id => 1, :page => 'Another_page' + get :edit, :project_id => 1, :id => 'Another_page' assert_response :success assert_template 'edit' end @@ -307,19 +395,19 @@ def test_edit_protected_page_by_nonmember # Non members can't edit protected wiki pages @request.session[:user_id] = 4 - get :edit, :id => 1, :page => 'CookBook_documentation' + get :edit, :project_id => 1, :id => 'CookBook_documentation' assert_response 403 end def test_edit_protected_page_by_member @request.session[:user_id] = 2 - get :edit, :id => 1, :page => 'CookBook_documentation' + get :edit, :project_id => 1, :id => 'CookBook_documentation' assert_response :success assert_template 'edit' end def test_history_of_non_existing_page_should_return_404 - get :history, :id => 1, :page => 'Unknown_page' + get :history, :project_id => 1, :id => 'Unknown_page' assert_response 404 end end
--- a/test/integration/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,19 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 41 -/svn/!svn/ver/4172/trunk/test/integration -END -api_token_login_test.rb -K 25 -svn:wc:ra_dav:version-url -V 65 -/svn/!svn/ver/3220/trunk/test/integration/api_token_login_test.rb -END -projects_api_test.rb -K 25 -svn:wc:ra_dav:version-url -V 62 -/svn/!svn/ver/3687/trunk/test/integration/projects_api_test.rb +/svn/!svn/ver/4407/trunk/test/integration END application_test.rb K 25 @@ -21,59 +9,35 @@ V 61 /svn/!svn/ver/2779/trunk/test/integration/application_test.rb END -issues_api_test.rb -K 25 -svn:wc:ra_dav:version-url -V 60 -/svn/!svn/ver/4048/trunk/test/integration/issues_api_test.rb -END routing_test.rb K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/4172/trunk/test/integration/routing_test.rb +/svn/!svn/ver/4372/trunk/test/integration/routing_test.rb END admin_test.rb K 25 svn:wc:ra_dav:version-url V 55 -/svn/!svn/ver/3050/trunk/test/integration/admin_test.rb -END -http_basic_login_test.rb -K 25 -svn:wc:ra_dav:version-url -V 66 -/svn/!svn/ver/3679/trunk/test/integration/http_basic_login_test.rb +/svn/!svn/ver/4231/trunk/test/integration/admin_test.rb END projects_test.rb K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/2317/trunk/test/integration/projects_test.rb +/svn/!svn/ver/4407/trunk/test/integration/projects_test.rb END issues_test.rb K 25 svn:wc:ra_dav:version-url V 56 -/svn/!svn/ver/4041/trunk/test/integration/issues_test.rb +/svn/!svn/ver/4407/trunk/test/integration/issues_test.rb END account_test.rb K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/3492/trunk/test/integration/account_test.rb -END -http_basic_login_with_api_token_test.rb -K 25 -svn:wc:ra_dav:version-url -V 81 -/svn/!svn/ver/3220/trunk/test/integration/http_basic_login_with_api_token_test.rb -END -disabled_rest_api_test.rb -K 25 -svn:wc:ra_dav:version-url -V 67 -/svn/!svn/ver/3220/trunk/test/integration/disabled_rest_api_test.rb +/svn/!svn/ver/4407/trunk/test/integration/account_test.rb END layout_test.rb K 25
--- a/test/integration/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/integration http://redmine.rubyforge.org/svn -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-14T16:45:32.457767Z +4407 +jplang @@ -26,74 +26,6 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 -api_token_login_test.rb -file - - - - -2010-09-23T14:37:45.435782Z -f99fc81982309b06b38b5a1ace40ca5e -2009-12-23T06:27:44.373427Z -3220 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2255 - -projects_api_test.rb -file - - - - -2010-09-23T14:37:45.439778Z -f71d3a9198cd46dcbe8c38b581be1bdb -2010-04-21T16:02:55.125733Z -3687 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -3675 - application_test.rb file @@ -128,40 +60,6 @@ 1967 -issues_api_test.rb -file - - - - -2010-09-24T12:48:25.883734Z -ffd48cf98057bd4ed0175bc4147c61cb -2010-08-27T20:08:59.729788Z -4048 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -9701 - lib dir @@ -171,11 +69,11 @@ -2010-09-24T12:48:25.883734Z -b1064aaf94d0e5242305bc5a09f0a596 -2010-09-23T15:20:19.085385Z -4172 -edavis10 +2010-11-19T13:04:46.192843Z +badebe423de738346d93306b99e49615 +2010-11-06T13:22:23.662480Z +4372 +jplang @@ -197,7 +95,10 @@ -24890 +27995 + +api_test +dir admin_test.rb file @@ -205,10 +106,10 @@ -2010-09-23T14:37:45.435782Z -d3db25767f7a6741931fa9b307ea9da9 -2009-11-14T19:41:02.240160Z -3050 +2010-11-19T13:04:46.192843Z +9d09badb144b1e0700cd7996b6582064 +2010-10-04T15:36:16.880272Z +4231 edavis10 has-props @@ -231,41 +132,7 @@ -2092 - -http_basic_login_test.rb -file - - - - -2010-09-23T14:37:45.435782Z -18dc5fe7b0619021768deecf38ad573a -2010-04-17T12:45:23.887495Z -3679 -jplang - - - - - - - - - - - - - - - - - - - - - -3403 +2097 projects_test.rb file @@ -273,11 +140,11 @@ -2010-09-23T14:37:45.439778Z -aedb3aed4364cf43d6dc1e721d10b685 -2009-01-26T01:47:51.253124Z -2317 -edavis10 +2010-11-19T13:04:46.192843Z +c93f89c5c055ea2c9f60c8b845b3dc18 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -299,7 +166,7 @@ -1553 +1555 issues_test.rb file @@ -307,11 +174,11 @@ -2010-09-24T12:48:25.883734Z -6125e0c4cbdc852b5831a85c0ded60f0 -2010-08-26T16:36:59.817467Z -4041 -edavis10 +2010-11-19T13:04:46.196712Z +d074b40a90cba528fe661e18a6e69f23 +2010-11-14T16:45:32.457767Z +4407 +jplang has-props @@ -333,7 +200,7 @@ -4795 +4796 account_test.rb file @@ -341,10 +208,10 @@ -2010-09-23T14:37:45.435782Z -dbb93f00bb81496a00069bc0f4d044c8 -2010-02-26T09:13:12.187275Z -3492 +2010-11-19T13:04:46.196712Z +8241ee2ac85e8c0bd227d80e120c2112 +2010-11-14T16:45:32.457767Z +4407 jplang has-props @@ -367,75 +234,7 @@ -7130 - -http_basic_login_with_api_token_test.rb -file - - - - -2010-09-23T14:37:45.435782Z -f6d32b05d3ebaf4c30fac1532ecae7d2 -2009-12-23T06:27:44.373427Z -3220 -edavis10 - - - - - - - - - - - - - - - - - - - - - -2856 - -disabled_rest_api_test.rb -file - - - - -2010-09-23T14:37:45.435782Z -e244128a26c244c305a434ad5dab2946 -2009-12-23T06:27:44.373427Z -3220 -edavis10 - - - - - - - - - - - - - - - - - - - - - -3819 +7134 layout_test.rb file
--- a/test/integration/.svn/prop-base/issues_api_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/test/integration/.svn/prop-base/projects_api_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -K 13 -svn:eol-style -V 6 -native -END
--- a/test/integration/.svn/text-base/account_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/text-base/account_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -44,7 +44,7 @@ # User logs in with 'autologin' checked post '/login', :username => user.login, :password => 'admin', :autologin => 1 - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' token = Token.find :first assert_not_nil token assert_equal user, token.user @@ -105,7 +105,7 @@ post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar"}, :password => "newpass", :password_confirmation => "newpass" - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' follow_redirect! assert_response :success assert_template 'my/account' @@ -152,7 +152,7 @@ AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66}) post 'account/login', :username => 'foo', :password => 'bar' - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' user = User.find_by_login('foo') assert user.is_a?(User) @@ -187,7 +187,7 @@ sid = session[:session_id] post '/login', :username => 'admin', :password => 'admin' - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' assert_not_equal sid, session[:session_id], "login should reset session" assert_equal 1, session[:user_id] sid = session[:session_id]
--- a/test/integration/.svn/text-base/admin_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/text-base/admin_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -22,10 +22,10 @@ def test_add_user log_user("admin", "admin") - get "/users/add" + get "/users/new" assert_response :success - assert_template "users/add" - post "/users/add", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09" + assert_template "users/new" + post "/users/create", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09" user = User.find_by_login("psmith") assert_kind_of User, user @@ -35,15 +35,15 @@ assert_kind_of User, logged_user assert_equal "Paul", logged_user.firstname - post "users/edit", :id => user.id, :user => { :status => User::STATUS_LOCKED } + put "users/#{user.id}", :id => user.id, :user => { :status => User::STATUS_LOCKED } assert_redirected_to "/users/#{ user.id }/edit" locked_user = User.try_to_login("psmith", "psmith09") assert_equal nil, locked_user end test "Add a user as an anonymous user should fail" do - post '/users/add', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09" + post '/users/create', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09" assert_response :redirect - assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers%2Fnew" + assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers" end end
--- a/test/integration/.svn/text-base/api_token_login_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class ApiTokenLoginTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - end -end
--- a/test/integration/.svn/text-base/disabled_rest_api_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class DisabledRestApi < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '0' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '1' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news with the API disabled" do - - context "in :xml format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - end - end -end
--- a/test/integration/.svn/text-base/http_basic_login_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class HttpBasicLoginTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "without credentials" do - setup do - get "/projects/onlinestore/news.xml" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "include_www_authenticate_header" do - assert @controller.response.headers.has_key?('WWW-Authenticate') - end - end - end - - context "in :json format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "without credentials" do - setup do - get "/projects/onlinestore/news.json" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "include_www_authenticate_header" do - assert @controller.response.headers.has_key?('WWW-Authenticate') - end - end - end -end
--- a/test/integration/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - end -end
--- a/test/integration/.svn/text-base/issues_api_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,349 +0,0 @@ -# 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 IssuesApiTest < ActionController::IntegrationTest - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - Setting.rest_api_enabled = '1' - end - - context "/index.xml" do - setup do - get '/issues.xml' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - end - - context "/index.json" do - setup do - get '/issues.json' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - end - - context "/index.xml with filter" do - setup do - get '/issues.xml?status_id=5' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - should "show only issues with the status_id" do - assert_tag :tag => 'issues', - :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), - :only => { :tag => 'issue' } } - end - end - - context "/index.json with filter" do - setup do - get '/issues.json?status_id=5' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - - should "show only issues with the status_id" do - json = ActiveSupport::JSON.decode(response.body) - status_ids_used = json.collect {|j| j['status_id'] } - assert_equal 3, status_ids_used.length - assert status_ids_used.all? {|id| id == 5 } - end - - end - - context "/issues/1.xml" do - setup do - get '/issues/1.xml' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - end - - context "/issues/1.json" do - setup do - get '/issues/1.json' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - end - - context "POST /issues.xml" do - setup do - @issue_count = Issue.count - @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3} - post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :created - should_respond_with_content_type 'application/xml' - - should "create an issue with the attributes" do - assert_equal Issue.count, @issue_count + 1 - - issue = Issue.first(:order => 'id DESC') - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) - end - end - end - - context "POST /issues.xml with failure" do - setup do - @attributes = {:project_id => 1} - post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/xml' - - should "have an errors tag" do - assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} - end - end - - context "POST /issues.json" do - setup do - @issue_count = Issue.count - @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3} - post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :created - should_respond_with_content_type 'application/json' - - should "create an issue with the attributes" do - assert_equal Issue.count, @issue_count + 1 - - issue = Issue.first(:order => 'id DESC') - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) - end - end - end - - context "POST /issues.json with failure" do - setup do - @attributes = {:project_id => 1} - post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/json' - - should "have an errors element" do - json = ActiveSupport::JSON.decode(response.body) - assert_equal "can't be blank", json.first['subject'] - end - end - - context "PUT /issues/1.xml" do - setup do - @issue_count = Issue.count - @journal_count = Journal.count - @attributes = {:subject => 'API update', :notes => 'A new note'} - - put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/xml' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "create a new journal" do - assert_equal Journal.count, @journal_count + 1 - end - - should "add the note to the journal" do - journal = Journal.last - assert_equal "A new note", journal.notes - end - - should "update the issue" do - issue = Issue.find(1) - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) unless attribute == :notes - end - end - - end - - context "PUT /issues/1.xml with failed update" do - setup do - @attributes = {:subject => ''} - @issue_count = Issue.count - @journal_count = Journal.count - - put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/xml' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "not create a new journal" do - assert_equal Journal.count, @journal_count - end - - should "have an errors tag" do - assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} - end - end - - context "PUT /issues/1.json" do - setup do - @issue_count = Issue.count - @journal_count = Journal.count - @attributes = {:subject => 'API update', :notes => 'A new note'} - - put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/json' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "create a new journal" do - assert_equal Journal.count, @journal_count + 1 - end - - should "add the note to the journal" do - journal = Journal.last - assert_equal "A new note", journal.notes - end - - should "update the issue" do - issue = Issue.find(1) - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) unless attribute == :notes - end - end - - end - - context "PUT /issues/1.json with failed update" do - setup do - @attributes = {:subject => ''} - @issue_count = Issue.count - @journal_count = Journal.count - - put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/json' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "not create a new journal" do - assert_equal Journal.count, @journal_count - end - - should "have an errors attribute" do - json = ActiveSupport::JSON.decode(response.body) - assert_equal "can't be blank", json.first['subject'] - end - end - - context "DELETE /issues/1.xml" do - setup do - @issue_count = Issue.count - delete '/issues/1.xml', {}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/xml' - - should "delete the issue" do - assert_equal Issue.count, @issue_count -1 - assert_nil Issue.find_by_id(1) - end - end - - context "DELETE /issues/1.json" do - setup do - @issue_count = Issue.count - delete '/issues/1.json', {}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/json' - - should "delete the issue" do - assert_equal Issue.count, @issue_count -1 - assert_nil Issue.find_by_id(1) - end - end - - def credentials(user, password=nil) - ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) - end -end
--- a/test/integration/.svn/text-base/issues_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/text-base/issues_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -72,7 +72,7 @@ put 'issues/1', :notes => 'Some notes', :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'This is an attachment'}} - assert_redirected_to "issues/1" + assert_redirected_to "/issues/1" # make sure attachment was saved attachment = Issue.find(1).attachments.find_by_filename("testfile.txt")
--- a/test/integration/.svn/text-base/projects_api_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -# 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 ProjectsApiTest < ActionController::IntegrationTest - fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details, - :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, - :attachments, :custom_fields, :custom_values, :time_entries - - def setup - Setting.rest_api_enabled = '1' - end - - def test_index - get '/projects.xml' - assert_response :success - assert_equal 'application/xml', @response.content_type - end - - def test_show - get '/projects/1.xml' - assert_response :success - assert_equal 'application/xml', @response.content_type - end - - def test_create - attributes = {:name => 'API test', :identifier => 'api-test'} - assert_difference 'Project.count' do - post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') - end - assert_response :created - assert_equal 'application/xml', @response.content_type - project = Project.first(:order => 'id DESC') - attributes.each do |attribute, value| - assert_equal value, project.send(attribute) - end - end - - def test_create_failure - attributes = {:name => 'API test'} - assert_no_difference 'Project.count' do - post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') - end - assert_response :unprocessable_entity - assert_equal 'application/xml', @response.content_type - assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"} - end - - def test_update - attributes = {:name => 'API update'} - assert_no_difference 'Project.count' do - put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') - end - assert_response :ok - assert_equal 'application/xml', @response.content_type - project = Project.find(1) - attributes.each do |attribute, value| - assert_equal value, project.send(attribute) - end - end - - def test_update_failure - attributes = {:name => ''} - assert_no_difference 'Project.count' do - put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') - end - assert_response :unprocessable_entity - assert_equal 'application/xml', @response.content_type - assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"} - end - - def test_destroy - assert_difference 'Project.count', -1 do - delete '/projects/2.xml', {}, :authorization => credentials('admin') - end - assert_response :ok - assert_equal 'application/xml', @response.content_type - assert_nil Project.find_by_id(2) - end - - def credentials(user, password=nil) - ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) - end -end
--- a/test/integration/.svn/text-base/projects_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/text-base/projects_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ assert_response :success assert_template "admin/projects" post "projects/archive", :id => 1 - assert_redirected_to "admin/projects" + assert_redirected_to "/admin/projects" assert !Project.find(1).active? get 'projects/1' @@ -36,7 +36,7 @@ assert_response 403 post "projects/unarchive", :id => 1 - assert_redirected_to "admin/projects" + assert_redirected_to "/admin/projects" assert Project.find(1).active? get "projects/1" assert_response :success
--- a/test/integration/.svn/text-base/routing_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/.svn/text-base/routing_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -157,13 +157,14 @@ should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567' should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234' should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567' + should_route :get, "/news/preview", :controller => 'previews', :action => 'news' + + should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567' + should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567' - should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567' - should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567' - should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567' - - should_route :put, "/news/567/edit", :controller => 'news', :action => 'update', :id => '567' + should_route :put, "/news/567", :controller => 'news', :action => 'update', :id => '567' + should_route :delete, "/news/567", :controller => 'news', :action => 'destroy', :id => '567' should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15' end @@ -220,40 +221,81 @@ should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine' end - context "timelogs" do - should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567' - should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook' - should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567' + context "timelogs (global)" do + should_route :get, "/time_entries", :controller => 'timelog', :action => 'index' + should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'index', :format => 'csv' + should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'index', :format => 'atom' + should_route :get, "/time_entries/new", :controller => 'timelog', :action => 'new' should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22' - should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report' - should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567' - should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv' - should_route :get, "/time_entries", :controller => 'timelog', :action => 'details' - should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv' - should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom' - should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567' - should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv' - should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom' - should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234' - should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv' - should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom' - should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123' - should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55' + should_route :post, "/time_entries", :controller => 'timelog', :action => 'create' + + should_route :put, "/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22' + + should_route :delete, "/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55' + end + + context "timelogs (scoped under project)" do + should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'index', :project_id => '567' + should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'csv' + should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'atom' + should_route :get, "/projects/567/time_entries/new", :controller => 'timelog', :action => 'new', :project_id => '567' + should_route :get, "/projects/567/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :project_id => '567' + + should_route :post, "/projects/567/time_entries", :controller => 'timelog', :action => 'create', :project_id => '567' + + should_route :put, "/projects/567/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :project_id => '567' + + should_route :delete, "/projects/567/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :project_id => '567' + end + + context "timelogs (scoped under issues)" do + should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234' + should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'csv' + should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'atom' + should_route :get, "/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234' + should_route :get, "/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234' + + should_route :post, "/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234' + + should_route :put, "/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234' + + should_route :delete, "/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234' + end + + context "timelogs (scoped under project and issues)" do + should_route :get, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook' + should_route :get, "/projects/ecookbook/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'csv' + should_route :get, "/projects/ecookbook/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'atom' + should_route :get, "/projects/ecookbook/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234', :project_id => 'ecookbook' + should_route :get, "/projects/ecookbook/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234', :project_id => 'ecookbook' + + should_route :post, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234', :project_id => 'ecookbook' + + should_route :put, "/projects/ecookbook/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234', :project_id => 'ecookbook' + + should_route :delete, "/projects/ecookbook/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234', :project_id => 'ecookbook' + end + + context "time_entry_reports" do + should_route :get, "/time_entries/report", :controller => 'time_entry_reports', :action => 'report' + should_route :get, "/projects/567/time_entries/report", :controller => 'time_entry_reports', :action => 'report', :project_id => '567' + should_route :get, "/projects/567/time_entries/report.csv", :controller => 'time_entry_reports', :action => 'report', :project_id => '567', :format => 'csv' end context "users" do should_route :get, "/users", :controller => 'users', :action => 'index' should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44' - should_route :get, "/users/new", :controller => 'users', :action => 'add' + should_route :get, "/users/new", :controller => 'users', :action => 'new' should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444' should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership' - should_route :post, "/users/new", :controller => 'users', :action => 'add' - should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444' + should_route :post, "/users", :controller => 'users', :action => 'create' should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123' should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55' should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12' + + should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444' end # TODO: should they all be scoped under /projects/:project_id ? @@ -269,23 +311,27 @@ end context "wiki (singular, project's pages)" do - should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567' - should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala' - should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page' - should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation' - should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1' - should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2' - should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida' - should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index' - should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index' - should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index' - should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export' + should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'show', :project_id => '567' + should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'show', :project_id => '567', :id => 'lalala' + should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :id => 'my_page' + should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :id => 'CookBook_documentation' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2', :version_from => '1' + should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :id => 'CookBook_documentation', :version => '2' + should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida' + should_route :get, "/projects/567/wiki/index", :controller => 'wiki', :action => 'index', :project_id => '567' + should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567' + should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567' - should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page' - should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation' - should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida' - should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida' - should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida' + should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :id => 'CookBook_documentation' + should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida' + should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :id => 'ladida' + should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :id => 'ladida' + + should_route :put, "/projects/567/wiki/my_page", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page' + + should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :id => 'ladida' end context "wikis (plural, admin setup)" do
--- a/test/integration/account_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/account_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -44,7 +44,7 @@ # User logs in with 'autologin' checked post '/login', :username => user.login, :password => 'admin', :autologin => 1 - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' token = Token.find :first assert_not_nil token assert_equal user, token.user @@ -105,7 +105,7 @@ post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar"}, :password => "newpass", :password_confirmation => "newpass" - assert_redirected_to 'my/account' + assert_redirected_to '/my/account' follow_redirect! assert_response :success assert_template 'my/account' @@ -152,7 +152,7 @@ AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66}) post 'account/login', :username => 'foo', :password => 'bar' - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' user = User.find_by_login('foo') assert user.is_a?(User) @@ -187,7 +187,7 @@ sid = session[:session_id] post '/login', :username => 'admin', :password => 'admin' - assert_redirected_to 'my/page' + assert_redirected_to '/my/page' assert_not_equal sid, session[:session_id], "login should reset session" assert_equal 1, session[:user_id] sid = session[:session_id]
--- a/test/integration/admin_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/admin_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -22,10 +22,10 @@ def test_add_user log_user("admin", "admin") - get "/users/add" + get "/users/new" assert_response :success - assert_template "users/add" - post "/users/add", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09" + assert_template "users/new" + post "/users/create", :user => { :login => "psmith", :firstname => "Paul", :lastname => "Smith", :mail => "psmith@somenet.foo", :language => "en" }, :password => "psmith09", :password_confirmation => "psmith09" user = User.find_by_login("psmith") assert_kind_of User, user @@ -35,15 +35,15 @@ assert_kind_of User, logged_user assert_equal "Paul", logged_user.firstname - post "users/edit", :id => user.id, :user => { :status => User::STATUS_LOCKED } + put "users/#{user.id}", :id => user.id, :user => { :status => User::STATUS_LOCKED } assert_redirected_to "/users/#{ user.id }/edit" locked_user = User.try_to_login("psmith", "psmith09") assert_equal nil, locked_user end test "Add a user as an anonymous user should fail" do - post '/users/add', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09" + post '/users/create', :user => { :login => 'psmith', :firstname => 'Paul'}, :password => "psmith09", :password_confirmation => "psmith09" assert_response :redirect - assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers%2Fnew" + assert_redirected_to "/login?back_url=http%3A%2F%2Fwww.example.com%2Fusers" end end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,41 @@ +K 25 +svn:wc:ra_dav:version-url +V 50 +/svn/!svn/ver/4397/trunk/test/integration/api_test +END +token_authentication_test.rb +K 25 +svn:wc:ra_dav:version-url +V 79 +/svn/!svn/ver/4358/trunk/test/integration/api_test/token_authentication_test.rb +END +http_basic_login_test.rb +K 25 +svn:wc:ra_dav:version-url +V 75 +/svn/!svn/ver/4360/trunk/test/integration/api_test/http_basic_login_test.rb +END +projects_test.rb +K 25 +svn:wc:ra_dav:version-url +V 67 +/svn/!svn/ver/4397/trunk/test/integration/api_test/projects_test.rb +END +issues_test.rb +K 25 +svn:wc:ra_dav:version-url +V 65 +/svn/!svn/ver/4397/trunk/test/integration/api_test/issues_test.rb +END +http_basic_login_with_api_token_test.rb +K 25 +svn:wc:ra_dav:version-url +V 90 +/svn/!svn/ver/4363/trunk/test/integration/api_test/http_basic_login_with_api_token_test.rb +END +disabled_rest_api_test.rb +K 25 +svn:wc:ra_dav:version-url +V 76 +/svn/!svn/ver/4357/trunk/test/integration/api_test/disabled_rest_api_test.rb +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,232 @@ +10 + +dir +4411 +http://redmine.rubyforge.org/svn/trunk/test/integration/api_test +http://redmine.rubyforge.org/svn + + + +2010-11-13T10:05:43.644565Z +4397 +jplang + + + + + + + + + + + + + + +e93f8b46-1217-0410-a6f0-8f06a7374b81 + +token_authentication_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +65fbddeb3566ca683746b74e4cbbcedd +2010-11-01T15:45:03.207475Z +4358 +edavis10 + + + + + + + + + + + + + + + + + + + + + +606 + +http_basic_login_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +c8145f134a31604365baa69990b0233f +2010-11-02T15:52:06.649052Z +4360 +edavis10 + + + + + + + + + + + + + + + + + + + + + +830 + +projects_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +925aa948a6a6bcf558ea5270731a93e5 +2010-11-13T10:05:43.644565Z +4397 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +4223 + +issues_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +4d1156dc608214ea129768309dd61963 +2010-11-13T10:05:43.644565Z +4397 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +11171 + +http_basic_login_with_api_token_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +48bd13d41a1e011f9bdde27bc8cf034c +2010-11-03T16:48:23.980579Z +4363 +edavis10 + + + + + + + + + + + + + + + + + + + + + +634 + +disabled_rest_api_test.rb +file + + + + +2010-11-19T13:04:46.164708Z +5294c8d805e67e246bb1535b4fe769d4 +2010-11-01T15:26:05.436106Z +4357 +edavis10 + + + + + + + + + + + + + + + + + + + + + +3835 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/prop-base/issues_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/prop-base/projects_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,5 @@ +K 13 +svn:eol-style +V 6 +native +END
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/disabled_rest_api_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,110 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::DisabledRestApiTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '0' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '1' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news with the API disabled" do + + context "in :xml format" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + get "/news.xml?key=#{@token.value}" + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + get "/news.xml", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + get "/news.xml", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + + context "in :json format" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + get "/news.json?key=#{@token.value}" + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + get "/news.json", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') + get "/news.json", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/http_basic_login_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,31 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::HttpBasicLoginTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + setup do + project = Project.find('onlinestore') + EnabledModule.create(:project => project, :name => 'news') + end + + context "in :xml format" do + should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.xml") + end + + context "in :json format" do + should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.json") + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/http_basic_login_with_api_token_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,27 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + + context "in :xml format" do + should_allow_http_basic_auth_with_key(:get, "/news.xml") + end + + context "in :json format" do + should_allow_http_basic_auth_with_key(:get, "/news.json") + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/issues_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,340 @@ +# 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 ApiTest::IssuesTest < ActionController::IntegrationTest + fixtures :projects, + :users, + :roles, + :members, + :member_roles, + :issues, + :issue_statuses, + :versions, + :trackers, + :projects_trackers, + :issue_categories, + :enabled_modules, + :enumerations, + :attachments, + :workflows, + :custom_fields, + :custom_values, + :custom_fields_projects, + :custom_fields_trackers, + :time_entries, + :journals, + :journal_details, + :queries + + def setup + Setting.rest_api_enabled = '1' + end + + # Use a private project to make sure auth is really working and not just + # only showing public issues. + context "/index.xml" do + should_allow_api_authentication(:get, "/projects/private-child/issues.xml") + end + + context "/index.json" do + should_allow_api_authentication(:get, "/projects/private-child/issues.json") + end + + context "/index.xml with filter" do + should_allow_api_authentication(:get, "/projects/private-child/issues.xml?status_id=5") + + should "show only issues with the status_id" do + get '/issues.xml?status_id=5' + assert_tag :tag => 'issues', + :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), + :only => { :tag => 'issue' } } + end + end + + context "/index.json with filter" do + should_allow_api_authentication(:get, "/projects/private-child/issues.json?status_id=5") + + should "show only issues with the status_id" do + get '/issues.json?status_id=5' + + json = ActiveSupport::JSON.decode(response.body) + status_ids_used = json.collect {|j| j['status_id'] } + assert_equal 3, status_ids_used.length + assert status_ids_used.all? {|id| id == 5 } + end + + end + + # Issue 6 is on a private project + context "/issues/6.xml" do + should_allow_api_authentication(:get, "/issues/6.xml") + end + + context "/issues/6.json" do + should_allow_api_authentication(:get, "/issues/6.json") + end + + context "POST /issues.xml" do + should_allow_api_authentication(:post, + '/issues.xml', + {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, + {:success_code => :created}) + + should "create an issue with the attributes" do + assert_difference('Issue.count') do + post '/issues.xml', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith') + end + + issue = Issue.first(:order => 'id DESC') + assert_equal 1, issue.project_id + assert_equal 2, issue.tracker_id + assert_equal 3, issue.status_id + assert_equal 'API test', issue.subject + + assert_response :created + assert_equal 'application/xml', @response.content_type + assert_tag 'issue', :child => {:tag => 'id', :content => issue.id.to_s} + end + end + + context "POST /issues.xml with failure" do + should_allow_api_authentication(:post, + '/issues.xml', + {:issue => {:project_id => 1}}, + {:success_code => :unprocessable_entity}) + + should "have an errors tag" do + assert_no_difference('Issue.count') do + post '/issues.xml', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith') + end + + assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} + end + end + + context "POST /issues.json" do + should_allow_api_authentication(:post, + '/issues.json', + {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, + {:success_code => :created}) + + should "create an issue with the attributes" do + assert_difference('Issue.count') do + post '/issues.json', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith') + end + + issue = Issue.first(:order => 'id DESC') + assert_equal 1, issue.project_id + assert_equal 2, issue.tracker_id + assert_equal 3, issue.status_id + assert_equal 'API test', issue.subject + end + + end + + context "POST /issues.json with failure" do + should_allow_api_authentication(:post, + '/issues.json', + {:issue => {:project_id => 1}}, + {:success_code => :unprocessable_entity}) + + should "have an errors element" do + assert_no_difference('Issue.count') do + post '/issues.json', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith') + end + + json = ActiveSupport::JSON.decode(response.body) + assert_equal "can't be blank", json.first['subject'] + end + end + + # Issue 6 is on a private project + context "PUT /issues/6.xml" do + setup do + @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.xml', + {:issue => {:subject => 'API update', :notes => 'A new note'}}, + {:success_code => :ok}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "create a new journal" do + assert_difference('Journal.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "add the note to the journal" do + put '/issues/6.xml', @parameters, @headers + + journal = Journal.last + assert_equal "A new note", journal.notes + end + + should "update the issue" do + put '/issues/6.xml', @parameters, @headers + + issue = Issue.find(6) + assert_equal "API update", issue.subject + end + + end + + context "PUT /issues/6.xml with failed update" do + setup do + @parameters = {:issue => {:subject => ''}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.xml', + {:issue => {:subject => ''}}, # Missing subject should fail + {:success_code => :unprocessable_entity}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "not create a new journal" do + assert_no_difference('Journal.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "have an errors tag" do + put '/issues/6.xml', @parameters, @headers + + assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} + end + end + + context "PUT /issues/6.json" do + setup do + @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.json', + {:issue => {:subject => 'API update', :notes => 'A new note'}}, + {:success_code => :ok}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "create a new journal" do + assert_difference('Journal.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "add the note to the journal" do + put '/issues/6.json', @parameters, @headers + + journal = Journal.last + assert_equal "A new note", journal.notes + end + + should "update the issue" do + put '/issues/6.json', @parameters, @headers + + issue = Issue.find(6) + assert_equal "API update", issue.subject + end + + end + + context "PUT /issues/6.json with failed update" do + setup do + @parameters = {:issue => {:subject => ''}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.json', + {:issue => {:subject => ''}}, # Missing subject should fail + {:success_code => :unprocessable_entity}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "not create a new journal" do + assert_no_difference('Journal.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "have an errors attribute" do + put '/issues/6.json', @parameters, @headers + + json = ActiveSupport::JSON.decode(response.body) + assert_equal "can't be blank", json.first['subject'] + end + end + + context "DELETE /issues/1.xml" do + should_allow_api_authentication(:delete, + '/issues/6.xml', + {}, + {:success_code => :ok}) + + should "delete the issue" do + assert_difference('Issue.count',-1) do + delete '/issues/6.xml', {}, :authorization => credentials('jsmith') + end + + assert_nil Issue.find_by_id(6) + end + end + + context "DELETE /issues/1.json" do + should_allow_api_authentication(:delete, + '/issues/6.json', + {}, + {:success_code => :ok}) + + should "delete the issue" do + assert_difference('Issue.count',-1) do + delete '/issues/6.json', {}, :authorization => credentials('jsmith') + end + + assert_nil Issue.find_by_id(6) + end + end + + def credentials(user, password=nil) + ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/projects_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,111 @@ +# 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 ApiTest::ProjectsTest < ActionController::IntegrationTest + fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details, + :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, + :attachments, :custom_fields, :custom_values, :time_entries + + def setup + Setting.rest_api_enabled = '1' + end + + def test_index + get '/projects.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + end + + def test_show + get '/projects/1.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + assert_tag 'custom_field', :attributes => {:name => 'Development status'}, :content => 'Stable' + end + + def test_show_should_not_display_hidden_custom_fields + ProjectCustomField.find_by_name('Development status').update_attribute :visible, false + get '/projects/1.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + assert_no_tag 'custom_field', :attributes => {:name => 'Development status'} + end + + def test_create + attributes = {:name => 'API test', :identifier => 'api-test'} + assert_difference 'Project.count' do + post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') + end + + project = Project.first(:order => 'id DESC') + attributes.each do |attribute, value| + assert_equal value, project.send(attribute) + end + + assert_response :created + assert_equal 'application/xml', @response.content_type + assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s} + end + + def test_create_failure + attributes = {:name => 'API test'} + assert_no_difference 'Project.count' do + post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') + end + assert_response :unprocessable_entity + assert_equal 'application/xml', @response.content_type + assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"} + end + + def test_update + attributes = {:name => 'API update'} + assert_no_difference 'Project.count' do + put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') + end + assert_response :ok + assert_equal 'application/xml', @response.content_type + project = Project.find(1) + attributes.each do |attribute, value| + assert_equal value, project.send(attribute) + end + end + + def test_update_failure + attributes = {:name => ''} + assert_no_difference 'Project.count' do + put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') + end + assert_response :unprocessable_entity + assert_equal 'application/xml', @response.content_type + assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"} + end + + def test_destroy + assert_difference 'Project.count', -1 do + delete '/projects/2.xml', {}, :authorization => credentials('admin') + end + assert_response :ok + assert_equal 'application/xml', @response.content_type + assert_nil Project.find_by_id(2) + end + + def credentials(user, password=nil) + ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/.svn/text-base/token_authentication_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,26 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::TokenAuthenticationTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + context "in :xml format" do + should_allow_key_based_auth(:get, "/news.xml") + end + + context "in :json format" do + should_allow_key_based_auth(:get, "/news.json") + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/disabled_rest_api_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,110 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::DisabledRestApiTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '0' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '1' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news with the API disabled" do + + context "in :xml format" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + get "/news.xml?key=#{@token.value}" + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + get "/news.xml", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + get "/news.xml", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :xml + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + + context "in :json format" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + get "/news.json?key=#{@token.value}" + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + get "/news.json", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') + get "/news.json", nil, :authorization => @authorization + end + + should_respond_with :unauthorized + should_respond_with_content_type :json + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/http_basic_login_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,31 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::HttpBasicLoginTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + setup do + project = Project.find('onlinestore') + EnabledModule.create(:project => project, :name => 'news') + end + + context "in :xml format" do + should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.xml") + end + + context "in :json format" do + should_allow_http_basic_auth_with_username_and_password(:get, "/projects/onlinestore/news.json") + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/http_basic_login_with_api_token_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,27 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + + context "in :xml format" do + should_allow_http_basic_auth_with_key(:get, "/news.xml") + end + + context "in :json format" do + should_allow_http_basic_auth_with_key(:get, "/news.json") + end + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/issues_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,340 @@ +# 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 ApiTest::IssuesTest < ActionController::IntegrationTest + fixtures :projects, + :users, + :roles, + :members, + :member_roles, + :issues, + :issue_statuses, + :versions, + :trackers, + :projects_trackers, + :issue_categories, + :enabled_modules, + :enumerations, + :attachments, + :workflows, + :custom_fields, + :custom_values, + :custom_fields_projects, + :custom_fields_trackers, + :time_entries, + :journals, + :journal_details, + :queries + + def setup + Setting.rest_api_enabled = '1' + end + + # Use a private project to make sure auth is really working and not just + # only showing public issues. + context "/index.xml" do + should_allow_api_authentication(:get, "/projects/private-child/issues.xml") + end + + context "/index.json" do + should_allow_api_authentication(:get, "/projects/private-child/issues.json") + end + + context "/index.xml with filter" do + should_allow_api_authentication(:get, "/projects/private-child/issues.xml?status_id=5") + + should "show only issues with the status_id" do + get '/issues.xml?status_id=5' + assert_tag :tag => 'issues', + :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), + :only => { :tag => 'issue' } } + end + end + + context "/index.json with filter" do + should_allow_api_authentication(:get, "/projects/private-child/issues.json?status_id=5") + + should "show only issues with the status_id" do + get '/issues.json?status_id=5' + + json = ActiveSupport::JSON.decode(response.body) + status_ids_used = json.collect {|j| j['status_id'] } + assert_equal 3, status_ids_used.length + assert status_ids_used.all? {|id| id == 5 } + end + + end + + # Issue 6 is on a private project + context "/issues/6.xml" do + should_allow_api_authentication(:get, "/issues/6.xml") + end + + context "/issues/6.json" do + should_allow_api_authentication(:get, "/issues/6.json") + end + + context "POST /issues.xml" do + should_allow_api_authentication(:post, + '/issues.xml', + {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, + {:success_code => :created}) + + should "create an issue with the attributes" do + assert_difference('Issue.count') do + post '/issues.xml', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith') + end + + issue = Issue.first(:order => 'id DESC') + assert_equal 1, issue.project_id + assert_equal 2, issue.tracker_id + assert_equal 3, issue.status_id + assert_equal 'API test', issue.subject + + assert_response :created + assert_equal 'application/xml', @response.content_type + assert_tag 'issue', :child => {:tag => 'id', :content => issue.id.to_s} + end + end + + context "POST /issues.xml with failure" do + should_allow_api_authentication(:post, + '/issues.xml', + {:issue => {:project_id => 1}}, + {:success_code => :unprocessable_entity}) + + should "have an errors tag" do + assert_no_difference('Issue.count') do + post '/issues.xml', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith') + end + + assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} + end + end + + context "POST /issues.json" do + should_allow_api_authentication(:post, + '/issues.json', + {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, + {:success_code => :created}) + + should "create an issue with the attributes" do + assert_difference('Issue.count') do + post '/issues.json', {:issue => {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}}, :authorization => credentials('jsmith') + end + + issue = Issue.first(:order => 'id DESC') + assert_equal 1, issue.project_id + assert_equal 2, issue.tracker_id + assert_equal 3, issue.status_id + assert_equal 'API test', issue.subject + end + + end + + context "POST /issues.json with failure" do + should_allow_api_authentication(:post, + '/issues.json', + {:issue => {:project_id => 1}}, + {:success_code => :unprocessable_entity}) + + should "have an errors element" do + assert_no_difference('Issue.count') do + post '/issues.json', {:issue => {:project_id => 1}}, :authorization => credentials('jsmith') + end + + json = ActiveSupport::JSON.decode(response.body) + assert_equal "can't be blank", json.first['subject'] + end + end + + # Issue 6 is on a private project + context "PUT /issues/6.xml" do + setup do + @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.xml', + {:issue => {:subject => 'API update', :notes => 'A new note'}}, + {:success_code => :ok}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "create a new journal" do + assert_difference('Journal.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "add the note to the journal" do + put '/issues/6.xml', @parameters, @headers + + journal = Journal.last + assert_equal "A new note", journal.notes + end + + should "update the issue" do + put '/issues/6.xml', @parameters, @headers + + issue = Issue.find(6) + assert_equal "API update", issue.subject + end + + end + + context "PUT /issues/6.xml with failed update" do + setup do + @parameters = {:issue => {:subject => ''}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.xml', + {:issue => {:subject => ''}}, # Missing subject should fail + {:success_code => :unprocessable_entity}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "not create a new journal" do + assert_no_difference('Journal.count') do + put '/issues/6.xml', @parameters, @headers + end + end + + should "have an errors tag" do + put '/issues/6.xml', @parameters, @headers + + assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} + end + end + + context "PUT /issues/6.json" do + setup do + @parameters = {:issue => {:subject => 'API update', :notes => 'A new note'}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.json', + {:issue => {:subject => 'API update', :notes => 'A new note'}}, + {:success_code => :ok}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "create a new journal" do + assert_difference('Journal.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "add the note to the journal" do + put '/issues/6.json', @parameters, @headers + + journal = Journal.last + assert_equal "A new note", journal.notes + end + + should "update the issue" do + put '/issues/6.json', @parameters, @headers + + issue = Issue.find(6) + assert_equal "API update", issue.subject + end + + end + + context "PUT /issues/6.json with failed update" do + setup do + @parameters = {:issue => {:subject => ''}} + @headers = { :authorization => credentials('jsmith') } + end + + should_allow_api_authentication(:put, + '/issues/6.json', + {:issue => {:subject => ''}}, # Missing subject should fail + {:success_code => :unprocessable_entity}) + + should "not create a new issue" do + assert_no_difference('Issue.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "not create a new journal" do + assert_no_difference('Journal.count') do + put '/issues/6.json', @parameters, @headers + end + end + + should "have an errors attribute" do + put '/issues/6.json', @parameters, @headers + + json = ActiveSupport::JSON.decode(response.body) + assert_equal "can't be blank", json.first['subject'] + end + end + + context "DELETE /issues/1.xml" do + should_allow_api_authentication(:delete, + '/issues/6.xml', + {}, + {:success_code => :ok}) + + should "delete the issue" do + assert_difference('Issue.count',-1) do + delete '/issues/6.xml', {}, :authorization => credentials('jsmith') + end + + assert_nil Issue.find_by_id(6) + end + end + + context "DELETE /issues/1.json" do + should_allow_api_authentication(:delete, + '/issues/6.json', + {}, + {:success_code => :ok}) + + should "delete the issue" do + assert_difference('Issue.count',-1) do + delete '/issues/6.json', {}, :authorization => credentials('jsmith') + end + + assert_nil Issue.find_by_id(6) + end + end + + def credentials(user, password=nil) + ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/projects_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,111 @@ +# 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 ApiTest::ProjectsTest < ActionController::IntegrationTest + fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details, + :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, + :attachments, :custom_fields, :custom_values, :time_entries + + def setup + Setting.rest_api_enabled = '1' + end + + def test_index + get '/projects.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + end + + def test_show + get '/projects/1.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + assert_tag 'custom_field', :attributes => {:name => 'Development status'}, :content => 'Stable' + end + + def test_show_should_not_display_hidden_custom_fields + ProjectCustomField.find_by_name('Development status').update_attribute :visible, false + get '/projects/1.xml' + assert_response :success + assert_equal 'application/xml', @response.content_type + assert_no_tag 'custom_field', :attributes => {:name => 'Development status'} + end + + def test_create + attributes = {:name => 'API test', :identifier => 'api-test'} + assert_difference 'Project.count' do + post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') + end + + project = Project.first(:order => 'id DESC') + attributes.each do |attribute, value| + assert_equal value, project.send(attribute) + end + + assert_response :created + assert_equal 'application/xml', @response.content_type + assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s} + end + + def test_create_failure + attributes = {:name => 'API test'} + assert_no_difference 'Project.count' do + post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') + end + assert_response :unprocessable_entity + assert_equal 'application/xml', @response.content_type + assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"} + end + + def test_update + attributes = {:name => 'API update'} + assert_no_difference 'Project.count' do + put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') + end + assert_response :ok + assert_equal 'application/xml', @response.content_type + project = Project.find(1) + attributes.each do |attribute, value| + assert_equal value, project.send(attribute) + end + end + + def test_update_failure + attributes = {:name => ''} + assert_no_difference 'Project.count' do + put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') + end + assert_response :unprocessable_entity + assert_equal 'application/xml', @response.content_type + assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"} + end + + def test_destroy + assert_difference 'Project.count', -1 do + delete '/projects/2.xml', {}, :authorization => credentials('admin') + end + assert_response :ok + assert_equal 'application/xml', @response.content_type + assert_nil Project.find_by_id(2) + end + + def credentials(user, password=nil) + ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) + end +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/integration/api_test/token_authentication_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,26 @@ +require "#{File.dirname(__FILE__)}/../../test_helper" + +class ApiTest::TokenAuthenticationTest < ActionController::IntegrationTest + fixtures :all + + def setup + Setting.rest_api_enabled = '1' + Setting.login_required = '1' + end + + def teardown + Setting.rest_api_enabled = '0' + Setting.login_required = '0' + end + + # Using the NewsController because it's a simple API. + context "get /news" do + context "in :xml format" do + should_allow_key_based_auth(:get, "/news.xml") + end + + context "in :json format" do + should_allow_key_based_auth(:get, "/news.json") + end + end +end
--- a/test/integration/api_token_login_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class ApiTokenLoginTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - end -end
--- a/test/integration/disabled_rest_api_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class DisabledRestApi < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '0' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '1' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news with the API disabled" do - - context "in :xml format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.xml?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid api token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - get "/news.json?key=#{@token.value}" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - end - end -end
--- a/test/integration/http_basic_login_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class HttpBasicLoginTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - - context "without credentials" do - setup do - get "/projects/onlinestore/news.xml" - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "include_www_authenticate_header" do - assert @controller.response.headers.has_key?('WWW-Authenticate') - end - end - end - - context "in :json format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "without credentials" do - setup do - get "/projects/onlinestore/news.json" - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "include_www_authenticate_header" do - assert @controller.response.headers.has_key?('WWW-Authenticate') - end - end - end -end
--- a/test/integration/http_basic_login_with_api_token_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -require "#{File.dirname(__FILE__)}/../test_helper" - -class HttpBasicLoginWithApiTokenTest < ActionController::IntegrationTest - fixtures :all - - def setup - Setting.rest_api_enabled = '1' - Setting.login_required = '1' - end - - def teardown - Setting.rest_api_enabled = '0' - Setting.login_required = '0' - end - - # Using the NewsController because it's a simple API. - context "get /news" do - - context "in :xml format" do - context "with a valid HTTP authentication using the API token" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :xml - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') - get "/news.xml", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :xml - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - context "in :json format" do - context "with a valid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'api') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :success - should_respond_with_content_type :json - should "login as the user" do - assert_equal @user, User.current - end - end - - context "with an invalid HTTP authentication" do - setup do - @user = User.generate_with_protected! - @token = Token.generate!(:user => @user, :action => 'feeds') - @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'DoesNotMatter') - get "/news.json", nil, :authorization => @authorization - end - - should_respond_with :unauthorized - should_respond_with_content_type :json - should "not login as the user" do - assert_equal User.anonymous, User.current - end - end - end - - end -end
--- a/test/integration/issues_api_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,349 +0,0 @@ -# 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 IssuesApiTest < ActionController::IntegrationTest - fixtures :projects, - :users, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations, - :attachments, - :workflows, - :custom_fields, - :custom_values, - :custom_fields_projects, - :custom_fields_trackers, - :time_entries, - :journals, - :journal_details, - :queries - - def setup - Setting.rest_api_enabled = '1' - end - - context "/index.xml" do - setup do - get '/issues.xml' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - end - - context "/index.json" do - setup do - get '/issues.json' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - end - - context "/index.xml with filter" do - setup do - get '/issues.xml?status_id=5' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - should "show only issues with the status_id" do - assert_tag :tag => 'issues', - :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}), - :only => { :tag => 'issue' } } - end - end - - context "/index.json with filter" do - setup do - get '/issues.json?status_id=5' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - - should "show only issues with the status_id" do - json = ActiveSupport::JSON.decode(response.body) - status_ids_used = json.collect {|j| j['status_id'] } - assert_equal 3, status_ids_used.length - assert status_ids_used.all? {|id| id == 5 } - end - - end - - context "/issues/1.xml" do - setup do - get '/issues/1.xml' - end - - should_respond_with :success - should_respond_with_content_type 'application/xml' - end - - context "/issues/1.json" do - setup do - get '/issues/1.json' - end - - should_respond_with :success - should_respond_with_content_type 'application/json' - - should 'return a valid JSON string' do - assert ActiveSupport::JSON.decode(response.body) - end - end - - context "POST /issues.xml" do - setup do - @issue_count = Issue.count - @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3} - post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :created - should_respond_with_content_type 'application/xml' - - should "create an issue with the attributes" do - assert_equal Issue.count, @issue_count + 1 - - issue = Issue.first(:order => 'id DESC') - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) - end - end - end - - context "POST /issues.xml with failure" do - setup do - @attributes = {:project_id => 1} - post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/xml' - - should "have an errors tag" do - assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} - end - end - - context "POST /issues.json" do - setup do - @issue_count = Issue.count - @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3} - post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :created - should_respond_with_content_type 'application/json' - - should "create an issue with the attributes" do - assert_equal Issue.count, @issue_count + 1 - - issue = Issue.first(:order => 'id DESC') - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) - end - end - end - - context "POST /issues.json with failure" do - setup do - @attributes = {:project_id => 1} - post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/json' - - should "have an errors element" do - json = ActiveSupport::JSON.decode(response.body) - assert_equal "can't be blank", json.first['subject'] - end - end - - context "PUT /issues/1.xml" do - setup do - @issue_count = Issue.count - @journal_count = Journal.count - @attributes = {:subject => 'API update', :notes => 'A new note'} - - put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/xml' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "create a new journal" do - assert_equal Journal.count, @journal_count + 1 - end - - should "add the note to the journal" do - journal = Journal.last - assert_equal "A new note", journal.notes - end - - should "update the issue" do - issue = Issue.find(1) - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) unless attribute == :notes - end - end - - end - - context "PUT /issues/1.xml with failed update" do - setup do - @attributes = {:subject => ''} - @issue_count = Issue.count - @journal_count = Journal.count - - put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/xml' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "not create a new journal" do - assert_equal Journal.count, @journal_count - end - - should "have an errors tag" do - assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"} - end - end - - context "PUT /issues/1.json" do - setup do - @issue_count = Issue.count - @journal_count = Journal.count - @attributes = {:subject => 'API update', :notes => 'A new note'} - - put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/json' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "create a new journal" do - assert_equal Journal.count, @journal_count + 1 - end - - should "add the note to the journal" do - journal = Journal.last - assert_equal "A new note", journal.notes - end - - should "update the issue" do - issue = Issue.find(1) - @attributes.each do |attribute, value| - assert_equal value, issue.send(attribute) unless attribute == :notes - end - end - - end - - context "PUT /issues/1.json with failed update" do - setup do - @attributes = {:subject => ''} - @issue_count = Issue.count - @journal_count = Journal.count - - put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith') - end - - should_respond_with :unprocessable_entity - should_respond_with_content_type 'application/json' - - should "not create a new issue" do - assert_equal Issue.count, @issue_count - end - - should "not create a new journal" do - assert_equal Journal.count, @journal_count - end - - should "have an errors attribute" do - json = ActiveSupport::JSON.decode(response.body) - assert_equal "can't be blank", json.first['subject'] - end - end - - context "DELETE /issues/1.xml" do - setup do - @issue_count = Issue.count - delete '/issues/1.xml', {}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/xml' - - should "delete the issue" do - assert_equal Issue.count, @issue_count -1 - assert_nil Issue.find_by_id(1) - end - end - - context "DELETE /issues/1.json" do - setup do - @issue_count = Issue.count - delete '/issues/1.json', {}, :authorization => credentials('jsmith') - end - - should_respond_with :ok - should_respond_with_content_type 'application/json' - - should "delete the issue" do - assert_equal Issue.count, @issue_count -1 - assert_nil Issue.find_by_id(1) - end - end - - def credentials(user, password=nil) - ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) - end -end
--- a/test/integration/issues_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/issues_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -72,7 +72,7 @@ put 'issues/1', :notes => 'Some notes', :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain'), 'description' => 'This is an attachment'}} - assert_redirected_to "issues/1" + assert_redirected_to "/issues/1" # make sure attachment was saved attachment = Issue.find(1).attachments.find_by_filename("testfile.txt")
--- a/test/integration/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/integration/lib http://redmine.rubyforge.org/svn
--- a/test/integration/lib/redmine/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/lib/redmine/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/integration/lib/redmine http://redmine.rubyforge.org/svn
--- a/test/integration/projects_api_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -# 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 ProjectsApiTest < ActionController::IntegrationTest - fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details, - :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages, - :attachments, :custom_fields, :custom_values, :time_entries - - def setup - Setting.rest_api_enabled = '1' - end - - def test_index - get '/projects.xml' - assert_response :success - assert_equal 'application/xml', @response.content_type - end - - def test_show - get '/projects/1.xml' - assert_response :success - assert_equal 'application/xml', @response.content_type - end - - def test_create - attributes = {:name => 'API test', :identifier => 'api-test'} - assert_difference 'Project.count' do - post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') - end - assert_response :created - assert_equal 'application/xml', @response.content_type - project = Project.first(:order => 'id DESC') - attributes.each do |attribute, value| - assert_equal value, project.send(attribute) - end - end - - def test_create_failure - attributes = {:name => 'API test'} - assert_no_difference 'Project.count' do - post '/projects.xml', {:project => attributes}, :authorization => credentials('admin') - end - assert_response :unprocessable_entity - assert_equal 'application/xml', @response.content_type - assert_tag :errors, :child => {:tag => 'error', :content => "Identifier can't be blank"} - end - - def test_update - attributes = {:name => 'API update'} - assert_no_difference 'Project.count' do - put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') - end - assert_response :ok - assert_equal 'application/xml', @response.content_type - project = Project.find(1) - attributes.each do |attribute, value| - assert_equal value, project.send(attribute) - end - end - - def test_update_failure - attributes = {:name => ''} - assert_no_difference 'Project.count' do - put '/projects/1.xml', {:project => attributes}, :authorization => credentials('jsmith') - end - assert_response :unprocessable_entity - assert_equal 'application/xml', @response.content_type - assert_tag :errors, :child => {:tag => 'error', :content => "Name can't be blank"} - end - - def test_destroy - assert_difference 'Project.count', -1 do - delete '/projects/2.xml', {}, :authorization => credentials('admin') - end - assert_response :ok - assert_equal 'application/xml', @response.content_type - assert_nil Project.find_by_id(2) - end - - def credentials(user, password=nil) - ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user) - end -end
--- a/test/integration/projects_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/projects_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -27,7 +27,7 @@ assert_response :success assert_template "admin/projects" post "projects/archive", :id => 1 - assert_redirected_to "admin/projects" + assert_redirected_to "/admin/projects" assert !Project.find(1).active? get 'projects/1' @@ -36,7 +36,7 @@ assert_response 403 post "projects/unarchive", :id => 1 - assert_redirected_to "admin/projects" + assert_redirected_to "/admin/projects" assert Project.find(1).active? get "projects/1" assert_response :success
--- a/test/integration/routing_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/integration/routing_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -157,13 +157,14 @@ should_route :get, "/projects/567/news/new", :controller => 'news', :action => 'new', :project_id => '567' should_route :get, "/news/234", :controller => 'news', :action => 'show', :id => '234' should_route :get, "/news/567/edit", :controller => 'news', :action => 'edit', :id => '567' + should_route :get, "/news/preview", :controller => 'previews', :action => 'news' + + should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567' + should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567' - should_route :post, "/projects/567/news", :controller => 'news', :action => 'create', :project_id => '567' - should_route :post, "/news/567/destroy", :controller => 'news', :action => 'destroy', :id => '567' - should_route :post, "/news/567/comments", :controller => 'comments', :action => 'create', :id => '567' - - should_route :put, "/news/567/edit", :controller => 'news', :action => 'update', :id => '567' + should_route :put, "/news/567", :controller => 'news', :action => 'update', :id => '567' + should_route :delete, "/news/567", :controller => 'news', :action => 'destroy', :id => '567' should_route :delete, "/news/567/comments/15", :controller => 'comments', :action => 'destroy', :id => '567', :comment_id => '15' end @@ -220,40 +221,81 @@ should_route :post, "/projects/redmine/repository/edit", :controller => 'repositories', :action => 'edit', :id => 'redmine' end - context "timelogs" do - should_route :get, "/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :issue_id => '567' - should_route :get, "/projects/ecookbook/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook' - should_route :get, "/projects/ecookbook/issues/567/time_entries/new", :controller => 'timelog', :action => 'edit', :project_id => 'ecookbook', :issue_id => '567' + context "timelogs (global)" do + should_route :get, "/time_entries", :controller => 'timelog', :action => 'index' + should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'index', :format => 'csv' + should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'index', :format => 'atom' + should_route :get, "/time_entries/new", :controller => 'timelog', :action => 'new' should_route :get, "/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22' - should_route :get, "/time_entries/report", :controller => 'timelog', :action => 'report' - should_route :get, "/projects/567/time_entries/report", :controller => 'timelog', :action => 'report', :project_id => '567' - should_route :get, "/projects/567/time_entries/report.csv", :controller => 'timelog', :action => 'report', :project_id => '567', :format => 'csv' - should_route :get, "/time_entries", :controller => 'timelog', :action => 'details' - should_route :get, "/time_entries.csv", :controller => 'timelog', :action => 'details', :format => 'csv' - should_route :get, "/time_entries.atom", :controller => 'timelog', :action => 'details', :format => 'atom' - should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'details', :project_id => '567' - should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'csv' - should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'details', :project_id => '567', :format => 'atom' - should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'details', :issue_id => '234' - should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'csv' - should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'details', :issue_id => '234', :format => 'atom' - should_route :get, "/projects/ecookbook/issues/123/time_entries", :controller => 'timelog', :action => 'details', :project_id => 'ecookbook', :issue_id => '123' - should_route :post, "/time_entries/55/destroy", :controller => 'timelog', :action => 'destroy', :id => '55' + should_route :post, "/time_entries", :controller => 'timelog', :action => 'create' + + should_route :put, "/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22' + + should_route :delete, "/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55' + end + + context "timelogs (scoped under project)" do + should_route :get, "/projects/567/time_entries", :controller => 'timelog', :action => 'index', :project_id => '567' + should_route :get, "/projects/567/time_entries.csv", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'csv' + should_route :get, "/projects/567/time_entries.atom", :controller => 'timelog', :action => 'index', :project_id => '567', :format => 'atom' + should_route :get, "/projects/567/time_entries/new", :controller => 'timelog', :action => 'new', :project_id => '567' + should_route :get, "/projects/567/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :project_id => '567' + + should_route :post, "/projects/567/time_entries", :controller => 'timelog', :action => 'create', :project_id => '567' + + should_route :put, "/projects/567/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :project_id => '567' + + should_route :delete, "/projects/567/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :project_id => '567' + end + + context "timelogs (scoped under issues)" do + should_route :get, "/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234' + should_route :get, "/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'csv' + should_route :get, "/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :format => 'atom' + should_route :get, "/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234' + should_route :get, "/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234' + + should_route :post, "/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234' + + should_route :put, "/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234' + + should_route :delete, "/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234' + end + + context "timelogs (scoped under project and issues)" do + should_route :get, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook' + should_route :get, "/projects/ecookbook/issues/234/time_entries.csv", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'csv' + should_route :get, "/projects/ecookbook/issues/234/time_entries.atom", :controller => 'timelog', :action => 'index', :issue_id => '234', :project_id => 'ecookbook', :format => 'atom' + should_route :get, "/projects/ecookbook/issues/234/time_entries/new", :controller => 'timelog', :action => 'new', :issue_id => '234', :project_id => 'ecookbook' + should_route :get, "/projects/ecookbook/issues/234/time_entries/22/edit", :controller => 'timelog', :action => 'edit', :id => '22', :issue_id => '234', :project_id => 'ecookbook' + + should_route :post, "/projects/ecookbook/issues/234/time_entries", :controller => 'timelog', :action => 'create', :issue_id => '234', :project_id => 'ecookbook' + + should_route :put, "/projects/ecookbook/issues/234/time_entries/22", :controller => 'timelog', :action => 'update', :id => '22', :issue_id => '234', :project_id => 'ecookbook' + + should_route :delete, "/projects/ecookbook/issues/234/time_entries/55", :controller => 'timelog', :action => 'destroy', :id => '55', :issue_id => '234', :project_id => 'ecookbook' + end + + context "time_entry_reports" do + should_route :get, "/time_entries/report", :controller => 'time_entry_reports', :action => 'report' + should_route :get, "/projects/567/time_entries/report", :controller => 'time_entry_reports', :action => 'report', :project_id => '567' + should_route :get, "/projects/567/time_entries/report.csv", :controller => 'time_entry_reports', :action => 'report', :project_id => '567', :format => 'csv' end context "users" do should_route :get, "/users", :controller => 'users', :action => 'index' should_route :get, "/users/44", :controller => 'users', :action => 'show', :id => '44' - should_route :get, "/users/new", :controller => 'users', :action => 'add' + should_route :get, "/users/new", :controller => 'users', :action => 'new' should_route :get, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444' should_route :get, "/users/222/edit/membership", :controller => 'users', :action => 'edit', :id => '222', :tab => 'membership' - should_route :post, "/users/new", :controller => 'users', :action => 'add' - should_route :post, "/users/444/edit", :controller => 'users', :action => 'edit', :id => '444' + should_route :post, "/users", :controller => 'users', :action => 'create' should_route :post, "/users/123/memberships", :controller => 'users', :action => 'edit_membership', :id => '123' should_route :post, "/users/123/memberships/55", :controller => 'users', :action => 'edit_membership', :id => '123', :membership_id => '55' should_route :post, "/users/567/memberships/12/destroy", :controller => 'users', :action => 'destroy_membership', :id => '567', :membership_id => '12' + + should_route :put, "/users/444", :controller => 'users', :action => 'update', :id => '444' end # TODO: should they all be scoped under /projects/:project_id ? @@ -269,23 +311,27 @@ end context "wiki (singular, project's pages)" do - should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'index', :id => '567' - should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'index', :id => '567', :page => 'lalala' - should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page' - should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :id => '1', :page => 'CookBook_documentation' - should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :id => '1', :page => 'CookBook_documentation', :version => '2', :version_from => '1' - should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :id => '1', :page => 'CookBook_documentation', :version => '2' - should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida' - should_route :get, "/projects/567/wiki/page_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'page_index' - should_route :get, "/projects/567/wiki/Page_Index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'Page_Index' - should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'special', :id => '567', :page => 'date_index' - should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'special', :id => '567', :page => 'export' + should_route :get, "/projects/567/wiki", :controller => 'wiki', :action => 'show', :project_id => '567' + should_route :get, "/projects/567/wiki/lalala", :controller => 'wiki', :action => 'show', :project_id => '567', :id => 'lalala' + should_route :get, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :project_id => '567', :id => 'my_page' + should_route :get, "/projects/1/wiki/CookBook_documentation/history", :controller => 'wiki', :action => 'history', :project_id => '1', :id => 'CookBook_documentation' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2' + should_route :get, "/projects/1/wiki/CookBook_documentation/diff/2/vs/1", :controller => 'wiki', :action => 'diff', :project_id => '1', :id => 'CookBook_documentation', :version => '2', :version_from => '1' + should_route :get, "/projects/1/wiki/CookBook_documentation/annotate/2", :controller => 'wiki', :action => 'annotate', :project_id => '1', :id => 'CookBook_documentation', :version => '2' + should_route :get, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida' + should_route :get, "/projects/567/wiki/index", :controller => 'wiki', :action => 'index', :project_id => '567' + should_route :get, "/projects/567/wiki/date_index", :controller => 'wiki', :action => 'date_index', :project_id => '567' + should_route :get, "/projects/567/wiki/export", :controller => 'wiki', :action => 'export', :project_id => '567' - should_route :post, "/projects/567/wiki/my_page/edit", :controller => 'wiki', :action => 'edit', :id => '567', :page => 'my_page' - should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :id => '567', :page => 'CookBook_documentation' - should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :id => '22', :page => 'ladida' - should_route :post, "/projects/22/wiki/ladida/destroy", :controller => 'wiki', :action => 'destroy', :id => '22', :page => 'ladida' - should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :id => '22', :page => 'ladida' + should_route :post, "/projects/567/wiki/CookBook_documentation/preview", :controller => 'wiki', :action => 'preview', :project_id => '567', :id => 'CookBook_documentation' + should_route :post, "/projects/22/wiki/ladida/rename", :controller => 'wiki', :action => 'rename', :project_id => '22', :id => 'ladida' + should_route :post, "/projects/22/wiki/ladida/protect", :controller => 'wiki', :action => 'protect', :project_id => '22', :id => 'ladida' + should_route :post, "/projects/22/wiki/ladida/add_attachment", :controller => 'wiki', :action => 'add_attachment', :project_id => '22', :id => 'ladida' + + should_route :put, "/projects/567/wiki/my_page", :controller => 'wiki', :action => 'update', :project_id => '567', :id => 'my_page' + + should_route :delete, "/projects/22/wiki/ladida", :controller => 'wiki', :action => 'destroy', :project_id => '22', :id => 'ladida' end context "wikis (plural, admin setup)" do
--- a/test/mocks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/mocks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/mocks http://redmine.rubyforge.org/svn
--- a/test/mocks/development/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/mocks/development/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/mocks/development http://redmine.rubyforge.org/svn
--- a/test/mocks/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/mocks/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/mocks/test http://redmine.rubyforge.org/svn
--- a/test/test_helper.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/test_helper.rb Fri Nov 19 13:24:41 2010 +0000 @@ -113,11 +113,15 @@ def self.repository_configured?(vendor) File.directory?(repository_path(vendor)) end + + def assert_error_tag(options={}) + assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options)) + end # Shoulda macros def self.should_render_404 should_respond_with :not_found - should_render_template 'common/404' + should_render_template 'common/error' end def self.should_have_before_filter(expected_method, options = {}) @@ -181,4 +185,236 @@ assert !user.new_record? end end + + # Test that a request allows the three types of API authentication + # + # * HTTP Basic with username and password + # * HTTP Basic with an api key for the username + # * Key based with the key=X parameter + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_api_authentication(http_method, url, parameters={}, options={}) + should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters, options) + should_allow_http_basic_auth_with_key(http_method, url, parameters, options) + should_allow_key_based_auth(http_method, url, parameters, options) + end + + # Test that a request allows the username and password for HTTP BASIC + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_http_basic_auth_with_username_and_password(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow http basic auth using a username and password for #{http_method} #{url}" do + context "with a valid HTTP authentication" do + setup do + @user = User.generate_with_protected!(:password => 'my_password', :password_confirmation => 'my_password', :admin => true) # Admin so they can access the project + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'my_password') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid HTTP authentication" do + setup do + @user = User.generate_with_protected! + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, 'wrong_password') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + + context "without credentials" do + setup do + send(http_method, url, parameters, {:authorization => ''}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "include_www_authenticate_header" do + assert @controller.response.headers.has_key?('WWW-Authenticate') + end + end + end + + end + + # Test that a request allows the API key with HTTP BASIC + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_http_basic_auth_with_key(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow http basic auth with a key for #{http_method} #{url}" do + context "with a valid HTTP authentication using the API token" do + setup do + @user = User.generate_with_protected!(:admin => true) + @token = Token.generate!(:user => @user, :action => 'api') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should_be_a_valid_response_string_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid HTTP authentication" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'feeds') + @authorization = ActionController::HttpAuthentication::Basic.encode_credentials(@token.value, 'X') + send(http_method, url, parameters, {:authorization => @authorization}) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + end + + # Test that a request allows full key authentication + # + # @param [Symbol] http_method the HTTP method for request (:get, :post, :put, :delete) + # @param [String] url the request url, without the key=ZXY parameter + # @param [optional, Hash] parameters additional request parameters + # @param [optional, Hash] options additional options + # @option options [Symbol] :success_code Successful response code (:success) + # @option options [Symbol] :failure_code Failure response code (:unauthorized) + def self.should_allow_key_based_auth(http_method, url, parameters={}, options={}) + success_code = options[:success_code] || :success + failure_code = options[:failure_code] || :unauthorized + + context "should allow key based auth using key=X for #{http_method} #{url}" do + context "with a valid api token" do + setup do + @user = User.generate_with_protected!(:admin => true) + @token = Token.generate!(:user => @user, :action => 'api') + # Simple url parse to add on ?key= or &key= + request_url = if url.match(/\?/) + url + "&key=#{@token.value}" + else + url + "?key=#{@token.value}" + end + send(http_method, request_url, parameters) + end + + should_respond_with success_code + should_respond_with_content_type_based_on_url(url) + should_be_a_valid_response_string_based_on_url(url) + should "login as the user" do + assert_equal @user, User.current + end + end + + context "with an invalid api token" do + setup do + @user = User.generate_with_protected! + @token = Token.generate!(:user => @user, :action => 'feeds') + # Simple url parse to add on ?key= or &key= + request_url = if url.match(/\?/) + url + "&key=#{@token.value}" + else + url + "?key=#{@token.value}" + end + send(http_method, request_url, parameters) + end + + should_respond_with failure_code + should_respond_with_content_type_based_on_url(url) + should "not login as the user" do + assert_equal User.anonymous, User.current + end + end + end + + end + + # Uses should_respond_with_content_type based on what's in the url: + # + # '/project/issues.xml' => should_respond_with_content_type :xml + # '/project/issues.json' => should_respond_with_content_type :json + # + # @param [String] url Request + def self.should_respond_with_content_type_based_on_url(url) + case + when url.match(/xml/i) + should_respond_with_content_type :xml + when url.match(/json/i) + should_respond_with_content_type :json + else + raise "Unknown content type for should_respond_with_content_type_based_on_url: #{url}" + end + + end + + # Uses the url to assert which format the response should be in + # + # '/project/issues.xml' => should_be_a_valid_xml_string + # '/project/issues.json' => should_be_a_valid_json_string + # + # @param [String] url Request + def self.should_be_a_valid_response_string_based_on_url(url) + case + when url.match(/xml/i) + should_be_a_valid_xml_string + when url.match(/json/i) + should_be_a_valid_json_string + else + raise "Unknown content type for should_be_a_valid_response_based_on_url: #{url}" + end + + end + + # Checks that the response is a valid JSON string + def self.should_be_a_valid_json_string + should "be a valid JSON string (or empty)" do + assert (response.body.blank? || ActiveSupport::JSON.decode(response.body)) + end + end + + # Checks that the response is a valid XML string + def self.should_be_a_valid_xml_string + should "be a valid XML string" do + assert REXML::Document.new(response.body) + end + end + end + +# Simple module to "namespace" all of the API tests +module ApiTest +end
--- a/test/unit/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 34 -/svn/!svn/ver/4167/trunk/test/unit +/svn/!svn/ver/4408/trunk/test/unit END document_test.rb K 25 @@ -19,7 +19,7 @@ K 25 svn:wc:ra_dav:version-url V 57 -/svn/!svn/ver/3828/trunk/test/unit/repository_git_test.rb +/svn/!svn/ver/4189/trunk/test/unit/repository_git_test.rb END repository_mercurial_test.rb K 25 @@ -55,7 +55,7 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/4072/trunk/test/unit/issue_test.rb +/svn/!svn/ver/4408/trunk/test/unit/issue_test.rb END issue_status_test.rb K 25 @@ -87,18 +87,18 @@ V 60 /svn/!svn/ver/2887/trunk/test/unit/repository_bazaar_test.rb END +role_test.rb +K 25 +svn:wc:ra_dav:version-url +V 47 +/svn/!svn/ver/3363/trunk/test/unit/role_test.rb +END changeset_test.rb K 25 svn:wc:ra_dav:version-url V 52 /svn/!svn/ver/3466/trunk/test/unit/changeset_test.rb END -role_test.rb -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/3363/trunk/test/unit/role_test.rb -END comment_test.rb K 25 svn:wc:ra_dav:version-url @@ -139,7 +139,19 @@ K 25 svn:wc:ra_dav:version-url V 47 -/svn/!svn/ver/4058/trunk/test/unit/user_test.rb +/svn/!svn/ver/4233/trunk/test/unit/user_test.rb +END +mail_handler_test.rb +K 25 +svn:wc:ra_dav:version-url +V 55 +/svn/!svn/ver/4404/trunk/test/unit/mail_handler_test.rb +END +repository_test.rb +K 25 +svn:wc:ra_dav:version-url +V 53 +/svn/!svn/ver/4221/trunk/test/unit/repository_test.rb END time_entry_test.rb K 25 @@ -147,17 +159,11 @@ V 53 /svn/!svn/ver/4087/trunk/test/unit/time_entry_test.rb END -repository_test.rb +principal_test.rb K 25 svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/2895/trunk/test/unit/repository_test.rb -END -mail_handler_test.rb -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/3801/trunk/test/unit/mail_handler_test.rb +V 52 +/svn/!svn/ver/3152/trunk/test/unit/principal_test.rb END auth_source_ldap_test.rb K 25 @@ -165,11 +171,17 @@ V 59 /svn/!svn/ver/3492/trunk/test/unit/auth_source_ldap_test.rb END -principal_test.rb +journal_observer_test.rb K 25 svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/3152/trunk/test/unit/principal_test.rb +V 59 +/svn/!svn/ver/4221/trunk/test/unit/journal_observer_test.rb +END +project_nested_set_test.rb +K 25 +svn:wc:ra_dav:version-url +V 61 +/svn/!svn/ver/3354/trunk/test/unit/project_nested_set_test.rb END repository_filesystem_test.rb K 25 @@ -177,12 +189,6 @@ V 64 /svn/!svn/ver/2887/trunk/test/unit/repository_filesystem_test.rb END -project_nested_set_test.rb -K 25 -svn:wc:ra_dav:version-url -V 61 -/svn/!svn/ver/3354/trunk/test/unit/project_nested_set_test.rb -END wiki_redirect_test.rb K 25 svn:wc:ra_dav:version-url @@ -271,7 +277,7 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/4106/trunk/test/unit/query_test.rb +/svn/!svn/ver/4260/trunk/test/unit/query_test.rb END search_test.rb K 25 @@ -283,7 +289,7 @@ K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/4072/trunk/test/unit/project_test.rb +/svn/!svn/ver/4391/trunk/test/unit/project_test.rb END custom_value_test.rb K 25 @@ -301,7 +307,7 @@ K 25 svn:wc:ra_dav:version-url V 49 -/svn/!svn/ver/4167/trunk/test/unit/mailer_test.rb +/svn/!svn/ver/4362/trunk/test/unit/mailer_test.rb END news_test.rb K 25
--- a/test/unit/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit http://redmine.rubyforge.org/svn -2010-09-20T23:17:51.402972Z -4167 -edavis10 +2010-11-14T16:51:10.651861Z +4408 +jplang @@ -100,10 +100,10 @@ -2010-09-23T14:37:45.507762Z -b599c36bc2156f6812220a40f054d41e -2010-07-06T02:07:46.557097Z -3828 +2010-11-19T13:04:41.337562Z +7c656f1b1b7984259ebf4d29bdc629a5 +2010-09-26T21:54:52.929683Z +4189 edavis10 has-props @@ -304,11 +304,11 @@ -2010-09-24T12:48:25.791803Z -0e1f710ecc564f8951d5f5805c440bc8 -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-19T13:04:41.337562Z +b66aaf32f10148354e6319cd7ae7ca27 +2010-11-14T16:51:10.651861Z +4408 +jplang has-props @@ -330,7 +330,7 @@ -26011 +29577 issue_status_test.rb file @@ -502,6 +502,43 @@ 3118 +helpers +dir + +role_test.rb +file + + + + +2010-09-23T14:37:45.507762Z +01913aeac402c002ff86c6497513c795 +2010-02-03T17:47:47.868223Z +3363 +edavis10 +has-props + + + + + + + + + + + + + + + + + + + + +3049 + changeset_test.rb file @@ -536,43 +573,6 @@ 4805 -role_test.rb -file - - - - -2010-09-23T14:37:45.507762Z -01913aeac402c002ff86c6497513c795 -2010-02-03T17:47:47.868223Z -3363 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -3049 - -helpers -dir - comment_test.rb file @@ -786,10 +786,10 @@ -2010-09-24T12:48:25.791803Z -ee0a9f52ec52313eb2a7e6496590a3fc -2010-09-03T20:16:00.529106Z -4058 +2010-11-19T13:04:41.341624Z +59e73a45159ae21d5dc53098f8e1b637 +2010-10-06T05:08:31.041293Z +4233 jbbarth has-props @@ -812,75 +812,7 @@ -13887 - -mail_handler_test.rb -file - - - - -2010-09-23T14:37:45.503764Z -53cf7d3c94f63febd50685da486d8adf -2010-06-20T16:22:36.211973Z -3801 -edavis10 -has-props - - - - - - - - - - - - - - - - - - - - -14765 - -repository_test.rb -file - - - - -2010-09-23T14:37:45.507762Z -fe604b00b9f78fbe70c9c48bac2cd05d -2009-09-20T14:06:57.257282Z -2895 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -6407 +17550 time_entry_test.rb file @@ -916,39 +848,73 @@ 3574 -principal_test.rb +repository_test.rb file -2010-09-23T14:37:45.503764Z -f36cb1e2cd1746903fbd8d269179f177 -2009-12-12T06:18:40.500267Z -3152 +2010-11-19T13:04:41.341624Z +61d46cec13bffa4dce694de6c0fb0c93 +2010-09-28T20:20:00.843023Z +4221 edavis10 - - - - - - - - - - - - - - - - - - - - - -2073 +has-props + + + + + + + + + + + + + + + + + + + + +6469 + +mail_handler_test.rb +file + + + + +2010-11-19T13:04:41.341624Z +b5e8191d182e090ce55ccd46b3cc3954 +2010-11-14T13:48:01.671461Z +4404 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +17912 auth_source_ldap_test.rb file @@ -984,6 +950,74 @@ 2788 +principal_test.rb +file + + + + +2010-09-23T14:37:45.503764Z +f36cb1e2cd1746903fbd8d269179f177 +2009-12-12T06:18:40.500267Z +3152 +edavis10 + + + + + + + + + + + + + + + + + + + + + +2073 + +journal_observer_test.rb +file + + + + +2010-11-19T13:04:41.341624Z +b8ca46992b1064fd7f35c44663a40358 +2010-09-28T20:20:00.843023Z +4221 +edavis10 + + + + + + + + + + + + + + + + + + + + + +3954 + repository_filesystem_test.rb file @@ -1534,10 +1568,10 @@ -2010-09-24T12:48:25.791803Z -950344f6f29a4c954bd631c9ab64b447 -2010-09-20T02:55:32.251493Z -4106 +2010-11-19T13:04:41.341624Z +e84894671a39a3e44cd69ad6e4d6f9d9 +2010-10-16T00:00:23.359489Z +4260 edavis10 has-props @@ -1560,7 +1594,7 @@ -20070 +20090 search_test.rb file @@ -1602,11 +1636,11 @@ -2010-09-24T12:48:25.791803Z -987d196dcce3cb336836d449fd1cbd78 -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-19T13:04:41.341624Z +5cb6742ca68637e837794c7a912a1c71 +2010-11-11T13:39:14.764400Z +4391 +jplang has-props @@ -1628,7 +1662,7 @@ -35653 +37951 custom_value_test.rb file @@ -1704,10 +1738,10 @@ -2010-09-24T12:48:25.791803Z -53a7d37c2d3f37d4bd092f325cd8d9ac -2010-09-20T23:17:51.402972Z -4167 +2010-11-19T13:04:41.341624Z +59e4140b58e03b066b15f7213c23fc6d +2010-11-02T19:00:36.834304Z +4362 edavis10 has-props @@ -1730,7 +1764,7 @@ -13583 +13954 news_test.rb file
--- a/test/unit/.svn/text-base/issue_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/issue_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -503,6 +503,17 @@ assert !closed_statuses.empty? end + def test_rescheduling_an_issue_should_reschedule_following_issue + issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2) + issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2) + IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) + assert_equal issue1.due_date + 1, issue2.reload.start_date + + issue1.due_date = Date.today + 5 + issue1.save! + assert_equal issue1.due_date + 1, issue2.reload.start_date + end + def test_overdue assert Issue.new(:due_date => 1.day.ago.to_date).overdue? assert !Issue.new(:due_date => Date.today).overdue? @@ -532,9 +543,28 @@ assert Issue.new(:start_date => 100.days.ago.to_date, :due_date => Date.today, :done_ratio => 90).behind_schedule? end end - - def test_assignable_users - assert_kind_of User, Issue.find(1).assignable_users.first + + context "#assignable_users" do + should "be Users" do + assert_kind_of User, Issue.find(1).assignable_users.first + end + + should "include the issue author" do + project = Project.find(1) + non_project_member = User.generate! + issue = Issue.generate_for_project!(project, :author => non_project_member) + + assert issue.assignable_users.include?(non_project_member) + end + + should "not show the issue author twice" do + assignable_user_ids = Issue.find(1).assignable_users.collect(&:id) + assert_equal 2, assignable_user_ids.length + + assignable_user_ids.each do |user_id| + assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once" + end + end end def test_create_should_send_email_notification @@ -544,7 +574,7 @@ assert issue.save assert_equal 1, ActionMailer::Base.deliveries.size end - + def test_stale_issue_should_not_send_email_notification ActionMailer::Base.deliveries.clear issue = Issue.find(1) @@ -593,6 +623,9 @@ @issue = Issue.find(1) @issue_status = IssueStatus.find(1) @issue_status.update_attribute(:default_done_ratio, 50) + @issue2 = Issue.find(2) + @issue_status2 = IssueStatus.find(2) + @issue_status2.update_attribute(:default_done_ratio, 0) end context "with Setting.issue_done_ratio using the issue_field" do @@ -602,6 +635,7 @@ should "read the issue's field" do assert_equal 0, @issue.done_ratio + assert_equal 30, @issue2.done_ratio end end @@ -612,6 +646,7 @@ should "read the Issue Status's default done ratio" do assert_equal 50, @issue.done_ratio + assert_equal 0, @issue2.done_ratio end end end @@ -621,6 +656,9 @@ @issue = Issue.find(1) @issue_status = IssueStatus.find(1) @issue_status.update_attribute(:default_done_ratio, 50) + @issue2 = Issue.find(2) + @issue_status2 = IssueStatus.find(2) + @issue_status2.update_attribute(:default_done_ratio, 0) end context "with Setting.issue_done_ratio using the issue_field" do @@ -630,8 +668,10 @@ should "not change the issue" do @issue.update_done_ratio_from_issue_status + @issue2.update_done_ratio_from_issue_status - assert_equal 0, @issue.done_ratio + assert_equal 0, @issue.read_attribute(:done_ratio) + assert_equal 30, @issue2.read_attribute(:done_ratio) end end @@ -640,10 +680,12 @@ Setting.issue_done_ratio = 'issue_status' end - should "not change the issue's done ratio" do + should "change the issue's done ratio" do @issue.update_done_ratio_from_issue_status + @issue2.update_done_ratio_from_issue_status - assert_equal 50, @issue.done_ratio + assert_equal 50, @issue.read_attribute(:done_ratio) + assert_equal 0, @issue2.read_attribute(:done_ratio) end end end @@ -726,4 +768,49 @@ assert issue.save assert_equal before, Issue.on_active_project.length end + + context "Issue#recipients" do + setup do + @project = Project.find(1) + @author = User.generate_with_protected! + @assignee = User.generate_with_protected! + @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author) + end + + should "include project recipients" do + assert @project.recipients.present? + @project.recipients.each do |project_recipient| + assert @issue.recipients.include?(project_recipient) + end + end + + should "include the author if the author is active" do + assert @issue.author, "No author set for Issue" + assert @issue.recipients.include?(@issue.author.mail) + end + + should "include the assigned to user if the assigned to user is active" do + assert @issue.assigned_to, "No assigned_to set for Issue" + assert @issue.recipients.include?(@issue.assigned_to.mail) + end + + should "not include users who opt out of all email" do + @author.update_attribute(:mail_notification, :none) + + assert !@issue.recipients.include?(@issue.author.mail) + end + + should "not include the issue author if they are only notified of assigned issues" do + @author.update_attribute(:mail_notification, :only_assigned) + + assert !@issue.recipients.include?(@issue.author.mail) + end + + should "not include the assigned user if they are only notified of owned issues" do + @assignee.update_attribute(:mail_notification, :only_owner) + + assert !@issue.recipients.include?(@issue.assigned_to.mail) + end + + end end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/unit/.svn/text-base/journal_observer_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,118 @@ +# redMine - project management software +# Copyright (C) 2006-2009 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 JournalObserverTest < ActiveSupport::TestCase + fixtures :issues, :issue_statuses, :journals, :journal_details + + def setup + ActionMailer::Base.deliveries.clear + @journal = Journal.find 1 + end + + # context: issue_updated notified_events + def test_create_should_send_email_notification_with_issue_updated + Setting.notified_events = ['issue_updated'] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + + assert journal.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + + assert journal.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_note_added notified_events + def test_create_should_send_email_notification_with_issue_note_added + Setting.notified_events = ['issue_note_added'] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + journal.notes = 'This update has a note' + + assert journal.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_note_added + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + journal.notes = 'This update has a note' + + assert journal.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_status_updated notified_events + def test_create_should_send_email_notification_with_issue_status_updated + Setting.notified_events = ['issue_status_updated'] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.status = IssueStatus.last + + assert issue.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_status_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.status = IssueStatus.last + + assert issue.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_priority_updated notified_events + def test_create_should_send_email_notification_with_issue_priority_updated + Setting.notified_events = ['issue_priority_updated'] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.priority = IssuePriority.last + + assert issue.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_priority_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.priority = IssuePriority.last + + assert issue.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + +end
--- a/test/unit/.svn/text-base/mail_handler_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/mail_handler_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -25,11 +25,13 @@ :roles, :members, :member_roles, + :users, :issues, :issue_statuses, :workflows, :trackers, :projects_trackers, + :versions, :enumerations, :issue_categories, :custom_fields, @@ -41,6 +43,7 @@ def setup ActionMailer::Base.deliveries.clear + Setting.notified_events = Redmine::Notifiable.all.collect(&:name) end def test_add_issue @@ -58,6 +61,9 @@ assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to + assert_equal Version.find_by_name('alpha'), issue.fixed_version + assert_equal 2.5, issue.estimated_hours + assert_equal 30, issue.done_ratio # keywords should be removed from the email body assert !issue.description.match(/^Project:/i) assert !issue.description.match(/^Status:/i) @@ -152,7 +158,7 @@ assert !issue.new_record? issue.reload assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo')) - assert_equal 1, issue.watchers.size + assert_equal 1, issue.watcher_user_ids.size end def test_add_issue_by_unknown_user @@ -223,6 +229,34 @@ Role.anonymous.add_permission!(:add_issues) assert_equal false, submit_email('ticket_without_from_header.eml') end + + def test_add_issue_with_invalid_attributes + issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority') + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_nil issue.assigned_to + assert_nil issue.start_date + assert_nil issue.due_date + assert_equal 0, issue.done_ratio + assert_equal 'Normal', issue.priority.to_s + assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') + end + + def test_add_issue_with_localized_attributes + User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr' + issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority') + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_equal 'New ticket on a given project', issue.subject + assert_equal User.find_by_login('jsmith'), issue.author + assert_equal Project.find(2), issue.project + assert_equal 'Feature request', issue.tracker.to_s + assert_equal 'Stock management', issue.category.to_s + assert_equal 'Urgent', issue.priority.to_s + assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') + end def test_add_issue_with_japanese_keywords tracker = Tracker.create!(:name => '開発') @@ -240,6 +274,7 @@ end def test_add_issue_should_send_email_notification + Setting.notified_events = ['issue_added'] ActionMailer::Base.deliveries.clear # This email contains: 'Project: onlinestore' issue = submit_email('ticket_on_given_project.eml') @@ -267,6 +302,7 @@ assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to + assert_equal 'Updated custom value', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value end def test_add_issue_note_should_send_email_notification @@ -333,6 +369,38 @@ end end + context "with a single quoted reply (e.g. reply to a Redmine email notification)" do + setup do + Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' + end + + should "truncate the email at the delimiter with the quoted reply symbols (>)" do + journal = submit_email('issue_update_with_quoted_reply_above.eml') + assert journal.is_a?(Journal) + assert journal.notes.include?('An update to the issue by the sender.') + assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) + assert !journal.notes.include?('Looks like the JSON api for projects was missed.') + + end + + end + + context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do + setup do + Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' + end + + should "truncate the email at the delimiter with the quoted reply symbols (>)" do + journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml') + assert journal.is_a?(Journal) + assert journal.notes.include?('An update to the issue by the sender.') + assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) + assert !journal.notes.include?('Looks like the JSON api for projects was missed.') + + end + + end + context "with multiple strings" do setup do Setting.mail_handler_body_delimiters = "---\nBREAK"
--- a/test/unit/.svn/text-base/mailer_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/mailer_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -393,4 +393,21 @@ # should restore perform_deliveries assert ActionMailer::Base.perform_deliveries end + + context "layout" do + should "include the emails_header" do + with_settings(:emails_header => "*Header content*") do + assert Mailer.deliver_test(User.find(1)) + + assert_select_email do + assert_select ".header" do + assert_select "strong", :text => "Header content" + end + end + end + + end + + end + end
--- a/test/unit/.svn/text-base/project_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/project_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,6 @@ should_validate_presence_of :name should_validate_presence_of :identifier - should_validate_uniqueness_of :name should_validate_uniqueness_of :identifier context "associations" do @@ -102,6 +101,7 @@ @ecookbook.reload assert !@ecookbook.active? + assert @ecookbook.archived? assert !user.projects.include?(@ecookbook) # Subproject are also archived assert !@ecookbook.children.empty? @@ -129,6 +129,7 @@ assert @ecookbook.unarchive @ecookbook.reload assert @ecookbook.active? + assert !@ecookbook.archived? assert user.projects.include?(@ecookbook) # Subproject can now be unarchived @ecookbook_sub1.reload @@ -860,6 +861,8 @@ assert_nil @project.start_date end + + should "be tested when issues have no start date" should "be the earliest start date of it's issues" do early = 7.days.ago.to_date @@ -889,6 +892,8 @@ assert_nil @project.due_date end + + should "be tested when issues have no due date" should "be the latest due date of it's issues" do future = 7.days.from_now.to_date @@ -960,4 +965,54 @@ end end + + context "#notified_users" do + setup do + @project = Project.generate! + @role = Role.generate! + + @user_with_membership_notification = User.generate!(:mail_notification => 'selected') + Member.generate!(:project => @project, :roles => [@role], :principal => @user_with_membership_notification, :mail_notification => true) + + @all_events_user = User.generate!(:mail_notification => 'all') + Member.generate!(:project => @project, :roles => [@role], :principal => @all_events_user) + + @no_events_user = User.generate!(:mail_notification => 'none') + Member.generate!(:project => @project, :roles => [@role], :principal => @no_events_user) + + @only_my_events_user = User.generate!(:mail_notification => 'only_my_events') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_my_events_user) + + @only_assigned_user = User.generate!(:mail_notification => 'only_assigned') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_assigned_user) + + @only_owned_user = User.generate!(:mail_notification => 'only_owner') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_owned_user) + end + + should "include members with a mail notification" do + assert @project.notified_users.include?(@user_with_membership_notification) + end + + should "include users with the 'all' notification option" do + assert @project.notified_users.include?(@all_events_user) + end + + should "not include users with the 'none' notification option" do + assert !@project.notified_users.include?(@no_events_user) + end + + should "not include users with the 'only_my_events' notification option" do + assert !@project.notified_users.include?(@only_my_events_user) + end + + should "not include users with the 'only_assigned' notification option" do + assert !@project.notified_users.include?(@only_assigned_user) + end + + should "not include users with the 'only_owner' notification option" do + assert !@project.notified_users.include?(@only_owned_user) + end + end + end
--- a/test/unit/.svn/text-base/query_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/query_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -397,8 +397,8 @@ group2 = Group.generate!.reload expected_group_list = [ - [group1.name, group1.id], - [group2.name, group2.id] + [group1.name, group1.id.to_s], + [group2.name, group2.id.to_s] ] assert_equal expected_group_list.sort, @query.available_filters["member_of_group"][:values].sort end @@ -415,14 +415,14 @@ end should "have a list of the Roles as values" do - assert @query.available_filters["assigned_to_role"][:values].include?(['Manager',1]) - assert @query.available_filters["assigned_to_role"][:values].include?(['Developer',2]) - assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter',3]) + assert @query.available_filters["assigned_to_role"][:values].include?(['Manager','1']) + assert @query.available_filters["assigned_to_role"][:values].include?(['Developer','2']) + assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter','3']) end should "not include the built in Roles as values" do - assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member',4]) - assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous',5]) + assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member','4']) + assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous','5']) end end
--- a/test/unit/.svn/text-base/repository_git_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/repository_git_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -34,8 +34,8 @@ @repository.fetch_changesets @repository.reload - assert_equal 13, @repository.changesets.count - assert_equal 22, @repository.changes.count + assert_equal 15, @repository.changesets.count + assert_equal 24, @repository.changes.count commit = @repository.changesets.find(:first, :order => 'committed_on ASC') assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments @@ -57,10 +57,10 @@ # Remove the 3 latest changesets @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy) @repository.reload - assert_equal 10, @repository.changesets.count + assert_equal 12, @repository.changesets.count @repository.fetch_changesets - assert_equal 13, @repository.changesets.count + assert_equal 15, @repository.changesets.count end else puts "Git test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/.svn/text-base/repository_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/repository_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -67,6 +67,7 @@ def test_scan_changesets_for_issue_ids Setting.default_language = 'en' + Setting.notified_events = ['issue_added','issue_updated'] # choosing a status to apply to fix issues Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
--- a/test/unit/.svn/text-base/user_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/.svn/text-base/user_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -60,6 +60,18 @@ user.password, user.password_confirmation = "password", "password" assert user.save end + + context "User#before_create" do + should "set the mail_notification to the default Setting" do + @user1 = User.generate_with_protected! + assert_equal 'only_my_events', @user1.mail_notification + + with_settings :default_notification_option => 'all' do + @user2 = User.generate_with_protected! + assert_equal 'all', @user2.mail_notification + end + end + end context "User.login" do should "be case-insensitive." do @@ -285,7 +297,7 @@ end def test_mail_notification_all - @jsmith.mail_notification = true + @jsmith.mail_notification = 'all' @jsmith.notified_project_ids = [] @jsmith.save @jsmith.reload @@ -293,15 +305,15 @@ end def test_mail_notification_selected - @jsmith.mail_notification = false + @jsmith.mail_notification = 'selected' @jsmith.notified_project_ids = [1] @jsmith.save @jsmith.reload assert Project.find(1).recipients.include?(@jsmith.mail) end - def test_mail_notification_none - @jsmith.mail_notification = false + def test_mail_notification_only_my_events + @jsmith.mail_notification = 'only_my_events' @jsmith.notified_project_ids = [] @jsmith.save @jsmith.reload @@ -384,6 +396,23 @@ assert ! @dlopper.allowed_to?(:delete_messages, project) #Developper end end + + context "with multiple projects" do + should "return false if array is empty" do + assert ! @admin.allowed_to?(:view_project, []) + end + + should "return true only if user has permission on all these projects" do + assert @admin.allowed_to?(:view_project, Project.all) + assert ! @dlopper.allowed_to?(:view_project, Project.all) #cannot see Project(2) + assert @jsmith.allowed_to?(:edit_issues, @jsmith.projects) #Manager or Developer everywhere + assert ! @jsmith.allowed_to?(:delete_issue_watchers, @jsmith.projects) #Dev cannot delete_issue_watchers + end + + should "behave correctly with arrays of 1 project" do + assert ! User.anonymous.allowed_to?(:delete_issues, [Project.first]) + end + end context "with options[:global]" do should "authorize if user has at least one role that has this permission" do @@ -398,6 +427,72 @@ end end + context "User#notify_about?" do + context "Issues" do + setup do + @project = Project.find(1) + @author = User.generate_with_protected! + @assignee = User.generate_with_protected! + @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author) + end + + should "be true for a user with :all" do + @author.update_attribute(:mail_notification, :all) + assert @author.notify_about?(@issue) + end + + should "be false for a user with :none" do + @author.update_attribute(:mail_notification, :none) + assert ! @author.notify_about?(@issue) + end + + should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do + @user = User.generate_with_protected!(:mail_notification => :only_my_events) + assert ! @user.notify_about?(@issue) + end + + should "be true for a user with :only_my_events and is the author" do + @author.update_attribute(:mail_notification, :only_my_events) + assert @author.notify_about?(@issue) + end + + should "be true for a user with :only_my_events and is the assignee" do + @assignee.update_attribute(:mail_notification, :only_my_events) + assert @assignee.notify_about?(@issue) + end + + should "be true for a user with :only_assigned and is the assignee" do + @assignee.update_attribute(:mail_notification, :only_assigned) + assert @assignee.notify_about?(@issue) + end + + should "be false for a user with :only_assigned and is not the assignee" do + @author.update_attribute(:mail_notification, :only_assigned) + assert ! @author.notify_about?(@issue) + end + + should "be true for a user with :only_owner and is the author" do + @author.update_attribute(:mail_notification, :only_owner) + assert @author.notify_about?(@issue) + end + + should "be false for a user with :only_owner and is not the author" do + @assignee.update_attribute(:mail_notification, :only_owner) + assert ! @assignee.notify_about?(@issue) + end + + should "be false if the mail_notification is anything else" do + @assignee.update_attribute(:mail_notification, :somthing_else) + assert ! @assignee.notify_about?(@issue) + end + + end + + context "other events" do + should 'be added and tested' + end + end + if Object.const_defined?(:OpenID) def test_setting_identity_url
--- a/test/unit/helpers/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/helpers/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 42 -/svn/!svn/ver/4072/trunk/test/unit/helpers +/svn/!svn/ver/4377/trunk/test/unit/helpers END custom_fields_helper_test.rb K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 69 -/svn/!svn/ver/4072/trunk/test/unit/helpers/application_helper_test.rb +/svn/!svn/ver/4377/trunk/test/unit/helpers/application_helper_test.rb END search_helper_test.rb K 25
--- a/test/unit/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/helpers http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-06T18:52:07.556711Z +4377 +jplang @@ -134,11 +134,11 @@ -2010-09-24T12:48:25.635718Z -7f682835f4e55f0f74513fb50a363168 -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-19T13:04:41.233647Z +93e1fbbe347fd0b1526df779b0244489 +2010-11-06T18:52:07.556711Z +4377 +jplang has-props @@ -160,7 +160,7 @@ -29071 +29154 search_helper_test.rb file
--- a/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2009 Jean-Philippe Lang +# 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 @@ -49,15 +49,6 @@ assert_match /href/, response end - should "allow using the url for the target link" do - User.current = User.find_by_login('admin') - - @project = Issue.first.project # Used by helper - response = link_to_if_authorized("By url", - new_issue_move_path(:id => Issue.first.id)) - assert_match /href/, response - end - end def test_auto_links @@ -88,6 +79,8 @@ 'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>', # escaping 'http://foo"bar' => '<a class="external" href="http://foo"bar">http://foo"bar</a>', + # wrap in angle brackets + '<http://foo.bar>' => '<<a class="external" href="http://foo.bar">http://foo.bar</a>>' } to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } end @@ -123,15 +116,6 @@ assert textilizable(raw).include?('<img src="bar.gif" alt="" />') end - def test_acronyms - to_test = { - 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>', - 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>', - } - to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } - - end - def test_attached_images to_test = { 'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />', @@ -260,8 +244,8 @@ '[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>', '[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>', # link to another project wiki - '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">onlinestore</a>', - '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">Wiki</a>', + '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">onlinestore</a>', + '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">Wiki</a>', '[[onlinestore:Start page]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Start page</a>', '[[onlinestore:Start page|Text]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Text</a>', '[[onlinestore:Unknown page]]' => '<a href="/projects/onlinestore/wiki/Unknown_page" class="wiki-page new">Unknown page</a>', @@ -408,11 +392,6 @@ assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---') end - def test_acronym - assert_equal '<p>This is an acronym: <acronym title="American Civil Liberties Union">ACLU</acronym>.</p>', - textilizable('This is an acronym: ACLU(American Civil Liberties Union).') - end - def test_footnotes raw = <<-RAW This is some text[1]. @@ -443,25 +422,60 @@ h2. Subtitle with [[Wiki|another Wiki]] link h2. Subtitle with %{color:red}red text% + +h3. Subtitle with *some* _modifiers_ h1. Another title -h2. An "Internet link":http://www.redmine.org/ inside subtitle +h3. An "Internet link":http://www.redmine.org/ inside subtitle h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues RAW - expected = '<ul class="toc">' + - '<li class="heading1"><a href="#Title">Title</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' + - '<li class="heading1"><a href="#Another-title">Another title</a></li>' + - '<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' + - '<li class="heading2"><a href="#Project-Name">Project Name</a></li>' + + expected = '<ul class="toc">' + + '<li><a href="#Title">Title</a>' + + '<ul>' + + '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + + '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + + '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' + + '<ul>' + + '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' + + '</ul>' + + '</li>' + + '</ul>' + + '</li>' + + '<li><a href="#Another-title">Another title</a>' + + '<ul>' + + '<li>' + + '<ul>' + + '<li><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' + + '</ul>' + + '</li>' + + '<li><a href="#Project-Name">Project Name</a></li>' + + '</ul>' + + '</li>' + '</ul>' + @project = Project.find(1) + assert textilizable(raw).gsub("\n", "").include?(expected) + end + + def test_table_of_content_should_contain_included_page_headings + raw = <<-RAW +{{toc}} + +h1. Included + +{{include(Child_1)}} +RAW + + expected = '<ul class="toc">' + + '<li><a href="#Included">Included</a></li>' + + '<li><a href="#Child-page-1">Child page 1</a></li>' + + '</ul>' + + @project = Project.find(1) assert textilizable(raw).gsub("\n", "").include?(expected) end
--- a/test/unit/helpers/application_helper_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/helpers/application_helper_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ # Redmine - project management software -# Copyright (C) 2006-2009 Jean-Philippe Lang +# 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 @@ -49,15 +49,6 @@ assert_match /href/, response end - should "allow using the url for the target link" do - User.current = User.find_by_login('admin') - - @project = Issue.first.project # Used by helper - response = link_to_if_authorized("By url", - new_issue_move_path(:id => Issue.first.id)) - assert_match /href/, response - end - end def test_auto_links @@ -88,6 +79,8 @@ 'http://example.net/path!602815048C7B5C20!302.html' => '<a class="external" href="http://example.net/path!602815048C7B5C20!302.html">http://example.net/path!602815048C7B5C20!302.html</a>', # escaping 'http://foo"bar' => '<a class="external" href="http://foo"bar">http://foo"bar</a>', + # wrap in angle brackets + '<http://foo.bar>' => '<<a class="external" href="http://foo.bar">http://foo.bar</a>>' } to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } end @@ -123,15 +116,6 @@ assert textilizable(raw).include?('<img src="bar.gif" alt="" />') end - def test_acronyms - to_test = { - 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>', - 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>', - } - to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) } - - end - def test_attached_images to_test = { 'Inline image: !logo.gif!' => 'Inline image: <img src="/attachments/download/3" title="This is a logo" alt="This is a logo" />', @@ -260,8 +244,8 @@ '[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>', '[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>', # link to another project wiki - '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">onlinestore</a>', - '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki/" class="wiki-page">Wiki</a>', + '[[onlinestore:]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">onlinestore</a>', + '[[onlinestore:|Wiki]]' => '<a href="/projects/onlinestore/wiki" class="wiki-page">Wiki</a>', '[[onlinestore:Start page]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Start page</a>', '[[onlinestore:Start page|Text]]' => '<a href="/projects/onlinestore/wiki/Start_page" class="wiki-page">Text</a>', '[[onlinestore:Unknown page]]' => '<a href="/projects/onlinestore/wiki/Unknown_page" class="wiki-page new">Unknown page</a>', @@ -408,11 +392,6 @@ assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---') end - def test_acronym - assert_equal '<p>This is an acronym: <acronym title="American Civil Liberties Union">ACLU</acronym>.</p>', - textilizable('This is an acronym: ACLU(American Civil Liberties Union).') - end - def test_footnotes raw = <<-RAW This is some text[1]. @@ -443,25 +422,60 @@ h2. Subtitle with [[Wiki|another Wiki]] link h2. Subtitle with %{color:red}red text% + +h3. Subtitle with *some* _modifiers_ h1. Another title -h2. An "Internet link":http://www.redmine.org/ inside subtitle +h3. An "Internet link":http://www.redmine.org/ inside subtitle h2. "Project Name !/attachments/1234/logo_small.gif! !/attachments/5678/logo_2.png!":/projects/projectname/issues RAW - expected = '<ul class="toc">' + - '<li class="heading1"><a href="#Title">Title</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + - '<li class="heading2"><a href="#Subtitle-with-red-text">Subtitle with red text</a></li>' + - '<li class="heading1"><a href="#Another-title">Another title</a></li>' + - '<li class="heading2"><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' + - '<li class="heading2"><a href="#Project-Name">Project Name</a></li>' + + expected = '<ul class="toc">' + + '<li><a href="#Title">Title</a>' + + '<ul>' + + '<li><a href="#Subtitle-with-a-Wiki-link">Subtitle with a Wiki link</a></li>' + + '<li><a href="#Subtitle-with-another-Wiki-link">Subtitle with another Wiki link</a></li>' + + '<li><a href="#Subtitle-with-red-text">Subtitle with red text</a>' + + '<ul>' + + '<li><a href="#Subtitle-with-some-modifiers">Subtitle with some modifiers</a></li>' + + '</ul>' + + '</li>' + + '</ul>' + + '</li>' + + '<li><a href="#Another-title">Another title</a>' + + '<ul>' + + '<li>' + + '<ul>' + + '<li><a href="#An-Internet-link-inside-subtitle">An Internet link inside subtitle</a></li>' + + '</ul>' + + '</li>' + + '<li><a href="#Project-Name">Project Name</a></li>' + + '</ul>' + + '</li>' + '</ul>' + @project = Project.find(1) + assert textilizable(raw).gsub("\n", "").include?(expected) + end + + def test_table_of_content_should_contain_included_page_headings + raw = <<-RAW +{{toc}} + +h1. Included + +{{include(Child_1)}} +RAW + + expected = '<ul class="toc">' + + '<li><a href="#Included">Included</a></li>' + + '<li><a href="#Child-page-1">Child page 1</a></li>' + + '</ul>' + + @project = Project.find(1) assert textilizable(raw).gsub("\n", "").include?(expected) end
--- a/test/unit/issue_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/issue_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -503,6 +503,17 @@ assert !closed_statuses.empty? end + def test_rescheduling_an_issue_should_reschedule_following_issue + issue1 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2) + issue2 = Issue.create!(:project_id => 1, :tracker_id => 1, :author_id => 1, :status_id => 1, :subject => '-', :start_date => Date.today, :due_date => Date.today + 2) + IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) + assert_equal issue1.due_date + 1, issue2.reload.start_date + + issue1.due_date = Date.today + 5 + issue1.save! + assert_equal issue1.due_date + 1, issue2.reload.start_date + end + def test_overdue assert Issue.new(:due_date => 1.day.ago.to_date).overdue? assert !Issue.new(:due_date => Date.today).overdue? @@ -532,9 +543,28 @@ assert Issue.new(:start_date => 100.days.ago.to_date, :due_date => Date.today, :done_ratio => 90).behind_schedule? end end - - def test_assignable_users - assert_kind_of User, Issue.find(1).assignable_users.first + + context "#assignable_users" do + should "be Users" do + assert_kind_of User, Issue.find(1).assignable_users.first + end + + should "include the issue author" do + project = Project.find(1) + non_project_member = User.generate! + issue = Issue.generate_for_project!(project, :author => non_project_member) + + assert issue.assignable_users.include?(non_project_member) + end + + should "not show the issue author twice" do + assignable_user_ids = Issue.find(1).assignable_users.collect(&:id) + assert_equal 2, assignable_user_ids.length + + assignable_user_ids.each do |user_id| + assert_equal 1, assignable_user_ids.select {|i| i == user_id}.length, "User #{user_id} appears more or less than once" + end + end end def test_create_should_send_email_notification @@ -544,7 +574,7 @@ assert issue.save assert_equal 1, ActionMailer::Base.deliveries.size end - + def test_stale_issue_should_not_send_email_notification ActionMailer::Base.deliveries.clear issue = Issue.find(1) @@ -593,6 +623,9 @@ @issue = Issue.find(1) @issue_status = IssueStatus.find(1) @issue_status.update_attribute(:default_done_ratio, 50) + @issue2 = Issue.find(2) + @issue_status2 = IssueStatus.find(2) + @issue_status2.update_attribute(:default_done_ratio, 0) end context "with Setting.issue_done_ratio using the issue_field" do @@ -602,6 +635,7 @@ should "read the issue's field" do assert_equal 0, @issue.done_ratio + assert_equal 30, @issue2.done_ratio end end @@ -612,6 +646,7 @@ should "read the Issue Status's default done ratio" do assert_equal 50, @issue.done_ratio + assert_equal 0, @issue2.done_ratio end end end @@ -621,6 +656,9 @@ @issue = Issue.find(1) @issue_status = IssueStatus.find(1) @issue_status.update_attribute(:default_done_ratio, 50) + @issue2 = Issue.find(2) + @issue_status2 = IssueStatus.find(2) + @issue_status2.update_attribute(:default_done_ratio, 0) end context "with Setting.issue_done_ratio using the issue_field" do @@ -630,8 +668,10 @@ should "not change the issue" do @issue.update_done_ratio_from_issue_status + @issue2.update_done_ratio_from_issue_status - assert_equal 0, @issue.done_ratio + assert_equal 0, @issue.read_attribute(:done_ratio) + assert_equal 30, @issue2.read_attribute(:done_ratio) end end @@ -640,10 +680,12 @@ Setting.issue_done_ratio = 'issue_status' end - should "not change the issue's done ratio" do + should "change the issue's done ratio" do @issue.update_done_ratio_from_issue_status + @issue2.update_done_ratio_from_issue_status - assert_equal 50, @issue.done_ratio + assert_equal 50, @issue.read_attribute(:done_ratio) + assert_equal 0, @issue2.read_attribute(:done_ratio) end end end @@ -726,4 +768,49 @@ assert issue.save assert_equal before, Issue.on_active_project.length end + + context "Issue#recipients" do + setup do + @project = Project.find(1) + @author = User.generate_with_protected! + @assignee = User.generate_with_protected! + @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author) + end + + should "include project recipients" do + assert @project.recipients.present? + @project.recipients.each do |project_recipient| + assert @issue.recipients.include?(project_recipient) + end + end + + should "include the author if the author is active" do + assert @issue.author, "No author set for Issue" + assert @issue.recipients.include?(@issue.author.mail) + end + + should "include the assigned to user if the assigned to user is active" do + assert @issue.assigned_to, "No assigned_to set for Issue" + assert @issue.recipients.include?(@issue.assigned_to.mail) + end + + should "not include users who opt out of all email" do + @author.update_attribute(:mail_notification, :none) + + assert !@issue.recipients.include?(@issue.author.mail) + end + + should "not include the issue author if they are only notified of assigned issues" do + @author.update_attribute(:mail_notification, :only_assigned) + + assert !@issue.recipients.include?(@issue.author.mail) + end + + should "not include the assigned user if they are only notified of owned issues" do + @assignee.update_attribute(:mail_notification, :only_owner) + + assert !@issue.recipients.include?(@issue.assigned_to.mail) + end + + end end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/unit/journal_observer_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,118 @@ +# redMine - project management software +# Copyright (C) 2006-2009 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 JournalObserverTest < ActiveSupport::TestCase + fixtures :issues, :issue_statuses, :journals, :journal_details + + def setup + ActionMailer::Base.deliveries.clear + @journal = Journal.find 1 + end + + # context: issue_updated notified_events + def test_create_should_send_email_notification_with_issue_updated + Setting.notified_events = ['issue_updated'] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + + assert journal.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + + assert journal.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_note_added notified_events + def test_create_should_send_email_notification_with_issue_note_added + Setting.notified_events = ['issue_note_added'] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + journal.notes = 'This update has a note' + + assert journal.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_note_added + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + journal = issue.init_journal(user, issue) + journal.notes = 'This update has a note' + + assert journal.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_status_updated notified_events + def test_create_should_send_email_notification_with_issue_status_updated + Setting.notified_events = ['issue_status_updated'] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.status = IssueStatus.last + + assert issue.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_status_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.status = IssueStatus.last + + assert issue.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + + # context: issue_priority_updated notified_events + def test_create_should_send_email_notification_with_issue_priority_updated + Setting.notified_events = ['issue_priority_updated'] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.priority = IssuePriority.last + + assert issue.save + assert_equal 1, ActionMailer::Base.deliveries.size + end + + def test_create_should_not_send_email_notification_without_issue_priority_updated + Setting.notified_events = [] + issue = Issue.find(:first) + user = User.find(:first) + issue.init_journal(user, issue) + issue.priority = IssuePriority.last + + assert issue.save + assert_equal 0, ActionMailer::Base.deliveries.size + end + +end
--- a/test/unit/lib/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 38 -/svn/!svn/ver/4072/trunk/test/unit/lib +/svn/!svn/ver/4388/trunk/test/unit/lib END redmine_test.rb K 25 svn:wc:ra_dav:version-url V 54 -/svn/!svn/ver/4013/trunk/test/unit/lib/redmine_test.rb +/svn/!svn/ver/4388/trunk/test/unit/lib/redmine_test.rb END
--- a/test/unit/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-07T22:38:10.728638Z +4388 +jplang @@ -35,11 +35,11 @@ -2010-09-23T14:37:45.503764Z +2010-11-19T13:04:41.321681Z 8adb9955639998853d35f1a1181cd654 -2010-08-22T18:42:00.112555Z -4013 -edavis10 +2010-11-07T22:38:10.728638Z +4388 +jplang
--- a/test/unit/lib/redmine/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 46 -/svn/!svn/ver/4072/trunk/test/unit/lib/redmine +/svn/!svn/ver/4376/trunk/test/unit/lib/redmine END menu_manager_test.rb K 25 @@ -25,7 +25,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3034/trunk/test/unit/lib/redmine/i18n_test.rb +/svn/!svn/ver/4183/trunk/test/unit/lib/redmine/i18n_test.rb END hook_test.rb K 25 @@ -51,3 +51,9 @@ V 67 /svn/!svn/ver/3028/trunk/test/unit/lib/redmine/unified_diff_test.rb END +notifiable_test.rb +K 25 +svn:wc:ra_dav:version-url +V 65 +/svn/!svn/ver/4222/trunk/test/unit/lib/redmine/notifiable_test.rb +END
--- a/test/unit/lib/redmine/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-06T17:47:27.890964Z +4376 +jplang @@ -134,11 +134,11 @@ -2010-09-23T14:37:45.491768Z -f6356bf322f1fd30abbdaedc92e615f6 -2009-11-12T22:00:29.290944Z -3034 -jplang +2010-11-19T13:04:41.309564Z +a134c7beb75336db19db53dcfdb95250 +2010-09-26T17:13:52.794850Z +4183 +edavis10 has-props @@ -160,7 +160,7 @@ -3669 +3798 hook_test.rb file @@ -307,6 +307,40 @@ wiki_formatting dir +notifiable_test.rb +file + + + + +2010-11-19T13:04:41.309564Z +5bcb90581762b7478b6fd175746846e7 +2010-09-28T21:09:06.467392Z +4222 +edavis10 + + + + + + + + + + + + + + + + + + + + + +1323 + menu_manager dir
--- a/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,7 @@ set_language_if_valid 'en' today = Date.today Setting.date_format = '' - assert_equal I18n.l(today), format_date(today) + assert_equal I18n.l(today, :count => today.strftime('%d')), format_date(today) end def test_date_format @@ -47,7 +47,7 @@ format_date(Date.today) format_time(Time.now) format_time(Time.now, false) - assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}" + assert_not_equal 'default', ::I18n.l(Date.today, :count => Date.today.strftime('%d'), :format => :default), "date.formats.default missing in #{lang}" assert_not_equal 'time', ::I18n.l(Time.now, :format => :time), "time.formats.time missing in #{lang}" end assert l('date.day_names').is_a?(Array) @@ -63,8 +63,8 @@ now = Time.now Setting.date_format = '' Setting.time_format = '' - assert_equal I18n.l(now), format_time(now) - assert_equal I18n.l(now, :format => :time), format_time(now, false) + assert_equal I18n.l(now, :count => now.strftime('%d')), format_time(now) + assert_equal I18n.l(now, :count => now.strftime('%d'), :format => :time), format_time(now, false) end def test_time_format
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/unit/lib/redmine/.svn/text-base/notifiable_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,31 @@ +# redMine - project management software +# Copyright (C) 2006-2008 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 Redmine::NotifiableTest < ActiveSupport::TestCase + def setup + end + + def test_all + assert_equal 11, Redmine::Notifiable.all.length + + %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable| + assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}" + end + end +end
--- a/test/unit/lib/redmine/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/helpers http://redmine.rubyforge.org/svn
--- a/test/unit/lib/redmine/i18n_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/i18n_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,7 @@ set_language_if_valid 'en' today = Date.today Setting.date_format = '' - assert_equal I18n.l(today), format_date(today) + assert_equal I18n.l(today, :count => today.strftime('%d')), format_date(today) end def test_date_format @@ -47,7 +47,7 @@ format_date(Date.today) format_time(Time.now) format_time(Time.now, false) - assert_not_equal 'default', ::I18n.l(Date.today, :format => :default), "date.formats.default missing in #{lang}" + assert_not_equal 'default', ::I18n.l(Date.today, :count => Date.today.strftime('%d'), :format => :default), "date.formats.default missing in #{lang}" assert_not_equal 'time', ::I18n.l(Time.now, :format => :time), "time.formats.time missing in #{lang}" end assert l('date.day_names').is_a?(Array) @@ -63,8 +63,8 @@ now = Time.now Setting.date_format = '' Setting.time_format = '' - assert_equal I18n.l(now), format_time(now) - assert_equal I18n.l(now, :format => :time), format_time(now, false) + assert_equal I18n.l(now, :count => now.strftime('%d')), format_time(now) + assert_equal I18n.l(now, :count => now.strftime('%d'), :format => :time), format_time(now, false) end def test_time_format
--- a/test/unit/lib/redmine/menu_manager/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/menu_manager/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/menu_manager http://redmine.rubyforge.org/svn
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/unit/lib/redmine/notifiable_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -0,0 +1,31 @@ +# redMine - project management software +# Copyright (C) 2006-2008 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 Redmine::NotifiableTest < ActiveSupport::TestCase + def setup + end + + def test_all + assert_equal 11, Redmine::Notifiable.all.length + + %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable| + assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}" + end + end +end
--- a/test/unit/lib/redmine/scm/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 50 -/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm +/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm END
--- a/test/unit/lib/redmine/scm/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm http://redmine.rubyforge.org/svn -2010-08-08T07:07:30.284069Z -3925 -jbbarth +2010-09-26T21:54:52.929683Z +4189 +edavis10
--- a/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 59 -/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm/adapters +/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm/adapters END subversion_adapter_test.rb K 25 @@ -13,7 +13,7 @@ K 25 svn:wc:ra_dav:version-url V 79 -/svn/!svn/ver/3925/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +/svn/!svn/ver/4189/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb END mercurial_adapter_test.rb K 25
--- a/test/unit/lib/redmine/scm/adapters/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/adapters/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm/adapters http://redmine.rubyforge.org/svn -2010-08-08T07:07:30.284069Z -3925 -jbbarth +2010-09-26T21:54:52.929683Z +4189 +edavis10 @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.499807Z -2a16f983128223e9db99adc3f1fffa75 -2010-08-08T07:07:30.284069Z -3925 -jbbarth +2010-11-19T13:04:41.277281Z +e02110174147a44bc84b41d56c9bde65 +2010-09-26T21:54:52.929683Z +4189 +edavis10 has-props @@ -92,7 +92,7 @@ -1472 +2992 mercurial_adapter_test.rb file
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -13,13 +13,25 @@ end def test_getting_all_revisions - assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length + assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length end def test_getting_certain_revisions assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length end + def test_getting_revisions_with_spaces_in_filename + assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length + end + + def test_getting_revisions_with_leading_and_trailing_spaces_in_filename + assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path] + end + + def test_getting_entries_with_leading_and_trailing_spaces_in_filename + assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name + end + def test_annotate annotate = @adapter.annotate('sources/watchers_controller.rb') assert_kind_of Redmine::Scm::Adapters::Annotate, annotate @@ -34,6 +46,22 @@ assert_kind_of Redmine::Scm::Adapters::Annotate, annotate assert_equal 2, annotate.lines.size end + + def test_last_rev + last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43") + assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid + assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier + assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author + assert_equal "2009-06-24 05:27:38".to_time, last_rev.time + end + + def test_last_rev_with_spaces_in_filename + last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b") + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier + assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author + assert_equal "2010-09-18 19:59:46".to_time, last_rev.time + end else puts "Git test repository NOT FOUND. Skipping unit tests !!!" def test_fake; assert true end
--- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -13,13 +13,25 @@ end def test_getting_all_revisions - assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length + assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length end def test_getting_certain_revisions assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length end + def test_getting_revisions_with_spaces_in_filename + assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length + end + + def test_getting_revisions_with_leading_and_trailing_spaces_in_filename + assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path] + end + + def test_getting_entries_with_leading_and_trailing_spaces_in_filename + assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name + end + def test_annotate annotate = @adapter.annotate('sources/watchers_controller.rb') assert_kind_of Redmine::Scm::Adapters::Annotate, annotate @@ -34,6 +46,22 @@ assert_kind_of Redmine::Scm::Adapters::Annotate, annotate assert_equal 2, annotate.lines.size end + + def test_last_rev + last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43") + assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid + assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier + assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author + assert_equal "2009-06-24 05:27:38".to_time, last_rev.time + end + + def test_last_rev_with_spaces_in_filename + last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b") + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid + assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier + assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author + assert_equal "2010-09-18 19:59:46".to_time, last_rev.time + end else puts "Git test repository NOT FOUND. Skipping unit tests !!!" def test_fake; assert true end
--- a/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,17 +1,17 @@ K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/3605/trunk/test/unit/lib/redmine/wiki_formatting +/svn/!svn/ver/4376/trunk/test/unit/lib/redmine/wiki_formatting END textile_formatter_test.rb K 25 svn:wc:ra_dav:version-url V 88 -/svn/!svn/ver/3605/trunk/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb +/svn/!svn/ver/4374/trunk/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb END macros_test.rb K 25 svn:wc:ra_dav:version-url V 77 -/svn/!svn/ver/2317/trunk/test/unit/lib/redmine/wiki_formatting/macros_test.rb +/svn/!svn/ver/4376/trunk/test/unit/lib/redmine/wiki_formatting/macros_test.rb END
--- a/test/unit/lib/redmine/wiki_formatting/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/wiki_formatting http://redmine.rubyforge.org/svn -2010-03-20T12:54:23.540906Z -3605 +2010-11-06T17:47:27.890964Z +4376 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.503764Z -b8ba1b21fe83c63c449dd87d6e0a3e29 -2010-03-20T12:54:23.540906Z -3605 +2010-11-19T13:04:41.297604Z +b45c5a45c4f044bae05fc85dba330c90 +2010-11-06T13:29:23.489999Z +4374 jplang has-props @@ -58,7 +58,7 @@ -3038 +3468 macros_test.rb file @@ -66,11 +66,11 @@ -2010-09-23T14:37:45.503764Z -a1049f9d77597fa44715313283e4fdf6 -2009-01-26T01:47:51.253124Z -2317 -edavis10 +2010-11-19T13:04:41.297604Z +b78c91f5e9e344345217756cb443e096 +2010-11-06T17:47:27.890964Z +4376 +jplang has-props @@ -92,5 +92,5 @@ -4009 +4117
--- a/test/unit/lib/redmine/wiki_formatting/.svn/text-base/macros_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/.svn/text-base/macros_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,9 @@ class Redmine::WikiFormatting::MacrosTest < HelperTestCase include ApplicationHelper include ActionView::Helpers::TextHelper + include ActionView::Helpers::SanitizeHelper + extend ActionView::Helpers::SanitizeHelper::ClassMethods + fixtures :projects, :roles, :enabled_modules, :users, :repositories, :changesets, :trackers, :issue_statuses, :issues,
--- a/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/.svn/text-base/textile_formatter_test.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -78,6 +78,14 @@ ) end + def test_acronyms + assert_html_output( + 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>', + '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym', + 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>' + ) + end + private def assert_html_output(to_test)
--- a/test/unit/lib/redmine/wiki_formatting/macros_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/macros_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -20,6 +20,9 @@ class Redmine::WikiFormatting::MacrosTest < HelperTestCase include ApplicationHelper include ActionView::Helpers::TextHelper + include ActionView::Helpers::SanitizeHelper + extend ActionView::Helpers::SanitizeHelper::ClassMethods + fixtures :projects, :roles, :enabled_modules, :users, :repositories, :changesets, :trackers, :issue_statuses, :issues,
--- a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -78,6 +78,14 @@ ) end + def test_acronyms + assert_html_output( + 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>', + '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym', + 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>' + ) + end + private def assert_html_output(to_test)
--- a/test/unit/mail_handler_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/mail_handler_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -25,11 +25,13 @@ :roles, :members, :member_roles, + :users, :issues, :issue_statuses, :workflows, :trackers, :projects_trackers, + :versions, :enumerations, :issue_categories, :custom_fields, @@ -41,6 +43,7 @@ def setup ActionMailer::Base.deliveries.clear + Setting.notified_events = Redmine::Notifiable.all.collect(&:name) end def test_add_issue @@ -58,6 +61,9 @@ assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to + assert_equal Version.find_by_name('alpha'), issue.fixed_version + assert_equal 2.5, issue.estimated_hours + assert_equal 30, issue.done_ratio # keywords should be removed from the email body assert !issue.description.match(/^Project:/i) assert !issue.description.match(/^Status:/i) @@ -152,7 +158,7 @@ assert !issue.new_record? issue.reload assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo')) - assert_equal 1, issue.watchers.size + assert_equal 1, issue.watcher_user_ids.size end def test_add_issue_by_unknown_user @@ -223,6 +229,34 @@ Role.anonymous.add_permission!(:add_issues) assert_equal false, submit_email('ticket_without_from_header.eml') end + + def test_add_issue_with_invalid_attributes + issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority') + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_nil issue.assigned_to + assert_nil issue.start_date + assert_nil issue.due_date + assert_equal 0, issue.done_ratio + assert_equal 'Normal', issue.priority.to_s + assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') + end + + def test_add_issue_with_localized_attributes + User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr' + issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority') + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert_equal 'New ticket on a given project', issue.subject + assert_equal User.find_by_login('jsmith'), issue.author + assert_equal Project.find(2), issue.project + assert_equal 'Feature request', issue.tracker.to_s + assert_equal 'Stock management', issue.category.to_s + assert_equal 'Urgent', issue.priority.to_s + assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') + end def test_add_issue_with_japanese_keywords tracker = Tracker.create!(:name => '開発') @@ -240,6 +274,7 @@ end def test_add_issue_should_send_email_notification + Setting.notified_events = ['issue_added'] ActionMailer::Base.deliveries.clear # This email contains: 'Project: onlinestore' issue = submit_email('ticket_on_given_project.eml') @@ -267,6 +302,7 @@ assert_equal '2010-01-01', issue.start_date.to_s assert_equal '2010-12-31', issue.due_date.to_s assert_equal User.find_by_login('jsmith'), issue.assigned_to + assert_equal 'Updated custom value', issue.custom_value_for(CustomField.find_by_name('Searchable field')).value end def test_add_issue_note_should_send_email_notification @@ -333,6 +369,38 @@ end end + context "with a single quoted reply (e.g. reply to a Redmine email notification)" do + setup do + Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' + end + + should "truncate the email at the delimiter with the quoted reply symbols (>)" do + journal = submit_email('issue_update_with_quoted_reply_above.eml') + assert journal.is_a?(Journal) + assert journal.notes.include?('An update to the issue by the sender.') + assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) + assert !journal.notes.include?('Looks like the JSON api for projects was missed.') + + end + + end + + context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do + setup do + Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---' + end + + should "truncate the email at the delimiter with the quoted reply symbols (>)" do + journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml') + assert journal.is_a?(Journal) + assert journal.notes.include?('An update to the issue by the sender.') + assert !journal.notes.match(Regexp.escape("--- Reply above. Do not remove this line. ---")) + assert !journal.notes.include?('Looks like the JSON api for projects was missed.') + + end + + end + context "with multiple strings" do setup do Setting.mail_handler_body_delimiters = "---\nBREAK"
--- a/test/unit/mailer_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/mailer_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -393,4 +393,21 @@ # should restore perform_deliveries assert ActionMailer::Base.perform_deliveries end + + context "layout" do + should "include the emails_header" do + with_settings(:emails_header => "*Header content*") do + assert Mailer.deliver_test(User.find(1)) + + assert_select_email do + assert_select ".header" do + assert_select "strong", :text => "Header content" + end + end + end + + end + + end + end
--- a/test/unit/project_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/project_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -29,7 +29,6 @@ should_validate_presence_of :name should_validate_presence_of :identifier - should_validate_uniqueness_of :name should_validate_uniqueness_of :identifier context "associations" do @@ -102,6 +101,7 @@ @ecookbook.reload assert !@ecookbook.active? + assert @ecookbook.archived? assert !user.projects.include?(@ecookbook) # Subproject are also archived assert !@ecookbook.children.empty? @@ -129,6 +129,7 @@ assert @ecookbook.unarchive @ecookbook.reload assert @ecookbook.active? + assert !@ecookbook.archived? assert user.projects.include?(@ecookbook) # Subproject can now be unarchived @ecookbook_sub1.reload @@ -860,6 +861,8 @@ assert_nil @project.start_date end + + should "be tested when issues have no start date" should "be the earliest start date of it's issues" do early = 7.days.ago.to_date @@ -889,6 +892,8 @@ assert_nil @project.due_date end + + should "be tested when issues have no due date" should "be the latest due date of it's issues" do future = 7.days.from_now.to_date @@ -960,4 +965,54 @@ end end + + context "#notified_users" do + setup do + @project = Project.generate! + @role = Role.generate! + + @user_with_membership_notification = User.generate!(:mail_notification => 'selected') + Member.generate!(:project => @project, :roles => [@role], :principal => @user_with_membership_notification, :mail_notification => true) + + @all_events_user = User.generate!(:mail_notification => 'all') + Member.generate!(:project => @project, :roles => [@role], :principal => @all_events_user) + + @no_events_user = User.generate!(:mail_notification => 'none') + Member.generate!(:project => @project, :roles => [@role], :principal => @no_events_user) + + @only_my_events_user = User.generate!(:mail_notification => 'only_my_events') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_my_events_user) + + @only_assigned_user = User.generate!(:mail_notification => 'only_assigned') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_assigned_user) + + @only_owned_user = User.generate!(:mail_notification => 'only_owner') + Member.generate!(:project => @project, :roles => [@role], :principal => @only_owned_user) + end + + should "include members with a mail notification" do + assert @project.notified_users.include?(@user_with_membership_notification) + end + + should "include users with the 'all' notification option" do + assert @project.notified_users.include?(@all_events_user) + end + + should "not include users with the 'none' notification option" do + assert !@project.notified_users.include?(@no_events_user) + end + + should "not include users with the 'only_my_events' notification option" do + assert !@project.notified_users.include?(@only_my_events_user) + end + + should "not include users with the 'only_assigned' notification option" do + assert !@project.notified_users.include?(@only_assigned_user) + end + + should "not include users with the 'only_owner' notification option" do + assert !@project.notified_users.include?(@only_owned_user) + end + end + end
--- a/test/unit/query_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/query_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -397,8 +397,8 @@ group2 = Group.generate!.reload expected_group_list = [ - [group1.name, group1.id], - [group2.name, group2.id] + [group1.name, group1.id.to_s], + [group2.name, group2.id.to_s] ] assert_equal expected_group_list.sort, @query.available_filters["member_of_group"][:values].sort end @@ -415,14 +415,14 @@ end should "have a list of the Roles as values" do - assert @query.available_filters["assigned_to_role"][:values].include?(['Manager',1]) - assert @query.available_filters["assigned_to_role"][:values].include?(['Developer',2]) - assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter',3]) + assert @query.available_filters["assigned_to_role"][:values].include?(['Manager','1']) + assert @query.available_filters["assigned_to_role"][:values].include?(['Developer','2']) + assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter','3']) end should "not include the built in Roles as values" do - assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member',4]) - assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous',5]) + assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member','4']) + assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous','5']) end end
--- a/test/unit/repository_git_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/repository_git_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -34,8 +34,8 @@ @repository.fetch_changesets @repository.reload - assert_equal 13, @repository.changesets.count - assert_equal 22, @repository.changes.count + assert_equal 15, @repository.changesets.count + assert_equal 24, @repository.changes.count commit = @repository.changesets.find(:first, :order => 'committed_on ASC') assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments @@ -57,10 +57,10 @@ # Remove the 3 latest changesets @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy) @repository.reload - assert_equal 10, @repository.changesets.count + assert_equal 12, @repository.changesets.count @repository.fetch_changesets - assert_equal 13, @repository.changesets.count + assert_equal 15, @repository.changesets.count end else puts "Git test repository NOT FOUND. Skipping unit tests !!!"
--- a/test/unit/repository_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/repository_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -67,6 +67,7 @@ def test_scan_changesets_for_issue_ids Setting.default_language = 'en' + Setting.notified_events = ['issue_added','issue_updated'] # choosing a status to apply to fix issues Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
--- a/test/unit/user_test.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/test/unit/user_test.rb Fri Nov 19 13:24:41 2010 +0000 @@ -60,6 +60,18 @@ user.password, user.password_confirmation = "password", "password" assert user.save end + + context "User#before_create" do + should "set the mail_notification to the default Setting" do + @user1 = User.generate_with_protected! + assert_equal 'only_my_events', @user1.mail_notification + + with_settings :default_notification_option => 'all' do + @user2 = User.generate_with_protected! + assert_equal 'all', @user2.mail_notification + end + end + end context "User.login" do should "be case-insensitive." do @@ -285,7 +297,7 @@ end def test_mail_notification_all - @jsmith.mail_notification = true + @jsmith.mail_notification = 'all' @jsmith.notified_project_ids = [] @jsmith.save @jsmith.reload @@ -293,15 +305,15 @@ end def test_mail_notification_selected - @jsmith.mail_notification = false + @jsmith.mail_notification = 'selected' @jsmith.notified_project_ids = [1] @jsmith.save @jsmith.reload assert Project.find(1).recipients.include?(@jsmith.mail) end - def test_mail_notification_none - @jsmith.mail_notification = false + def test_mail_notification_only_my_events + @jsmith.mail_notification = 'only_my_events' @jsmith.notified_project_ids = [] @jsmith.save @jsmith.reload @@ -384,6 +396,23 @@ assert ! @dlopper.allowed_to?(:delete_messages, project) #Developper end end + + context "with multiple projects" do + should "return false if array is empty" do + assert ! @admin.allowed_to?(:view_project, []) + end + + should "return true only if user has permission on all these projects" do + assert @admin.allowed_to?(:view_project, Project.all) + assert ! @dlopper.allowed_to?(:view_project, Project.all) #cannot see Project(2) + assert @jsmith.allowed_to?(:edit_issues, @jsmith.projects) #Manager or Developer everywhere + assert ! @jsmith.allowed_to?(:delete_issue_watchers, @jsmith.projects) #Dev cannot delete_issue_watchers + end + + should "behave correctly with arrays of 1 project" do + assert ! User.anonymous.allowed_to?(:delete_issues, [Project.first]) + end + end context "with options[:global]" do should "authorize if user has at least one role that has this permission" do @@ -398,6 +427,72 @@ end end + context "User#notify_about?" do + context "Issues" do + setup do + @project = Project.find(1) + @author = User.generate_with_protected! + @assignee = User.generate_with_protected! + @issue = Issue.generate_for_project!(@project, :assigned_to => @assignee, :author => @author) + end + + should "be true for a user with :all" do + @author.update_attribute(:mail_notification, :all) + assert @author.notify_about?(@issue) + end + + should "be false for a user with :none" do + @author.update_attribute(:mail_notification, :none) + assert ! @author.notify_about?(@issue) + end + + should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do + @user = User.generate_with_protected!(:mail_notification => :only_my_events) + assert ! @user.notify_about?(@issue) + end + + should "be true for a user with :only_my_events and is the author" do + @author.update_attribute(:mail_notification, :only_my_events) + assert @author.notify_about?(@issue) + end + + should "be true for a user with :only_my_events and is the assignee" do + @assignee.update_attribute(:mail_notification, :only_my_events) + assert @assignee.notify_about?(@issue) + end + + should "be true for a user with :only_assigned and is the assignee" do + @assignee.update_attribute(:mail_notification, :only_assigned) + assert @assignee.notify_about?(@issue) + end + + should "be false for a user with :only_assigned and is not the assignee" do + @author.update_attribute(:mail_notification, :only_assigned) + assert ! @author.notify_about?(@issue) + end + + should "be true for a user with :only_owner and is the author" do + @author.update_attribute(:mail_notification, :only_owner) + assert @author.notify_about?(@issue) + end + + should "be false for a user with :only_owner and is not the author" do + @assignee.update_attribute(:mail_notification, :only_owner) + assert ! @assignee.notify_about?(@issue) + end + + should "be false if the mail_notification is anything else" do + @assignee.update_attribute(:mail_notification, :somthing_else) + assert ! @assignee.notify_about?(@issue) + end + + end + + context "other events" do + should 'be added and tested' + end + end + if Object.const_defined?(:OpenID) def test_setting_identity_url
--- a/tmp/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/tmp/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/tmp http://redmine.rubyforge.org/svn
--- a/tmp/cache/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/tmp/cache/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/tmp/cache http://redmine.rubyforge.org/svn
--- a/tmp/sessions/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/tmp/sessions/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/tmp/sessions http://redmine.rubyforge.org/svn
--- a/tmp/sockets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/tmp/sockets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/tmp/sockets http://redmine.rubyforge.org/svn
--- a/tmp/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/tmp/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/tmp/test http://redmine.rubyforge.org/svn
--- a/vendor/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 31 -/svn/!svn/ver/4094/trunk/vendor +/svn/!svn/ver/4406/trunk/vendor END
--- a/vendor/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor http://redmine.rubyforge.org/svn -2010-09-17T04:06:40.671348Z -4094 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang has-props
--- a/vendor/gems/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/gems/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/gems http://redmine.rubyforge.org/svn
--- a/vendor/gems/rubytree-0.5.2/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/gems/rubytree-0.5.2/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2 http://redmine.rubyforge.org/svn
--- a/vendor/gems/rubytree-0.5.2/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/gems/rubytree-0.5.2/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib http://redmine.rubyforge.org/svn
--- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib/tree http://redmine.rubyforge.org/svn
--- a/vendor/gems/rubytree-0.5.2/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/gems/rubytree-0.5.2/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 39 -/svn/!svn/ver/4094/trunk/vendor/plugins +/svn/!svn/ver/4406/trunk/vendor/plugins END
--- a/vendor/plugins/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins http://redmine.rubyforge.org/svn -2010-09-17T04:06:40.671348Z -4094 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -41,10 +41,10 @@ engines dir -classic_pagination +coderay-0.9.2 dir -coderay-0.9.2 +classic_pagination dir acts_as_versioned
--- a/vendor/plugins/acts_as_activity_provider/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_activity_provider/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_activity_provider/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_attachable/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_attachable/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_attachable/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_attachable/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_customizable/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 60 -/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable +/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable END init.rb K 25
--- a/vendor/plugins/acts_as_customizable/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable http://redmine.rubyforge.org/svn -2010-03-13T14:56:49.379682Z -3573 +2010-11-07T14:15:01.891476Z +4382 jplang
--- a/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable/lib +/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable/lib END acts_as_customizable.rb K 25 svn:wc:ra_dav:version-url V 88 -/svn/!svn/ver/3573/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb +/svn/!svn/ver/4382/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb END
--- a/vendor/plugins/acts_as_customizable/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable/lib http://redmine.rubyforge.org/svn -2010-03-13T14:56:49.379682Z -3573 +2010-11-07T14:15:01.891476Z +4382 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.539808Z -9d2f2e3d8ac21a68cbaafca4788c2f1d -2010-03-13T14:56:49.379682Z -3573 +2010-11-19T13:04:50.920916Z +1b80419ad25063ffc8725be3174c8fb8 +2010-11-07T14:15:01.891476Z +4382 jplang has-props @@ -58,5 +58,5 @@ -3715 +3825
--- a/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -62,6 +62,10 @@ @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) } end + def visible_custom_field_values + custom_field_values.select(&:visible?) + end + def custom_field_values_changed? @custom_field_values_changed == true end
--- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb Fri Nov 19 13:24:41 2010 +0000 @@ -62,6 +62,10 @@ @custom_field_values ||= available_custom_fields.collect { |x| custom_values.detect { |v| v.custom_field == x } || custom_values.build(:custom_field => x, :value => nil) } end + def visible_custom_field_values + custom_field_values.select(&:visible?) + end + def custom_field_values_changed? @custom_field_values_changed == true end
--- a/vendor/plugins/acts_as_event/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_event/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_event/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_event/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_list/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_list/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_list/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_list/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_list/lib/active_record/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_list/lib/active_record/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record/acts http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_list/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_list/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_searchable/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_searchable/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_searchable/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_searchable/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test/fixtures http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_versioned/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_versioned/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_versioned/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_versioned/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_versioned/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_versioned/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_watchable/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_watchable/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable http://redmine.rubyforge.org/svn
--- a/vendor/plugins/acts_as_watchable/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/acts_as_watchable/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set +/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set END awesome_nested_set.gemspec K 25
--- a/vendor/plugins/awesome_nested_set/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set http://redmine.rubyforge.org/svn -2010-03-13T14:56:49.379682Z -3573 +2010-11-14T16:24:21.989522Z +4406 jplang
--- a/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 62 -/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set/lib +/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib END awesome_nested_set.rb K 25 svn:wc:ra_dav:version-url V 84 -/svn/!svn/ver/3573/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb +/svn/!svn/ver/4406/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb END
--- a/vendor/plugins/awesome_nested_set/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,14 +1,14 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib http://redmine.rubyforge.org/svn -2010-03-13T14:56:49.379682Z -3573 +2010-11-14T16:24:21.989522Z +4406 jplang @@ -32,10 +32,10 @@ -2010-09-23T14:37:45.591804Z -a881f7ea58b493a96550b4457057cddb -2010-03-13T14:56:49.379682Z -3573 +2010-11-19T13:04:50.944921Z +e8fd989882fd3a10519da66c2a73e982 +2010-11-14T16:24:21.989522Z +4406 jplang has-props @@ -58,7 +58,7 @@ -21535 +21530 awesome_nested_set dir
--- a/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -154,7 +154,7 @@ def each_root_valid?(roots_to_validate) left = right = 0 roots_to_validate.all? do |root| - returning(root.left > left && root.right > right) do + (root.left > left && root.right > right).tap do left = root.left right = root.right end
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb Fri Nov 19 13:24:41 2010 +0000 @@ -154,7 +154,7 @@ def each_root_valid?(roots_to_validate) left = right = 0 roots_to_validate.all? do |root| - returning(root.left > left && root.right > right) do + (root.left > left && root.right > right).tap do left = root.left right = root.right end
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/rails/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/rails/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/rails http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/test/db/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/test/db/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/db http://redmine.rubyforge.org/svn
--- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/fixtures http://redmine.rubyforge.org/svn
--- a/vendor/plugins/classic_pagination/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/classic_pagination/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination http://redmine.rubyforge.org/svn
--- a/vendor/plugins/classic_pagination/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/classic_pagination/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/classic_pagination/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/classic_pagination/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/classic_pagination/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/classic_pagination/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test/fixtures http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2 http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders http://redmine.rubyforge.org/svn @@ -162,6 +162,40 @@ 835 +count.rb +file + + + + +2010-09-23T14:37:45.643761Z +c262d84ddbdf37e99ff6bcf6dd6a66c2 +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +230 + lines_of_code.rb file @@ -196,40 +230,6 @@ 2395 -count.rb -file - - - - -2010-09-23T14:37:45.643761Z -c262d84ddbdf37e99ff6bcf6dd6a66c2 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -230 - xml.rb file @@ -298,6 +298,9 @@ 236 +html +dir + yaml.rb file @@ -332,9 +335,6 @@ 264 -html -dir - html.rb file @@ -369,6 +369,74 @@ 7856 +comment_filter.rb +file + + + + +2010-09-23T14:37:45.643761Z +32f2d1a9db6f58636d3946a43b5a60f0 +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +808 + +statistic.rb +file + + + + +2010-09-23T14:37:45.647759Z +49017735ef679f73dd65795e30d8e5c7 +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1800 + term.rb file @@ -403,74 +471,6 @@ 4324 -statistic.rb -file - - - - -2010-09-23T14:37:45.647759Z -49017735ef679f73dd65795e30d8e5c7 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1800 - -comment_filter.rb -file - - - - -2010-09-23T14:37:45.643761Z -32f2d1a9db6f58636d3946a43b5a60f0 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -808 - json.rb file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/helpers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners http://redmine.rubyforge.org/svn @@ -26,11 +26,79 @@ e93f8b46-1217-0410-a6f0-8f06a7374b81 +ruby +dir + java dir -ruby -dir +ruby.rb +file + + + + +2010-09-23T14:37:45.675761Z +4a49513a2bda4483a1bfaeba8e57fb2c +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +13715 + +python.rb +file + + + + +2010-09-23T14:37:45.675761Z +939e009d9b197cb6437646be82c02982 +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +9190 java.rb file @@ -66,14 +134,14 @@ 5046 -python.rb +c.rb file -2010-09-23T14:37:45.675761Z -939e009d9b197cb6437646be82c02982 +2010-09-23T14:37:45.667815Z +299db2bdce8368d0bc6d90f5839c87ee 2010-03-16T20:29:12.319937Z 3592 jplang @@ -98,41 +166,7 @@ -9190 - -ruby.rb -file - - - - -2010-09-23T14:37:45.675761Z -4a49513a2bda4483a1bfaeba8e57fb2c -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -13715 +5408 cpp.rb file @@ -168,40 +202,6 @@ 6286 -c.rb -file - - - - -2010-09-23T14:37:45.667815Z -299db2bdce8368d0bc6d90f5839c87ee -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -5408 - groovy.rb file @@ -236,6 +236,40 @@ 8521 +rhtml.rb +file + + + + +2010-09-23T14:37:45.675761Z +456da0b0587037dce29f70bdb4d42253 +2010-03-16T20:29:12.319937Z +3592 +jplang +has-props + + + + + + + + + + + + + + + + + + + + +1526 + debug.rb file @@ -270,40 +304,6 @@ 1281 -rhtml.rb -file - - - - -2010-09-23T14:37:45.675761Z -456da0b0587037dce29f70bdb4d42253 -2010-03-16T20:29:12.319937Z -3592 -jplang -has-props - - - - - - - - - - - - - - - - - - - - -1526 - php.rb file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby http://redmine.rubyforge.org/svn
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/styles http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 47 -/svn/!svn/ver/4094/trunk/vendor/plugins/engines +/svn/!svn/ver/4406/trunk/vendor/plugins/engines END Rakefile K 25
--- a/vendor/plugins/engines/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines http://redmine.rubyforge.org/svn -2010-09-17T04:06:40.671348Z -4094 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang
--- a/vendor/plugins/engines/generators/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ K 25 svn:wc:ra_dav:version-url V 58 -/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators +/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators END
--- a/vendor/plugins/engines/generators/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators http://redmine.rubyforge.org/svn -2009-10-07T16:43:50.656336Z -2904 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,13 +1,13 @@ K 25 svn:wc:ra_dav:version-url V 75 -/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators/plugin_migration +/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration END plugin_migration_generator.rb K 25 svn:wc:ra_dav:version-url V 105 -/svn/!svn/ver/2904/trunk/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb +/svn/!svn/ver/4406/trunk/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb END USAGE K 25
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration http://redmine.rubyforge.org/svn -2009-10-07T16:43:50.656336Z -2904 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -32,11 +32,11 @@ -2010-09-23T14:37:45.691758Z -e7efe6b1595915b993b92a7804dd810b -2009-10-07T16:43:50.656336Z -2904 -edavis10 +2010-11-19T13:04:50.916901Z +3f4805cb1e4a8b8a3ed180f22d81c285 +2010-11-14T16:24:21.989522Z +4406 +jplang has-props @@ -58,7 +58,7 @@ -3571 +3565 USAGE file
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/text-base/plugin_migration_generator.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/.svn/text-base/plugin_migration_generator.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -76,7 +76,7 @@ # plugin names involved is shorter than 230 characters that one will be # used. Otherwise a shorter name will be returned. def build_migration_name - returning descriptive_migration_name do |name| + descriptive_migration_name.tap do |name| name.replace short_migration_name if name.length > MAX_FILENAME_LENGTH end end
--- a/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb Fri Nov 19 13:24:41 2010 +0000 @@ -76,7 +76,7 @@ # plugin names involved is shorter than 230 characters that one will be # used. Otherwise a shorter name will be returned. def build_migration_name - returning descriptive_migration_name do |name| + descriptive_migration_name.tap do |name| name.replace short_migration_name if name.length > MAX_FILENAME_LENGTH end end
--- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/lib/engines/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/lib/engines/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/lib/engines/plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/lib/engines/plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/tasks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/tasks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/tasks http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/helpers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/helpers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/things/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/things/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/plugin_mail http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/functional/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/functional/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/functional http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_load_path http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_migration/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_routing/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/config http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_testing/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/app http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/unit/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/unit/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit http://redmine.rubyforge.org/svn
--- a/vendor/plugins/engines/test/unit/test_testing/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/engines/test/unit/test_testing/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit/test_testing http://redmine.rubyforge.org/svn
--- a/vendor/plugins/gravatar/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ K 25 svn:wc:ra_dav:version-url V 48 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar +/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar END Rakefile K 25
--- a/vendor/plugins/gravatar/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang
--- a/vendor/plugins/gravatar/lib/.svn/all-wcprops Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/lib/.svn/all-wcprops Fri Nov 19 13:24:41 2010 +0000 @@ -1,11 +1,11 @@ K 25 svn:wc:ra_dav:version-url V 52 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/lib +/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib END gravatar.rb K 25 svn:wc:ra_dav:version-url V 64 -/svn/!svn/ver/4072/trunk/vendor/plugins/gravatar/lib/gravatar.rb +/svn/!svn/ver/4406/trunk/vendor/plugins/gravatar/lib/gravatar.rb END
--- a/vendor/plugins/gravatar/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,15 +1,15 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/lib http://redmine.rubyforge.org/svn -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -32,11 +32,11 @@ -2010-09-24T12:48:29.639851Z -a988835a981d11a6fb73f61ba01e56e4 -2010-09-10T03:09:02.311267Z -4072 -edavis10 +2010-11-19T13:04:50.928934Z +a25a3e98e0d582955ee8fd520f424273 +2010-11-14T16:24:21.989522Z +4406 +jplang @@ -58,5 +58,5 @@ -3076 +3070
--- a/vendor/plugins/gravatar/lib/.svn/text-base/gravatar.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/lib/.svn/text-base/gravatar.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -71,7 +71,7 @@ email_hash = Digest::MD5.hexdigest(email) options = DEFAULT_OPTIONS.merge(options) options[:default] = CGI::escape(options[:default]) unless options[:default].nil? - returning gravatar_api_url(email_hash, options.delete(:ssl)) do |url| + gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url| opts = [] [:rating, :size, :default].each do |opt| unless options[opt].nil?
--- a/vendor/plugins/gravatar/lib/gravatar.rb Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/lib/gravatar.rb Fri Nov 19 13:24:41 2010 +0000 @@ -71,7 +71,7 @@ email_hash = Digest::MD5.hexdigest(email) options = DEFAULT_OPTIONS.merge(options) options[:default] = CGI::escape(options[:default]) unless options[:default].nil? - returning gravatar_api_url(email_hash, options.delete(:ssl)) do |url| + gravatar_api_url(email_hash, options.delete(:ssl)).tap do |url| opts = [] [:rating, :size, :default].each do |opt| unless options[opt].nil?
--- a/vendor/plugins/gravatar/spec/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/gravatar/spec/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/spec http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/generators/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/generators/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/tasks/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/tasks/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/tasks http://redmine.rubyforge.org/svn
--- a/vendor/plugins/open_id_authentication/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/open_id_authentication/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/prepend_engine_views/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/prepend_engine_views/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/prepend_engine_views http://redmine.rubyforge.org/svn
--- a/vendor/plugins/rfpdf/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/rfpdf/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf http://redmine.rubyforge.org/svn
--- a/vendor/plugins/rfpdf/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/rfpdf/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib/rfpdf http://redmine.rubyforge.org/svn
--- a/vendor/plugins/rfpdf/test/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/rfpdf/test/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/test http://redmine.rubyforge.org/svn
--- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4 http://redmine.rubyforge.org/svn
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib http://redmine.rubyforge.org/svn
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net http://redmine.rubyforge.org/svn
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap http://redmine.rubyforge.org/svn
--- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries Fri Sep 24 14:06:04 2010 +0100 +++ b/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries Fri Nov 19 13:24:41 2010 +0000 @@ -1,7 +1,7 @@ 10 dir -4173 +4411 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests http://redmine.rubyforge.org/svn