merge-final.tcl

Merge two users accounts TODO: Support to merge more than two accounts at the same time

Location:
/packages/acs-admin/www/users/merge-final.tcl
CVS ID:
$Id: merge-final.tcl,v 1.9.2.1 2023/10/06 12:09:19 gustafn Exp $

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_page_contract {
    Merge two users accounts

    TODO: Support to merge more than two accounts at the same time

    @cvs-id $Id: merge-final.tcl,v 1.9.2.1 2023/10/06 12:09:19 gustafn Exp $
} {
    to_user_id:naturalnum,notnull
    from_user_id:naturalnum,notnull
    merge_p:boolean,notnull
} -properties {
    context:onevalue
} -validate {
    if_diff_authority {
    set from_authority_id [db_string gettoa {select authority_id from cc_users where user_id = :from_user_id}]
    set to_authority_id [db_string getfroma {select authority_id from cc_users where user_id = :to_user_id}]
    if { $from_authority_id ne $to_authority_id } {
        ad_complain "Merge only works for users of the same authority"
    } 
    }
    if_the_logged_in_user_is_crazy {
    # Just for security reasons...
    set current_user_id [ad_conn user_id]
    if { $current_user_id eq $to_user_id || $current_user_id eq $from_user_id } {
        ad_complain "You can't merge yourself"
    }
    }
}

set context [list [list "./" "Merge""Merge"]

if { !$merge_p } {
    ad_returnredirect "/acs-admin/users"
    ad_script_abort
} else {
    set final_results [callback merge::MergePackageUser \
                           -from_user_id $from_user_id \
                           -to_user_id $to_user_id]
    set results "<ul>"
    foreach item $final_results {
    append results "<li>[lindex $item 0]<ul>"
    for { set idx 1 } { $idx < [llength $item] } {incr idx} {
        append results "<li>[lindex $item $idx] </li>"
    }
    append results "</ul></li>"
    }
    append results "</ul>"

    merge::MergeUserInfo -from_user_id $from_user_id -to_user_id $to_user_id

    set impl_id [auth::authority::get_element \
                     -authority_id $to_authority_id \
                     -element "auth_impl_id"]
    set parameters [list $from_user_id $to_user_id $to_authority_id]
    set user_res [acs_sc::invoke \
              -error \
              -contract "auth_authentication" \
              -impl_id $impl_id \
              -operation MergeUser \
              -call_args $parameters]

    # TODO: Add to the SC implementations of the SC an output to
    # improve the messages of the final status of auth_authentication
    # merge.  It could be a list as we did with callbacks
    # implementations.
    #
    #     foreach item $user_res {
    #          append results "<li>[lindex $item 0]<ul>"
    #          for { set idx 1 } { $idx < [llength $item] } {incr idx} {
    #             append results "<li>[lindex $item $idx]</li>"
    #          }
    #          append results "</ul></li></ul>"
    #     }
    #     append results "</ul>"

    set msg "Merge is done"
    ns_log Notice $msg
}


# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: