@@ -9,6 +9,7 @@ class NamesController < ApplicationController
99 edit_description edit_rank edit_notes edit_etymology edit_links edit_type
1010 edit_redirect autofill_etymology edit_parent
1111 return validate endorse claim unclaim demote temporary_editable
12+ transfer_user transfer_user_commit
1213 new_correspondence observe unobserve
1314 ]
1415 )
@@ -24,7 +25,8 @@ class NamesController < ApplicationController
2425 )
2526 before_action ( :authenticate_can_edit_type! , only : [ :edit_type ] )
2627 before_action (
27- :authenticate_owner_or_curator! , only : %i[ unclaim new_correspondence ]
28+ :authenticate_owner_or_curator! ,
29+ only : %i[ unclaim new_correspondence transfer_user transfer_user_commit ]
2830 )
2931 before_action ( :authenticate_contributor! , only : %i[ new create claim ] )
3032 before_action ( :authenticate_admin! , only : %i[ demote temporary_editable ] )
@@ -474,6 +476,36 @@ def unclaim
474476 change_status ( :unclaim , 'Name successfully claimed' , current_user )
475477 end
476478
479+ # GET /names/1/transfer_user
480+ def transfer_user
481+ end
482+
483+ # POST /names/1/transfer_user
484+ def transfer_user_commit
485+ old_user = @name . user
486+ username = params . require ( :name ) [ :user ]
487+ user = User . find_by_email_or_username ( username )
488+
489+ if !user . present?
490+ flash [ :alert ] = 'The user could not be found'
491+ render :transfer_user
492+ elsif @name . transfer ( current_user , user )
493+ add_automatic_correspondence (
494+ 'SeqCode Register transferred from %s to %s' % [
495+ old_user &.username , user &.username
496+ ]
497+ )
498+ flash [ :notice ] =
499+ 'Name successfully transferred to the new user'
500+ redirect_to ( @name )
501+ else
502+ flash [ :alert ] =
503+ 'The list has not been transferred due to a failed check: ' +
504+ @name . status_alert
505+ render :transfer_user
506+ end
507+ end
508+
477509 # POST /names/1/demote
478510 def demote
479511 change_status ( :demote , 'Name successfully demoted' , current_user )
@@ -626,4 +658,12 @@ def change_status(fun, success_msg, *extra_opts)
626658 inv . record . errors . map { |e | "#{ e . attribute } #{ e . message } " } . to_sentence
627659 redirect_to ( inv . record )
628660 end
661+
662+ def add_automatic_correspondence ( message )
663+ NameCorrespondence . new (
664+ message : message , notify : '0' , automatic : true ,
665+ user : current_user , name : @name
666+ ) . save
667+ end
668+
629669end
0 commit comments