$templates.shared.doctype {= expand(templates.shared.content_type); =} {= include "templates.shared.util.convert_to_valid_node_name"; include "templates.shared.util.get_unique_node_name_28char"; string form_type = volatile.form_type; string username = volatile.user.username; string user_language = volatile.user.language; string user_node_name; debug_message("#### form_type: " . form_type . "\n"); # ---------------------- # get the user_node_name # ---------------------- if (form_type eq "new") then ( debug_message("#### user_name:" . username . "\n"); user_node_name = convert_to_valid_node_name(username); user_node_name = get_unique_node_name_28char("users", user_node_name); ) else ( # Note, the user name may change, and so will then the node name # and requires to update the user_info node string existing_user_node_name = volatile.user.user_node_name; string old_username = node_value(subnode_by_name("users", existing_user_node_name)); if (username eq old_username) then ( # keep existing user_node_name user_node_name = existing_user_node_name; ) else ( # update the user_node_name in users and user_info # if the password didn't change, then get it now. if (!node_exists("volatile.user.password")) then ( # get the existing password_checksum volatile.user.password_checksum = node_value("users." . existing_user_node_name . ".password_checksum"); ); # delete existing user node delete_node("users." . existing_user_node_name); save_node("users"); # get new user_node_name user_node_name = convert_to_valid_node_name(username); user_node_name = get_unique_node_name_28char("users", user_node_name); ); ); debug_message("#### user_node_name: " . user_node_name . "\n"); # -------- # username # -------- ("users." . user_node_name . ".username") = replace_all(username, "__HexEsc__24", "$"); # -------- # password # -------- # If editing an existing user the volatile password may not exist # Create new password only if node volatile.user.password exists if (node_exists("volatile.user.password")) then ( string password = volatile.user.password; string checksum = md5_digest(password); ("users." . user_node_name . ".password_checksum") = checksum; debug_message("#### NEW PASSWORD CREATED\n"); ) else ( debug_message("#### OLD PASSWORD IN USE\n"); ); # if the node name changed of an existing user and the password did # not change then use the old saved password_checksum if (node_exists("volatile.user.password_checksum")) then ( ("users." . user_node_name . ".password_checksum") = volatile.user.password_checksum; ); #--------- # language # -------- ("users." . user_node_name . ".language") = user_language; # ------------- # Access rights # ------------- bool administrator = volatile.user.administrator; ("users." . user_node_name . ".administrator") = administrator; if (node_exists("users." . user_node_name . ".profiles")) then ( delete_node("users." . user_node_name . ".profiles"); ); if (!administrator) then ( node profile; string profile_name; foreach profile "volatile.user.profiles" ( profile_name = node_value(profile); ("users." . user_node_name . ".profiles." . profile_name) = true; ); ); save_node("users"); =}