2016-03-21 09:12:52 -04:00
module IssuableActions
extend ActiveSupport :: Concern
included do
2016-09-26 17:06:46 -04:00
before_action :labels , only : [ :show , :new , :edit ]
2016-03-21 09:12:52 -04:00
before_action :authorize_destroy_issuable! , only : :destroy
2016-09-06 08:49:49 -04:00
before_action :authorize_admin_issuable! , only : :bulk_update
2016-03-21 09:12:52 -04:00
end
def destroy
issuable . destroy
2016-09-01 18:12:05 -04:00
destroy_method = " destroy_ #{ issuable . class . name . underscore } " . to_sym
TodoService . new . public_send ( destroy_method , issuable , current_user )
2016-03-21 09:12:52 -04:00
2016-11-18 21:19:04 -05:00
name = issuable . human_class_name
2016-03-21 09:12:52 -04:00
flash [ :notice ] = " The #{ name } was successfully deleted. "
2017-05-12 06:23:30 -04:00
index_path = polymorphic_path ( [ @project . namespace . becomes ( Namespace ) , @project , issuable . class ] )
respond_to do | format |
format . html { redirect_to index_path }
format . json do
render json : {
2017-05-25 06:58:40 -04:00
web_url : index_path
2017-05-12 06:23:30 -04:00
}
end
end
2016-03-21 09:12:52 -04:00
end
2016-09-06 08:49:49 -04:00
def bulk_update
result = Issuable :: BulkUpdateService . new ( project , current_user , bulk_update_params ) . execute ( resource_name )
quantity = result [ :count ]
render json : { notice : " #{ quantity } #{ resource_name . pluralize ( quantity ) } updated " }
end
2016-03-21 09:12:52 -04:00
private
2017-01-16 13:43:03 -05:00
def render_conflict_response
respond_to do | format |
format . html do
@conflict = true
render :edit
end
format . json do
render json : {
errors : [
" Someone edited this #{ issuable . human_class_name } at the same time you did. Please refresh your browser and make sure your changes will not unintentionally remove theirs. "
]
} , status : 409
end
end
end
2016-09-20 10:03:41 -04:00
def labels
@labels || = LabelsFinder . new ( current_user , project_id : @project . id ) . execute
end
2016-03-21 09:12:52 -04:00
def authorize_destroy_issuable!
2016-09-08 08:33:53 -04:00
unless can? ( current_user , :" destroy_ #{ issuable . to_ability_name } " , issuable )
2016-03-21 09:12:52 -04:00
return access_denied!
end
end
2016-09-06 08:49:49 -04:00
def authorize_admin_issuable!
2016-09-08 08:33:53 -04:00
unless can? ( current_user , :" admin_ #{ resource_name } " , @project )
2016-09-06 08:49:49 -04:00
return access_denied!
end
end
def bulk_update_params
2017-05-08 10:58:42 -04:00
permitted_keys = [
2016-09-06 08:49:49 -04:00
:issuable_ids ,
:assignee_id ,
:milestone_id ,
:state_event ,
:subscription_event ,
label_ids : [ ] ,
add_label_ids : [ ] ,
remove_label_ids : [ ]
2017-05-08 10:58:42 -04:00
]
if resource_name == 'issue'
permitted_keys << { assignee_ids : [ ] }
else
permitted_keys . unshift ( :assignee_id )
end
params . require ( :update ) . permit ( permitted_keys )
2016-09-06 08:49:49 -04:00
end
def resource_name
@resource_name || = controller_name . singularize
end
2016-03-21 09:12:52 -04:00
end