API to archive/unarchive projects (#35420).

Patch by Felix Schäfer.


git-svn-id: http://svn.redmine.org/redmine/trunk@21044 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA
2021-06-24 13:55:06 +00:00
parent f75756e870
commit 890dc20ad7
3 changed files with 38 additions and 6 deletions

View File

@@ -30,7 +30,7 @@ class ProjectsController < ApplicationController
before_action :authorize_global, :only => [:new, :create] before_action :authorize_global, :only => [:new, :create]
before_action :require_admin, :only => [:copy, :archive, :unarchive] before_action :require_admin, :only => [:copy, :archive, :unarchive]
accept_rss_auth :index accept_rss_auth :index
accept_api_auth :index, :show, :create, :update, :destroy accept_api_auth :index, :show, :create, :update, :destroy, :archive, :unarchive
require_sudo_mode :destroy require_sudo_mode :destroy
helper :custom_fields helper :custom_fields
@@ -233,16 +233,31 @@ class ProjectsController < ApplicationController
def archive def archive
unless @project.archive unless @project.archive
flash[:error] = l(:error_can_not_archive_project) error = l(:error_can_not_archive_project)
end end
respond_to do |format|
format.html do
flash[:error] = error if error
redirect_to_referer_or admin_projects_path(:status => params[:status]) redirect_to_referer_or admin_projects_path(:status => params[:status])
end end
format.api do
if error
render_api_errors error
else
render_api_ok
end
end
end
end
def unarchive def unarchive
unless @project.active? unless @project.active?
@project.unarchive @project.unarchive
end end
redirect_to_referer_or admin_projects_path(:status => params[:status]) respond_to do |format|
format.html{ redirect_to_referer_or admin_projects_path(:status => params[:status]) }
format.api{ render_api_ok }
end
end end
def bookmark def bookmark

View File

@@ -131,8 +131,8 @@ Rails.application.routes.draw do
member do member do
get 'settings(/:tab)', :action => 'settings', :as => 'settings' get 'settings(/:tab)', :action => 'settings', :as => 'settings'
post 'archive' match 'archive', :via => [:post, :put]
post 'unarchive' match 'unarchive', :via => [:post, :put]
post 'close' post 'close'
post 'reopen' post 'reopen'
match 'copy', :via => [:get, :post] match 'copy', :via => [:get, :post]

View File

@@ -356,4 +356,21 @@ class Redmine::ApiTest::ProjectsTest < Redmine::ApiTest::Base
assert_equal '', @response.body assert_equal '', @response.body
assert_nil Project.find_by_id(2) assert_nil Project.find_by_id(2)
end end
test "PUT /projects/:id/archive.xml should archive project" do
put '/projects/1/archive.xml', :headers => credentials('admin')
assert_response :no_content
assert_equal '', @response.body
assert p = Project.find(1)
assert_not p.active?
end
test "PUT /projects/:id/unarchive.xml should unarchive project" do
Project.find(1).update_column :status, Project::STATUS_ARCHIVED
put '/projects/1/unarchive.xml', :headers => credentials('admin')
assert_response :no_content
assert_equal '', @response.body
assert p = Project.find_by_id(2)
assert p.active?
end
end end