$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");
=}