[mod] aufgeräumt

This commit is contained in:
roydfalk 2024-04-30 01:32:40 +02:00
parent 15fa634056
commit 2a44a115ba
16 changed files with 424 additions and 462 deletions

View file

@ -211,12 +211,24 @@ namespace _espe.backend
/** /**
*/ */
export async function member_list( export async function member_list(
) : Promise<Array<any>> search_term : (null | string)
) : Promise<
Array<
{
id : int;
preview : {
membership_number : string;
name_real_value : string;
name_real_index : int;
};
}
>
>
{ {
return ( return (
abstract_call( abstract_call(
"GET", "GET",
"/member" ("/member/list" + ((search_term === null) ? "" : ("?search_term=" + search_term)))
) )
); );
} }
@ -226,11 +238,49 @@ namespace _espe.backend
*/ */
export async function member_get( export async function member_get(
id : int id : int
) : Promise<any> ) : Promise<
{
membership_number : string;
name_real_value : string;
name_real_index : int;
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
email_use_veiled_address : boolean;
email_use_nominal_address : boolean;
email_redirect_to_private_address : boolean;
email_allow_sending : boolean;
password_set : boolean;
}
>
{ {
return abstract_call( return abstract_call(
"GET", "GET",
"/member/" + id.toFixed(0) ("/member/read/" + id.toFixed(0))
);
}
/**
*/
export async function member_project(
data : {
membership_number : string;
name_real_value : string;
email_address_private : (null | string);
}
) : Promise<int>
{
return abstract_call(
"POST",
"/member/project",
{
"data": {
"membership_number": data.membership_number,
"name_real_value": data.name_real_value,
"email_address_private": data.email_address_private,
}
}
); );
} }
@ -238,98 +288,25 @@ namespace _espe.backend
/** /**
*/ */
export async function member_get2( export async function member_get2(
id : int id : int,
key : string
) : Promise< ) : Promise<
{ {
name_real : string; name_real_value : string;
name_real_index : int;
name_login : string; name_login : string;
email_address_numerical_value : string; email_address_veiled : string;
email_address_namely_value : string; email_address_nominal : string;
} }
> >
{ {
return abstract_call( return abstract_call(
"GET", "GET",
"/member/get/" + id.toFixed(0) lib_plankton.string.coin(
); "/member/info/{{id}}?key={{key}}",
}
/**
*/
export async function member_add(
data : Record<string, any>
) : Promise<int>
{
return abstract_call(
"POST",
"/member",
{
"data": {
"membership_number": data["membership_number"],
"enabled": data["enabled"],
"name_real_value": data["name_real_value"],
"name_real_extension": data["name_real_extension"],
"name_display": data["name_display"],
"name_login": data["name_login"],
"password_image": null,
"email_address_private_value": data["email_address_private_value"],
"email_address_numberbased_use": data["email_address_numberbased_use"],
"email_address_namebased_use": data["email_address_namebased_use"],
"email_redirect_to_private": data["email_redirect_to_private"],
"salutation": data["salutation"],
}
}
);
}
/**
*/
export async function member_modify(
id : int,
data : Record<string, any>
) : Promise<void>
{
return abstract_call(
"PATCH",
"/member/" + id.toFixed(0),
{
"data": {
"membership_number": data["membership_number"],
"enabled": data["enabled"],
"name_real_value": data["name_real_value"],
"name_real_extension": data["name_real_extension"],
"name_display": data["name_display"],
"name_login": data["name_login"],
"password_image": null,
"email_address_private_value": data["email_address_private_value"],
"email_address_numberbased_use": data["email_address_numberbased_use"],
"email_address_namebased_use": data["email_address_namebased_use"],
"email_redirect_to_private": data["email_redirect_to_private"],
"salutation": data["salutation"],
}
}
);
}
/**
*/
export async function member_urge_for_registration(
id : int,
url : string
) : Promise<null>
{
return (
abstract_call(
"POST",
"/member/urge_for_registration",
{ {
"data": { "id": id.toFixed(0),
"id": id, "key": key,
"url": url,
},
} }
) )
); );
@ -342,19 +319,23 @@ namespace _espe.backend
id : int, id : int,
verification : string, verification : string,
data : { data : {
name_login : string; email_use_veiled_address : boolean;
name_display : string; email_use_nominal_address : boolean;
salutation : string; email_redirect_to_private_address : boolean;
email_mode : ("none" | "number" | "number_and_name"); password : (null | string);
email_redirect : boolean;
password : string;
} }
) : Promise<void> ) : Promise<void>
{ {
return ( return (
abstract_call( abstract_call(
"POST", "POST",
"/member/register/" + id.toFixed(0) + "?verification=" + verification, lib_plankton.string.coin(
"/member/register/{{id}}?key={{key}}",
{
"id": id.toFixed(0),
"key": verification,
}
),
{ {
"data": data, "data": data,
} }
@ -362,4 +343,46 @@ namespace _espe.backend
); );
} }
/**
*/
export async function member_modify(
id : int,
data : {
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
}
) : Promise<void>
{
return abstract_call(
"PATCH",
("/member/modify/" + id.toFixed(0)),
{
"data": data
}
);
}
/**
*/
export async function member_summon(
id : int,
url : string
) : Promise<null>
{
return (
abstract_call(
"POST",
("/member/summon/" + id.toFixed(0)),
{
"data": {
"url_template": url,
},
}
)
);
}
} }

