219 lines
6.5 KiB
TypeScript
219 lines
6.5 KiB
TypeScript
lib_plankton.zoo_page.register(
|
|
"members",
|
|
(parameters, target_element) => {
|
|
const state : (null | any) = (
|
|
("state" in parameters)
|
|
? lib_plankton.json.decode(lib_plankton.base64.decode(parameters["state"]))
|
|
: null
|
|
);
|
|
|
|
const set_state = function (state) {
|
|
target_element.querySelector(".members").setAttribute("rel", state);
|
|
};
|
|
|
|
let _id : (null | int) = null;
|
|
|
|
const editor : lib_plankton.zoo_editor.type_editor<int, any> = lib_plankton.zoo_editor.make<int, any>(
|
|
{
|
|
"setup": (parameters) => Promise.resolve<void>(undefined),
|
|
"search": async (term) => lib_plankton.call.convey(
|
|
await _aum.backend.member_list(),
|
|
[
|
|
// (raw as Array<{id : int; preview : any;}>)
|
|
x => x.filter(
|
|
(
|
|
(term === null)
|
|
||
|
|
(term === "")
|
|
)
|
|
? (entry => true)
|
|
: (
|
|
(term.length < 2)
|
|
? (entry => false)
|
|
: (
|
|
entry => (
|
|
entry.preview["membership_number"].includes(term)
|
|
||
|
|
entry.preview["name_real_value"].toLowerCase().includes(term)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
x => x.map(
|
|
entry => ({
|
|
"key": entry.id,
|
|
"preview": entry.preview,
|
|
})
|
|
),
|
|
]
|
|
),
|
|
"read": (key) => _aum.backend.member_get(key),
|
|
"create": (value) => /*_aum.backend.member_add(value)*/Promise.reject(new Error("missing")),
|
|
"update": (key, value) => _aum.backend.member_modify(key, value),
|
|
"delete": (key) => /*_aum.backend.member_remove(key)*/Promise.reject(new Error("missing")),
|
|
},
|
|
lib_plankton.zoo_form.make<any>(
|
|
"GET",
|
|
[
|
|
{
|
|
"name": "membership_number",
|
|
"type": "text",
|
|
"label": "Mitgliedsnummer",
|
|
},
|
|
{
|
|
"name": "enabled",
|
|
"type": "checkbox",
|
|
"label": "Für Online-Dienste freischalten",
|
|
},
|
|
{
|
|
"name": "name_real_value",
|
|
"type": "text",
|
|
"label": "Echter Name",
|
|
},
|
|
{
|
|
"name": "name_real_extension",
|
|
"type": "text",
|
|
"label": "Zusatz für echten Name (für mögliche Dopplung)",
|
|
},
|
|
{
|
|
"name": "name_display",
|
|
"type": "text",
|
|
"label": "Anzeigename",
|
|
},
|
|
{
|
|
"name": "name_login",
|
|
"type": "text",
|
|
"label": "Anmeldename",
|
|
},
|
|
{
|
|
"name": "email_address_private_value",
|
|
"type": "text",
|
|
"label": "Private E-Mail-Adresse",
|
|
},
|
|
{
|
|
"name": "email_address_numberbased_use",
|
|
"type": "checkbox",
|
|
"label": "Nummernbasierte E-Mail-Adresse verwenden",
|
|
},
|
|
{
|
|
"name": "email_address_namebased_use",
|
|
"type": "checkbox",
|
|
"label": "Namensbasierte E-Mail-Adresse verwenden",
|
|
},
|
|
{
|
|
"name": "email_redirect_to_private",
|
|
"type": "checkbox",
|
|
"label": "E-Mails an private Adresse umleiten",
|
|
},
|
|
{
|
|
"name": "salutation",
|
|
"type": "text",
|
|
"label": "Anrede/Pronomen",
|
|
},
|
|
],
|
|
value => ({
|
|
"enabled": (value.enabled ? "on" : ""),
|
|
"membership_number": value.membership_number,
|
|
"name_real_value": value.name_real_value,
|
|
"name_real_extension": value.name_real_extension,
|
|
"name_display": value.name_display,
|
|
"name_login": value.name_login,
|
|
"email_address_private_value": value.email_address_private_value,
|
|
"email_address_numberbased_use": (value.email_address_numberbased_use ? "on" : ""),
|
|
"email_address_namebased_use": (value.email_address_namebased_use ? "on" : ""),
|
|
"email_redirect_to_private": (value.email_redirect_to_private ? "on" : ""),
|
|
"salutation": value.salutation,
|
|
}),
|
|
raw => ({
|
|
"enabled": (raw["enabled"] === "on"),
|
|
"membership_number": raw["membership_number"],
|
|
"name_real_value": raw["name_real_value"],
|
|
"name_real_extension": raw["name_real_extension"],
|
|
"name_display": raw["name_display"],
|
|
"name_login": raw["name_login"],
|
|
"email_address_private_value": raw["email_address_private_value"],
|
|
"email_address_numberbased_use": (raw["email_address_numberbased_use"] === "on"),
|
|
"email_address_namebased_use": (raw["email_address_namebased_use"] === "on"),
|
|
"email_redirect_to_private": (raw["email_redirect_to_private"] === "on"),
|
|
"salutation": raw["salutation"],
|
|
}),
|
|
{
|
|
}
|
|
),
|
|
{
|
|
"encode_hit": hit => lib_plankton.string.coin(
|
|
"{{number}} | {{name}}",
|
|
{
|
|
"number": hit.preview["membership_number"],
|
|
"name": hit.preview["name_real_value"],
|
|
}
|
|
),
|
|
"hook_switch": (state) => {
|
|
_id = state.key;
|
|
set_state((_id === null) ? "poor" : "rich");
|
|
const state_encoded : string = lib_plankton.base64.encode(lib_plankton.json.encode(state));
|
|
lib_plankton.zoo_page.set({"name": "members", "parameters": {"state": state_encoded}});
|
|
},
|
|
}
|
|
);
|
|
|
|
target_element.appendChild(template_request("members"));
|
|
|
|
lib_plankton.zoo_editor.render<int, any>(
|
|
editor,
|
|
target_element.querySelector(".members-editor"),
|
|
(
|
|
Object.assign(
|
|
{
|
|
},
|
|
((state !== null) ? {"state": state} : {})
|
|
)
|
|
)
|
|
);
|
|
|
|
target_element.querySelector(".members-urge_for_registration").addEventListener(
|
|
"click",
|
|
async () => {
|
|
const verification : string = await _aum.backend.verification_get(_id);
|
|
const location_encoded : string = lib_plankton.zoo_page.encode(
|
|
{
|
|
"name": "register",
|
|
"parameters": {
|
|
"id": _id,
|
|
"verification": verification,
|
|
}
|
|
}
|
|
);
|
|
const url_base : string = window.location.href.split("#")[0];
|
|
const url : string = (url_base + location_encoded);
|
|
|
|
const data : Record<string, any> = await lib_plankton.zoo_form.read(editor.form);
|
|
|
|
const text_paragraphs : Array<string> = [
|
|
lib_plankton.string.coin(
|
|
"Hi, {{name}}!",
|
|
{
|
|
"name": "data.name_real_value",
|
|
}
|
|
),
|
|
"Willkommen bei der Linken!",
|
|
"Wir als Landesverband Sachsen stellen für unsere Mitglieder verschiedene Online-Dienste zur Verfügung. Dazu gehört eine E-Mail-Adresse bei der Partei, ein Instant Messenger, eine Cloud, ein Wiki und noch einiges mehr.",
|
|
"Wenn du die Dienste nutzen möchtest, rufe bitte folgende Adresse auf:",
|
|
url,
|
|
"Solidarische Grüße, dein Landesverband Sachsen",
|
|
];
|
|
|
|
_aum.backend.email(
|
|
[
|
|
data.email_address_private_value,
|
|
],
|
|
"DIE LINKE. | Landesverband Sachsen | Registierung für Online-Dienste",
|
|
text_paragraphs.join("\n\n"),
|
|
);
|
|
// TODO: statt dessen eine E-Mail an die private Adresse des Neumitglieds senden
|
|
// target_element.querySelector(".members-result").setAttribute("href", url);
|
|
alert(url);
|
|
}
|
|
);
|
|
}
|
|
);
|