]> source.dussan.org Git - redmine.git/commitdiff
Improved error message when trying to access an archived project (#2995).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 23 Oct 2010 09:48:01 +0000 (09:48 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 23 Oct 2010 09:48:01 +0000 (09:48 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4285 e93f8b46-1217-0410-a6f0-8f06a7374b81

48 files changed:
app/controllers/application_controller.rb
app/models/project.rb
app/views/common/403.rhtml
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/es.yml
config/locales/eu.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hu.yml
config/locales/id.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mn.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sr-YU.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
test/functional/projects_controller_test.rb
test/unit/project_test.rb

index 1299dac36374dc8c6da42c6397044c5748283c03..360d09189def8f1e4e5354aa68ec0985f370a132 100644 (file)
@@ -154,7 +154,15 @@ class ApplicationController < ActionController::Base
   # 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 || @projects, :global => global)
-    allowed ? true : deny_access
+    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
@@ -265,8 +273,10 @@ class ApplicationController < ActionController::Base
     redirect_to default
   end
   
-  def render_403
+  def render_403(options={})
     @project = nil
+    @message = options[:message] || :notice_not_authorized
+    @message = l(@message) if @message.is_a?(Symbol)
     respond_to do |format|
       format.html { render :template => "common/403", :layout => use_layout, :status => 403 }
       format.atom { head 403 }
index 16c97441ed2b7184112fac39dd4b48c79f9a1344..a6d7dc790e4c8e29098c165441cacc86aeb85664 100644 (file)
@@ -220,6 +220,10 @@ class Project < ActiveRecord::Base
     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
index d1173a186211b7a03bd4ece995015f8d115bc91a..43f487d10a88dccd714d82c65589f36c3f704c92 100644 (file)
@@ -1,6 +1,6 @@
 <h2>403</h2>
 
-<p><%= l(:notice_not_authorized) %></p>
+<p><%=h @message %></p>
 <p><a href="javascript:history.back()">Back</a></p>
 
 <% html_title '403' %>
index e6f92cc482c696257246b50e43f544a8c8fb78eb..a3f78f81fb5f91881ba3b8fb3a82ebb7c9fafc9d 100644 (file)
@@ -916,3 +916,4 @@ bg:
   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.
index f637351628dd5b36893586fb22eb7431234b03a9..cebe14dacfe02d2d23bdb29b8c80963934a052c8 100644 (file)
@@ -936,3 +936,4 @@ bs:
   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.
index 842ef621f703a7d8a5f3ac870fd0207ecbc8f114..9befe1d18786284d9401b8cad371ea34271385b6 100644 (file)
@@ -925,3 +925,4 @@ ca:
   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.
index d4449cee6501183401aa87e2f62b3d6d9cfa3cdc..5e90855fc6f2063aad638e4edb8b3d34c90d9c43 100644 (file)
@@ -922,3 +922,4 @@ cs:
   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.
index e557721aa7fa5c1fad239e297850da26096855fd..87e813bbae7d32f0735b5cc1af58366276667550 100644 (file)
@@ -938,3 +938,4 @@ da:
   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.
index 9c9a853dd313f29ef3e25fa40290871bc689fb92..f2eb1e84507cc7cde7446e5233535e10681ebd50 100644 (file)
@@ -941,3 +941,4 @@ de:
   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.
index 963f30da8c405facb50307aea59476bdb8860b5f..85f4bccbcd030a16332a666d6ffacb53713b5203 100644 (file)
@@ -922,3 +922,4 @@ el:
   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.
index a6b281701471eb70747ed3555867cc1a0d76bca6..e14276aaa0c3ebdc19068b88ae0578d328f6c7f7 100644 (file)
@@ -926,3 +926,4 @@ en-GB:
   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.\r
index bdf2e982536ce1ab8f3e96f1e4949e41880f8031..083d781b13e54ac09a82a8db2b110fee5841e272 100644 (file)
@@ -150,6 +150,7 @@ en:
   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.
index 2b08b1dcea73ab7c2973a5fe17301b85c68486f9..8f824d2041ba53574b4a6a23b9d280f8ee37cedb 100644 (file)
@@ -962,3 +962,4 @@ es:
   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.
index b45bf0e7a0c64b86d9804b64f052e47fc145f8a7..6072c3b69b5c61b891a153a39b997d0dd35132ef 100644 (file)
@@ -926,3 +926,4 @@ eu:
   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.\r
index e4f107e914e17f37c12f366c8b7f361775ddcb5f..b1fdae732e3dba6f221b62acc89c44a7ac29c3d6 100644 (file)
@@ -947,3 +947,4 @@ fi:
   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.
index 67848932a9ee957b1127a0e94bb65127c5b84b38..92720abb90d98042780094f474518777e2db6321 100644 (file)
@@ -169,6 +169,7 @@ fr:
   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."
index 14f04ab144ce1aeec5c1cefd16086faaf206d613..d3ee6def25ef85ffb2752faafe76b07608020cd3 100644 (file)
@@ -938,3 +938,4 @@ gl:
   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.
index 1fc167e773d4afc1362b20c4b34f8e2dca3f49f3..72f5a6cbd07f043a2f42c7dbf75918d9a17fa581 100644 (file)
@@ -927,3 +927,4 @@ he:
   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.
index 725411c9cd11757e9539515ebd1eecf3ffd7d7c5..a9f702e454f44d068f0927c6a823887ed17cf830 100644 (file)
@@ -929,3 +929,4 @@ hr:
   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.
index 767f2d672c60f5a622f98faff0251cf4e26f624d..b08e90553181c976831adb5d3c724da38e5b1780 100644 (file)
   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.
index b91367028b9051d3e24f6fda119e8ed4146d2e38..e3e120f99b1b2df404ac485fa1f5aff978186f16 100644 (file)
@@ -930,3 +930,4 @@ id:
   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.
index f39dfbb96b1083aeb3a15e7c0e0b7cc2a0cb35f1..2faa28bce8cafbaea408f929a9f0a0b5483f386e 100644 (file)
@@ -926,3 +926,4 @@ it:
   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.
index 92bfd15879cfae59f23bb1ecab7319d22030f9bc..a9adc09e7f6d3a63b6b4d0dbf505dcfb5ae0d286 100644 (file)
@@ -947,3 +947,4 @@ ja:
   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.
index 7cc8ad620e52dbd10cac10233c7bccdcbfa67801..e74ad2aac79f55e97ebe841a1526368457ab975a 100644 (file)
@@ -978,3 +978,4 @@ ko:
   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.
index 186c61a3d9f3efff91541b5c72c225ef15403bbf..e091422c38b5729ade9baefcfd4300b348da1740 100644 (file)
@@ -986,3 +986,4 @@ lt:
   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.
index 5c338cd30fb5ff59d191386a80475d7b4bb960a9..c0fd2371015619c7c0adf4927178bce7d7893088 100644 (file)
@@ -917,3 +917,4 @@ lv:
   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.\r
index 6dd1fca21893294aa17cccb67408afa3a91fc492..5d7124f74d9af7e652a9c0ca7342bd93c00e8771 100644 (file)
@@ -922,3 +922,4 @@ mk:
   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.\r
index a0f4be9ee83a19f740367fe039c112c9d7b9f3fb..b6032f9512805c964f3066dafff7e0ca21ac1625 100644 (file)
@@ -923,3 +923,4 @@ mn:
   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.\r
index ab9fdfad7e6bda8085e2de54e2eae10a796104d8..b1516575e5f36657a2486be06fc47fc4970d2b71 100644 (file)
@@ -904,3 +904,4 @@ nl:
   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.
index 592af9d6fc24cd66ba226e9ec4e4e2fbb1e9c95d..b21eba1b5883b687867c99c4196c96ed11dfcc56 100644 (file)
   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.
index d1193107025538fcb4962f9fef7fb2f0f39fbaf5..25099c98d6d3d894a57b7c7d62f982e79682a43b 100644 (file)
@@ -943,3 +943,4 @@ pl:
   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.
index f8609304aff9d350e94fa74fdf3bbfccae35fd91..78448f7a5c92dda903acf86f19f396d5e816fafa 100644 (file)
@@ -946,3 +946,4 @@ pt-BR:
   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.
index eb8917e7a33d058663f4cc0a2cd869dd1895bda6..24ee86834763f332cf21d91d143fdd1f20873a5c 100644 (file)
@@ -930,3 +930,4 @@ pt:
   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.
index b1e311ffea8dfd0ece9f54eaea55e83fbb2c71e5..7076ef855ef2824cabb6544e1f267c8387705b46 100644 (file)
@@ -915,3 +915,4 @@ ro:
   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.
index ee6c70422b8f7e0d578304dc442175a09e732dab..b0ed5cbb9e244be1d02b3081d4a599c6ad548ea5 100644 (file)
@@ -1039,3 +1039,4 @@ ru:
   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.
index e49a2149b2a705c40bd67095887c1acfdc601f14..c26bca760562e7c26bb2a646e2989d43d7ab2033 100644 (file)
@@ -917,3 +917,4 @@ sk:
   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.
index 33eade582bf31c65597cee91ff2f42083121784c..417a19a241e7505054e328a5a3d2d1b32bbaeabb 100644 (file)
@@ -918,3 +918,4 @@ sl:
   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.
index 0aee7ec5acc9e22e130e9fc1a2234fe744800ed6..53c8e5e6ec934133b5b1f713c82825bb34404922 100644 (file)
@@ -922,3 +922,4 @@ sr-YU:
   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.\r
index b1686eb3f00ca4410cdffc5e574941bfb7fdcc24..dd492404c18bbf761a710de21f22f85fc8aa030c 100644 (file)
@@ -923,3 +923,4 @@ sr:
   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.
index 0b19956bb71129c9cefe53a53eeca20d4881abfa..8509a035a5024190414ce98f486af570e2911acc 100644 (file)
@@ -967,3 +967,4 @@ sv:
   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.
index d0275afd2318e17d903c44c5e3b97822df32ebfb..7344a928b666a0e9897ca3475f0f975de31a7d20 100644 (file)
@@ -919,3 +919,4 @@ th:
   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.
index 32ae9cc4411f7f4dfb6fdd9f12b80c1afd90a3b3..3fd0b7447baba782cf24118b0e5e07fc2655b443 100644 (file)
@@ -945,3 +945,4 @@ tr:
   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.
index 28e6caa35f02be6eca0cbbb6f8bf33193633434c..f7556417a825cf7475930d80df5c9c24c76daf96 100644 (file)
@@ -918,3 +918,4 @@ uk:
   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.
index 84adc162afef2acc9e1fd860c03f016ab5197775..b1e1662c70d1be735a5538c4f4e53d16ef92f8b2 100644 (file)
@@ -977,3 +977,4 @@ vi:
   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.
index 89ea4886a118358ce8dc447b9201cae5ca6a721a..82db9271a35f0105ce4f1941f9fae70418dff053 100644 (file)
   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.
index 3439b3129bcf3eaf63844078b4d6ab6ae2357f5a..ba933290e5d2f7d777e436fb363752e00c1a8c61 100644 (file)
@@ -940,3 +940,4 @@ zh:
   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.
index 8a9bbe6d599abf55d70c81a575c607a2d80e93dc..7122f89e22670352e2463703b6af6b447434309f 100644 (file)
@@ -296,6 +296,16 @@ class ProjectsControllerTest < ActionController::TestCase
     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
index 08b0fb24a8bc7787a95b507959ccebd04ee83521..e4927eba1e1b558389111b6a78f8d1fb077d1ad4 100644 (file)
@@ -102,6 +102,7 @@ class ProjectTest < ActiveSupport::TestCase
     @ecookbook.reload
     
     assert !@ecookbook.active?
+    assert @ecookbook.archived?
     assert !user.projects.include?(@ecookbook)
     # Subproject are also archived
     assert !@ecookbook.children.empty?
@@ -129,6 +130,7 @@ class ProjectTest < ActiveSupport::TestCase
     assert @ecookbook.unarchive
     @ecookbook.reload
     assert @ecookbook.active?
+    assert !@ecookbook.archived?
     assert user.projects.include?(@ecookbook)
     # Subproject can now be unarchived
     @ecookbook_sub1.reload