12
source/logic/helpers.ts Normal file
View file

@ -0,0 +1,12 @@
/**
* @todo outsource
*/
function template_request(
id : string
) : DocumentFragment
{
let dom_template = document.querySelector("template#" + id);
// return template["content"].cloneNode(true);
return (document.importNode(dom_template["content"], true) as DocumentFragment)
}

View file

@ -1,16 +1,4 @@
/**
*/
function template_request(
id : string
) : DocumentFragment
{
let dom_template = document.querySelector("template#" + id);
// return template["content"].cloneNode(true);
return (document.importNode(dom_template["content"], true) as DocumentFragment)
}
/** /**
*/ */
async function update_nav( async function update_nav(
@ -62,13 +50,13 @@ function setup_nav(
"classes": ["logged_in"], "classes": ["logged_in"],
}, },
{ {
"location": {"name": "create", "parameters": {}}, "location": {"name": "list", "parameters": {}},
"label": "Mitglied anlegen", "label": "Liste",
"classes": ["logged_in"], "classes": ["logged_in"],
}, },
{ {
"location": {"name": "members", "parameters": {}}, "location": {"name": "create", "parameters": {}},
"label": "Mitglieder-Übersicht", "label": "Anlegen",
"classes": ["logged_in"], "classes": ["logged_in"],
}, },
]; ];

View file

@ -5,23 +5,23 @@ lib_plankton.zoo_page.register(
{ {
membership_number : string; membership_number : string;
name_real_value : string; name_real_value : string;
email_address_private_value : (null | string); email_address_private : (null | string);
}, },
{ {
membership_number : string; membership_number : string;
name_real_value : string; name_real_value : string;
email_address_private_value : string; email_address_private : string;
} }
>( >(
value => ({ value => ({
"membership_number": value.membership_number, "membership_number": value.membership_number,
"name_real_value": value.name_real_value, "name_real_value": value.name_real_value,
"email_address_private_value": (value.email_address_private_value ?? ""), "email_address_private": (value.email_address_private ?? ""),
}), }),
representation => ({ representation => ({
"membership_number": representation.membership_number, "membership_number": representation.membership_number,
"name_real_value": representation.name_real_value, "name_real_value": representation.name_real_value,
"email_address_private_value": representation.email_address_private_value, "email_address_private": representation.email_address_private,
}), }),
new lib_plankton.zoo_input.class_input_group( new lib_plankton.zoo_input.class_input_group(
[ [
@ -36,7 +36,7 @@ lib_plankton.zoo_page.register(
"label": "Echter Name", "label": "Echter Name",
}, },
{ {
"name": "email_address_private_value", "name": "email_address_private",
"input": new lib_plankton.zoo_input.class_input_text(), "input": new lib_plankton.zoo_input.class_input_text(),
"label": "Private E-Mail-Adresse", "label": "Private E-Mail-Adresse",
}, },
@ -47,21 +47,7 @@ lib_plankton.zoo_page.register(
"label": "Senden", "label": "Senden",
"procedure": async (get_value, get_representation) => { "procedure": async (get_value, get_representation) => {
const value = await get_value(); const value = await get_value();
const id : int = await _espe.backend.member_add( const id : int = await _espe.backend.member_project(value);
{
"membership_number": value.membership_number,
"name_real_value": value.name_real_value,
"email_address_private_value": value.email_address_private_value,
"name_real_extension": null,
"name_display": null,
"name_login": null,
"salutation": null,
"password_image": null,
"email_address_numberbased_use": false,
"email_address_namebased_use": false,
"email_redirect_to_private": false,
}
);
lib_plankton.zoo_page.set({"name": "view", "parameters": {"id": id}}); lib_plankton.zoo_page.set({"name": "view", "parameters": {"id": id}});
}, },
} }

View file

@ -0,0 +1,6 @@
lib_plankton.zoo_page.register(
"index",
async (parameters, target_element) => {
// do nothing
}
);

View file

View file

View file

@ -0,0 +1,68 @@
lib_plankton.zoo_page.register(
"list",
(parameters, target_element) => {
type type_item = {
id : int;
preview : {
membership_number : string;
name_real_value : string;
name_real_index : int;
};
};
const term : (null | string) = (parameters["term"] ?? null);
const search : lib_plankton.zoo_search.type_search<type_item> = lib_plankton.zoo_search.make<type_item>(
(term) => _espe.backend.member_list(term),
{
"encode_item": (item) => lib_plankton.string.coin(
"{{membership_number}} | {{name}}{{addition}}",
{
"membership_number": item.preview.membership_number,
"name": item.preview.name_real_value,
"addition": (
(
(item.preview.name_real_index === null)
||
(item.preview.name_real_index <= 1)
)
? ""
: (" (" + item.preview.name_real_index.toFixed(0) + ")")
),
}
),
"hooks_begin": [
(term) => {
lib_plankton.zoo_page.set(
{
"name": "list",
"parameters": {
"term": term,
}
}
);
}
],
"hooks_select": [
(item) => {
lib_plankton.zoo_page.set(
{
"name": "view",
"parameters": {
"id": item.id.toFixed(0),
}
}
);
}
]
}
);
lib_plankton.zoo_search.render(
search,
target_element,
{
"state": {
"term": term,
}
}
);
}
);

View file

@ -0,0 +1 @@

View file

@ -0,0 +1 @@

View file

@ -1,12 +1,14 @@
lib_plankton.zoo_page.register( lib_plankton.zoo_page.register(
"register", "register",
async (parameters, target_element) => { async (parameters, target_element) => {
const set_state = function (state) { function set_state(
state : ("load" | "fill" | "wait" | "done"),
message : (null | string) = null
) : void
{
target_element.querySelector(".register").setAttribute("rel", state); target_element.querySelector(".register").setAttribute("rel", state);
}; target_element.querySelector(".register-message").textContent = (message ?? "");
const set_message = function (message) { }
target_element.querySelector(".register-message").textContent = message;
};
const id : int = parseInt(parameters["id"]); const id : int = parseInt(parameters["id"]);
const verification : string = parameters["verification"]; const verification : string = parameters["verification"];
@ -15,277 +17,127 @@ lib_plankton.zoo_page.register(
update_nav({"mode": null}); update_nav({"mode": null});
const member_data : { const member_data : {
name_real : string; name_real_value : string;
name_real_index : int;
name_login : string; name_login : string;
email_address_numerical_value : string; email_address_veiled : string;
email_address_namely_value : string; email_address_nominal : string;
} = await _espe.backend.member_get2(id); } = await _espe.backend.member_get2(id, verification);
if (false) target_element.appendChild(template_request("register"));
set_state("load");
// info
{ {
const form = new lib_plankton.zoo_form.class_form<any, any>( }
x => x, // form
x => x, {
new lib_plankton.zoo_input.class_input_group( let input : lib_plankton.zoo_input.interface_input<
{
email_address : ("none" | "only_veiled" | "both");
email_redirect : boolean;
password_value : string;
password_confirmation : string;
}
>;
// input
{
input = new lib_plankton.zoo_input.class_input_group(
[ [
{ {
"name": "id", "name": "email_address",
"input": new lib_plankton.zoo_input.class_input_hidden(),
},
{
"name": "verification",
"input": new lib_plankton.zoo_input.class_input_hidden(),
},
{
"name": "email_mode",
"input": new lib_plankton.zoo_input.class_input_enumeration( "input": new lib_plankton.zoo_input.class_input_enumeration(
[ [
{"value": "none", "label": "keine"}, {"value": "none", "label": "keine"},
{"value": "number", "label": "nur numerische" + " " + ("(" + member_data.email_address_numerical_value + ")")}, {"value": "only_veiled", "label": "nur pseudonymisiert"},
{"value": "number_and_name", "label": "numerische und namentliche" + " " + ("(" + member_data.email_address_namely_value + ")")}, {"value": "both", "label": "pseudonymisiert und namentlich"},
] ]
), ),
"label": "Partei-E-Mail-Adresse einrichten", "label": "Partei-E-Mail-Adresse einrichten",
"help": "Die nummernbasierte Partei-E-Mail-Adresse hat folgenden schematischen Aufbau: \"mitglied-<mitglieds-nummer>@dielinke-sachsen.de\", z.B. \"mitglied-11223344@dielinke-sachsen.de\".\n\nDie namensbasierte Partei-E-Mail-Adresse hat folgenden schematischen Aufbau: \"<name-in-kleinbuchstaben-mit-punkten-getrennt>@dielinke-sachsen.de\". Beispiel: \"Karl Liebknecht\" würde die Adresse \"karl.liebknecht@dielinke-sachsen.de\" bekommen.\n\nDie Partei-E-Mail-Adressen können zum Empfangen von E-Mails verwendet werden. Falls es nötig werden sollte, dass du auch E-Mails mit über die Partei-Adresse verschicken kannst, wende dich bitte an den/die Mitgliederbeauftragte:n!" "help": (
[
"Für Partei-Angelegenheiten möchten wir dir anbieten gesonderte E-Mail-Adressen zu verwenden.",
lib_plankton.string.coin(
"Deine namentliche E-Mail-Adresse würde lauten »{{email_address_nominal}}« und die pseudonymisierte »{{email_address_veiled}}«.",
{
"email_address_veiled": member_data.email_address_veiled,
"email_address_nominal": member_data.email_address_nominal,
}
),
"Die Partei-E-Mail-Adressen können zum Empfangen von E-Mails verwendet werden. Falls es nötig werden sollte, dass du auch E-Mails mit über die Partei-Adresse verschicken kannst, wende dich bitte an den/die Mitgliederbeauftragte:n!",
]
.join("\n\n")
)
}, },
{ {
"name": "email_redirect", "name": "email_redirect",
"input": new lib_plankton.zoo_input.class_input_checkbox(), "input": new lib_plankton.zoo_input.class_input_checkbox(
"label": "eingehende E-Mails zu privater Adresse umleiten",
"help": "Um die bei der Partei-Adresse eingegangenen E-Mails zu lesen, gibt es zwei Wege: Entweder du hinterlegst das zugehörige Konto im E-Mail-Client-Programm deiner Wahl und kümmerst dich selbst darum die E-Mails regelmäßig abzurufen oder die E-Mails werden an deine private Adresse weitergeleitet, sodass sie bei deinen gewöhnlichen E-Mails mit auftauchen.\n\nWenn du dir unsicher bist, empfehlen wir dir die Umleitung anzuschalten.",
},
{
"name": "name_display",
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
"label": "Anzeigename",
"help": "So wirst du bei Online-Diensten anderen angezeigt.",
},
{
"name": "salutation",
"input": new lib_plankton.zoo_input.class_input_text(),
"label": "Anrede/Pronomen (z.B. 'er/ihn')",
},
{
"name": "name_login",
"input": new lib_plankton.zoo_input.class_input_text(
{
"pattern": "^[0-9a-zA-Z_]+$",
"read_only": true,
}
), ),
"label": "Anmeldename", "label": "eingehende E-Mails an private Adresse leiten",
"help": "Dieser Wert ist der Nutzername für die Anmeldung bei den Online-Diensten. Hierfür solltest du etwas kurzes und prägnantes wählen. Diesen Namen bekommt für gewöhnlich niemand zu sehen. Bitte beachte, dass der Name noch verfügbar sein muss!",
}, },
{ {
"name": "password", "name": "password_value",
"input": new lib_plankton.zoo_input.class_input_password(), "input": new lib_plankton.zoo_input.class_input_password(
"label": "Passwort", ),
"help": "Das Passwort für die Anmeldung bei den Online-Diensten", "label": "Passwort für Netz-Dienste",
"help": "Das Passwort für die Anmeldung bei den Netz-Diensten.\n\nDu solltest dir merken oder geeignet abspeichern, was du hier einträgst.\n\nSolltest du dieses Passwort mal vergessen oder verlieren, hast du die Möglichkeit ein neues zu setzen.",
}, },
{ {
"name": "password_confirmation", "name": "password_confirmation",
"input": new lib_plankton.zoo_input.class_input_password(), "input": new lib_plankton.zoo_input.class_input_password(
),
"label": "Passwort wiederholen", "label": "Passwort wiederholen",
}, },
] ]
), );
[ await input.setup(target_element.querySelector(".register-form-input") as HTMLElement);
await input.write(
{ {
"label": "Senden", "email_address": "both",
"procedure": async (get_value, get_representation) => { "email_redirect": true,
set_message("wird verarbeitet …"); "password_value": "",
"password_confirmation": "",
}
);
}
// actions
{
target_element.querySelector(".register-form-action-send").addEventListener(
"click",
async (event) => {
const value : {
email_address : ("none" | "only_veiled" | "both");
email_redirect : boolean;
password_value : string;
password_confirmation : string;
} = await input.read();
if (value.password_value !== value.password_confirmation) {
alert("Die Passwörter stimmen nicht überein");
set_state("fill");
}
else {
set_state("wait"); set_state("wait");
try {
const value : any = await get_value(); await _espe.backend.member_register(
id,
if (value.password !== value.password_confirmation) { verification,
set_message("Die Passwörter stimmen nicht überein."); {
set_state("fill"); "email_use_veiled_address": (value.email_address !== "none"),
"email_use_nominal_address": (value.email_address === "both"),
"email_redirect_to_private_address": value.email_redirect,
"password": value.password_value,
}
);
} }
else { catch (error) {
try { set_state("fill", "Da ist etwas schief gelaufen :/");
await _espe.backend.member_register(
id,
verification,
value
);
set_message("Danke!");
set_state("done");
}
catch (error) {
set_message("Da ist etwas schief gelaufen :/");
set_state("fill");
}
} }
}, set_state("done", "Danke!");
}, }
]
);
target_element.appendChild(template_request("register"));
await form.setup(target_element.querySelector(".register-form") as HTMLElement);
await form.input_write(
{
"id": id,
"verification": verification,
"name_login": member_data.name_login,
"name_display": member_data.name_real,
"salutation": "",
"email_mode": "number_and_name",
"email_redirect": true,
"password": "",
"password_confirmation": "",
}
);
set_state("fill");
}
{
let dom_email_setting_container : HTMLElement = document.createElement("fieldset");
dom_email_setting_container.classList.add("register-email_setting");
{
let dom_legend : HTMLElement = document.createElement("legend");
dom_legend.textContent = "E-Mail-Einstellungen";
dom_email_setting_container.appendChild(dom_legend);
}
async function update_email_setting() {
const value : boolean = (await input_email_use.read())["use"];
dom_email_setting_container.classList.toggle("show", value);
}
const input_email_use = new lib_plankton.zoo_input.class_input_group(
[
{
"name": "use",
"input": new lib_plankton.zoo_input.class_input_checkbox(
{
"hooks_change": [
(value) => {update_email_setting();}
]
}
),
"label": "Partei-E-Mail-Adresse einrichten",
} }
] );
);
const input_email_setting = new lib_plankton.zoo_input.class_input_group(
[
{
"name": "numerical",
"input": new lib_plankton.zoo_input.class_input_checkbox(
),
"label": ("numerisch" + " : " + ("" + member_data.email_address_numerical_value + "")),
},
{
"name": "namely",
"input": new lib_plankton.zoo_input.class_input_checkbox(
),
"label": ("namentlich" + " : " + ("" + member_data.email_address_namely_value + "")),
},
]
);
await input_email_use.setup(target_element as HTMLElement);
target_element.appendChild(dom_email_setting_container);
await input_email_setting.setup(dom_email_setting_container);
await input_email_setting.write(
{
"numerical": true,
"namely": true,
}
);
await input_email_use.write({"use": true});
update_email_setting();
}
{
let dom_service_data_container : HTMLElement = document.createElement("fieldset");
{
let dom_legend : HTMLElement = document.createElement("legend");
dom_legend.textContent = "Angaben für Netzdienste";
dom_service_data_container.appendChild(dom_legend);
} }
dom_service_data_container.classList.add("register-services_data");
async function update_service_data() {
const value : boolean = (await input_service_use.read())["use"];
dom_service_data_container.classList.toggle("show", value);
/*
if (value) {
dom_service_data_container.removeAttribute("disabled");
}
else {
dom_service_data_container.setAttribute("disabled", "disabled");
}
*/
}
const input_service_use = new lib_plankton.zoo_input.class_input_group(
[
{
"name": "use",
"input": new lib_plankton.zoo_input.class_input_checkbox(
{
"hooks_change": [
(value) => {update_service_data();}
]
}
),
"label": "Netz-Dienste nutzen",
}
]
);
const input_service_data = new lib_plankton.zoo_input.class_input_group(
[
{
"name": "name_display",
"input": new lib_plankton.zoo_input.class_input_text(
{
}
),
"label": "Anzeigename",
"help": "So wirst du bei Online-Diensten anderen angezeigt.",
},
{
"name": "name_login",
"input": new lib_plankton.zoo_input.class_input_text(
{
"pattern": "^[0-9a-zA-Z_]+$",
}
),
"label": "Anmeldename",
"help": "Dieser Wert ist der Nutzername für die Anmeldung bei den Online-Diensten. Hierfür solltest du etwas kurzes und prägnantes wählen. Diesen Namen bekommt für gewöhnlich niemand zu sehen. Bitte beachte, dass der Name noch verfügbar sein muss!",
},
{
"name": "password",
"input": new lib_plankton.zoo_input.class_input_password(
),
"label": "Passwort",
"help": "Das Passwort für die Anmeldung bei den Online-Diensten",
},
{
"name": "password_confirmation",
"input": new lib_plankton.zoo_input.class_input_password(
),
"label": "Passwort wiederholen",
},
]
);
await input_service_use.setup(target_element as HTMLElement);
target_element.appendChild(dom_service_data_container);
await input_service_data.setup(dom_service_data_container);
await input_service_data.write(
{
"name_display": member_data.name_real,
"name_login": member_data.name_login,
"password": "",
"password_confirmation": "",
}
);
await input_service_use.write({"use": true});
update_service_data();
} }
}, },
); );

View file

@ -1,36 +1,16 @@
<template id="register"> <template id="register">
<section class="register"> <section class="register">
<h2>Registrieren</h2> <h2>Registrieren</h2>
<div class="register-info">
</div>
<div class="register-message"> <div class="register-message">
</div> </div>
<div class="register-form"> <div class="register-form">
<!-- <div class="register-form-input">
<form> </div>
<div class="formfield register-field-use_services"> <div class="register-form-actions">
<label>Netz-Dienste nutzen</label> <button class="register-form-action-send">Abschicken</button>
<input name="use_services" type="checkbox"/> </div>
</div>
<fieldset class="register-services_data">
<legend>Netzdienste</legend>
<div class="register-field-display_name">
<label>Anzeigename</label>
<input name="display_name" type="text"/>
</div>
<div class="formfield" class="register-field-login_name">
<label>Anmeldename</label>
<input name="login_name" type="text"/>
</div>
<div class="formfield"class="register-field-password_value">
<label>Passwort</label>
<input name="password_value" type="password"/>
</div>
<div class="formfield"class="register-field-password_confirmation">
<label>Passwort wiederholen</label>
<input name="password_confirmation" type="password"/>
</div>
</fieldset>
</form>
-->
</div> </div>
</section> </section>
</template> </template>

View file

@ -9,43 +9,3 @@
.register[rel="done"] .register-message {} .register[rel="done"] .register-message {}
.register[rel="done"] .register-form {display: none;} .register[rel="done"] .register-form {display: none;}
.register-email_setting
{
overflow: hidden;
}
.register-email_setting.show
{
max-height: 100vh;
transition: max-height 1.0s ease;
}
.register-email_setting:not(.show)
{
max-height: 0;
transition: max-height 0.25s ease;
}
.register-services_data
{
overflow: hidden;
}
.register-services_data.show
{
max-height: 100vh;
transition: max-height 1.0s ease;
}
.register-services_data:not(.show)
{
max-height: 0;
transition: max-height 0.25s ease;
}
/*
*/

View file

@ -3,7 +3,32 @@ lib_plankton.zoo_page.register(
async (parameters, target_element) => { async (parameters, target_element) => {
const id : int = parseInt(parameters["id"]); const id : int = parseInt(parameters["id"]);
const form = new lib_plankton.zoo_form.class_form<any, any>( const form = new lib_plankton.zoo_form.class_form<
{
membership_number : string;
name_real_value : string;
name_real_index : int;
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
email_use_veiled_address : boolean;
email_use_nominal_address : boolean;
email_redirect_to_private_address : boolean;
email_allow_sending : boolean;
},
{
membership_number : string;
name_real_value : string;
name_real_index : int;
email_address_private : (null | string);
registered : boolean;
enabled : boolean;
email_use_veiled_address : boolean;
email_use_nominal_address : boolean;
email_redirect_to_private_address : boolean;
email_allow_sending : boolean;
}
>(
value => value, value => value,
representation => representation, representation => representation,
new lib_plankton.zoo_input.class_input_group( new lib_plankton.zoo_input.class_input_group(
@ -15,39 +40,57 @@ lib_plankton.zoo_page.register(
}, },
{ {
"name": "name_real_value", "name": "name_real_value",
"input": new lib_plankton.zoo_input.class_input_text(), "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
"label": "Echter Name", "label": "Echter Name",
}, },
{ {
"name": "email_address_private_value", "name": "name_real_index",
"input": new lib_plankton.zoo_input.class_input_number({"read_only": true}),
"label": "Namens-Index",
},
{
"name": "email_address_private",
"input": new lib_plankton.zoo_input.class_input_text(), "input": new lib_plankton.zoo_input.class_input_text(),
"label": "Private E-Mail-Adresse", "label": "Private E-Mail-Adresse",
}, },
{ {
"name": "email_address_numberbased_use", "name": "registered",
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
"label": "Nummernbasierte E-Mail-Adresse verwenden", "label": "registriert",
}, },
{ {
"name": "email_address_namebased_use", "name": "enabled",
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "input": new lib_plankton.zoo_input.class_input_checkbox(),
"label": "Namensbasierte E-Mail-Adresse verwenden", "label": "für Netz-Dienste freigeschalten",
}, },
{ {
"name": "email_redirect", "name": "email_use_veiled_address",
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
"label": "Pseudonymisierte E-Mail-Adresse verwenden",
},
{
"name": "email_use_nominal_address",
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
"label": "Namentliche E-Mail-Adresse verwenden",
},
{
"name": "email_redirect_to_private_address",
"input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}), "input": new lib_plankton.zoo_input.class_input_checkbox({"read_only": true}),
"label": "eingehende E-Mails zu privater Adresse umleiten", "label": "eingehende E-Mails zu privater Adresse umleiten",
}, },
{
"name": "email_allow_sending",
"input": new lib_plankton.zoo_input.class_input_checkbox(),
"label": "Versenden von E-Mails erlaubt",
},
/*
{ {
"name": "name_display", "name": "name_display",
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}), "input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
"label": "Anzeigename", "label": "Anzeigename",
}, },
{ */
"name": "salutation", /*
"input": new lib_plankton.zoo_input.class_input_text({"read_only": true}),
"label": "Anrede/Pronomen",
},
{ {
"name": "name_login", "name": "name_login",
"input": new lib_plankton.zoo_input.class_input_text( "input": new lib_plankton.zoo_input.class_input_text(
@ -58,9 +101,24 @@ lib_plankton.zoo_page.register(
), ),
"label": "Anmeldename", "label": "Anmeldename",
}, },
*/
] ]
), ),
[ [
{
"label": "Änderungen speichern",
"procedure": async (get_value, get_representation) => {
const value = await get_value();
await _espe.backend.member_modify(
id,
{
"email_address_private": value.email_address_private,
"enabled": value.enabled,
"registered": value.registered,
}
);
},
},
{ {
"label": "Zur Registrierung auffordern", "label": "Zur Registrierung auffordern",
"procedure": async (get_value, get_representation) => { "procedure": async (get_value, get_representation) => {
@ -78,7 +136,7 @@ lib_plankton.zoo_page.register(
) )
); );
await _espe.backend.member_urge_for_registration(id, url); await _espe.backend.member_summon(id, url);
/* /*
lib_plankton.zoo_page.set( lib_plankton.zoo_page.set(
@ -100,11 +158,25 @@ lib_plankton.zoo_page.register(
[ [
form.setup(dom_fragment.querySelector(".view-form") as HTMLElement), form.setup(dom_fragment.querySelector(".view-form") as HTMLElement),
_espe.backend.member_get(id), _espe.backend.member_get(id),
// _espe.backend.member_info(id),
] ]
) )
.then( .then(
([_, member]) => { ([_, member_object]) => {
form.input_write(member); form.input_write(
{
"membership_number": member_object.membership_number,
"name_real_value": member_object.name_real_value,
"name_real_index": member_object.name_real_index,
"email_address_private": member_object.email_address_private,
"registered": member_object.registered,
"enabled": member_object.enabled,
"email_use_veiled_address": member_object.email_use_veiled_address,
"email_use_nominal_address": member_object.email_use_nominal_address,
"email_redirect_to_private_address": member_object.email_redirect_to_private_address,
"email_allow_sending": member_object.email_allow_sending,
}
);
} }
) )
); );

View file

@ -12,5 +12,12 @@
.view-form > .plankton_form > .plankton_form_actions .view-form > .plankton_form > .plankton_form_actions
{ {
flex: 1; flex: 1;
} }
.plankton_form_actions > *
{
display: block;
margin: 8px;
}

View file

@ -19,12 +19,14 @@ default: ${dir_build}/logic.js ${dir_build}/style.css ${dir_build}/index.html
${dir_temp}/logic-unlinked.js: \ ${dir_temp}/logic-unlinked.js: \
${dir_lib}/plankton/plankton.d.ts \ ${dir_lib}/plankton/plankton.d.ts \
${dir_source}/logic/helpers.ts \
${dir_source}/logic/backend.ts \ ${dir_source}/logic/backend.ts \
${dir_source}/logic/conf.ts \ ${dir_source}/logic/conf.ts \
${dir_source}/pages/index/logic.ts \
${dir_source}/pages/login/logic.ts \ ${dir_source}/pages/login/logic.ts \
${dir_source}/pages/logout/logic.ts \ ${dir_source}/pages/logout/logic.ts \
${dir_source}/pages/members/logic.ts \
${dir_source}/pages/create/logic.ts \ ${dir_source}/pages/create/logic.ts \
${dir_source}/pages/list/logic.ts \
${dir_source}/pages/view/logic.ts \ ${dir_source}/pages/view/logic.ts \
${dir_source}/pages/register/logic.ts \ ${dir_source}/pages/register/logic.ts \
${dir_source}/logic/main.ts ${dir_source}/logic/main.ts
@ -40,10 +42,12 @@ ${dir_build}/logic.js: ${dir_lib}/plankton/plankton.js ${dir_temp}/logic-unlinke
${dir_build}/style.css: \ ${dir_build}/style.css: \
${dir_source}/style/style.css \ ${dir_source}/style/style.css \
${dir_source}/pages/index/style.css \
${dir_source}/pages/login/style.css \ ${dir_source}/pages/login/style.css \
${dir_source}/pages/logout/style.css \ ${dir_source}/pages/logout/style.css \
${dir_source}/pages/members/style.css \ ${dir_source}/pages/members/style.css \
${dir_source}/pages/create/style.css \ ${dir_source}/pages/create/style.css \
${dir_source}/pages/list/style.css \
${dir_source}/pages/view/style.css \ ${dir_source}/pages/view/style.css \
${dir_source}/pages/register/style.css ${dir_source}/pages/register/style.css
@ ${cmd_log} "style …" @ ${cmd_log} "style …"
@ -52,10 +56,12 @@ ${dir_build}/style.css: \
${dir_build}/index.html: \ ${dir_build}/index.html: \
${dir_source}/structure/index.html.tpl \ ${dir_source}/structure/index.html.tpl \
${dir_source}/pages/index/structure.html \
${dir_source}/pages/login/structure.html \ ${dir_source}/pages/login/structure.html \
${dir_source}/pages/logout/structure.html \ ${dir_source}/pages/logout/structure.html \
${dir_source}/pages/members/structure.html \ ${dir_source}/pages/members/structure.html \
${dir_source}/pages/create/structure.html \ ${dir_source}/pages/create/structure.html \
${dir_source}/pages/list/structure.html \
${dir_source}/pages/view/structure.html \ ${dir_source}/pages/view/structure.html \
${dir_source}/pages/register/structure.html ${dir_source}/pages/register/structure.html
@ ${cmd_log} "structure …" @ ${cmd_log} "structure …"