[mod] page:events:Zugriffs-Level berücksichtigen
This commit is contained in:
parent
8b33fa8e25
commit
9786a7cae7
13 changed files with 225 additions and 31 deletions
|
@ -379,6 +379,7 @@ namespace _zeitbild.frontend_web.backend
|
|||
{
|
||||
calendar_id : _zeitbild.frontend_web.type.calendar_id;
|
||||
calendar_name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id);
|
||||
event_object : _zeitbild.frontend_web.type.event_object;
|
||||
}
|
||||
|
@ -392,20 +393,36 @@ namespace _zeitbild.frontend_web.backend
|
|||
options
|
||||
);
|
||||
|
||||
return call(
|
||||
lib_plankton.http.enum_method.get,
|
||||
"/events",
|
||||
Object.assign(
|
||||
{
|
||||
"from": from_pit,
|
||||
"to": to_pit,
|
||||
},
|
||||
(
|
||||
(options.calendar_ids === null)
|
||||
?
|
||||
{}
|
||||
:
|
||||
{"calendar_ids": options.calendar_ids.join(",")}
|
||||
return (
|
||||
call(
|
||||
lib_plankton.http.enum_method.get,
|
||||
"/events",
|
||||
Object.assign(
|
||||
{
|
||||
"from": from_pit,
|
||||
"to": to_pit,
|
||||
},
|
||||
(
|
||||
(options.calendar_ids === null)
|
||||
?
|
||||
{}
|
||||
:
|
||||
{"calendar_ids": options.calendar_ids.join(",")}
|
||||
)
|
||||
)
|
||||
)
|
||||
.then(
|
||||
(data) => Promise.resolve(
|
||||
data
|
||||
.map(
|
||||
(entry) => ({
|
||||
"calendar_id": entry.calendar_id,
|
||||
"calendar_name": entry.calendar_name,
|
||||
"access_level": access_level_decode(entry.access_level),
|
||||
"event_id": entry.event_id,
|
||||
"event_object": entry.event_object,
|
||||
})
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
|
|
@ -154,6 +154,7 @@ namespace _zeitbild.frontend_web.view
|
|||
_zeitbild.frontend_web.type.calendar_id,
|
||||
{
|
||||
name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
}
|
||||
>;
|
||||
rows : Array<
|
||||
|
@ -204,6 +205,7 @@ namespace _zeitbild.frontend_web.view
|
|||
{
|
||||
calendar_id : _zeitbild.frontend_web.type.calendar_id;
|
||||
calendar_name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
event_id : (null | _zeitbild.frontend_web.type.local_resource_event_id);
|
||||
event_object : _zeitbild.frontend_web.type.event_object;
|
||||
}
|
||||
|
@ -219,6 +221,7 @@ namespace _zeitbild.frontend_web.view
|
|||
_zeitbild.frontend_web.type.calendar_id,
|
||||
{
|
||||
name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
}
|
||||
>;
|
||||
rows : Array<
|
||||
|
@ -252,6 +255,7 @@ namespace _zeitbild.frontend_web.view
|
|||
"key": entry.calendar_id,
|
||||
"value": {
|
||||
"name": entry.calendar_name,
|
||||
"access_level": entry.access_level,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -428,6 +432,7 @@ namespace _zeitbild.frontend_web.view
|
|||
_zeitbild.frontend_web.type.calendar_id,
|
||||
{
|
||||
name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
}
|
||||
>;
|
||||
rows : Array<
|
||||
|
@ -458,6 +463,7 @@ namespace _zeitbild.frontend_web.view
|
|||
_zeitbild.frontend_web.type.calendar_id,
|
||||
{
|
||||
name : string;
|
||||
access_level : _zeitbild.frontend_web.type.enum_access_level;
|
||||
color : lib_plankton.color.type_color;
|
||||
}
|
||||
> = lib_plankton.map.hashmap.implementation_map(
|
||||
|
@ -473,6 +479,7 @@ namespace _zeitbild.frontend_web.view
|
|||
"key": pair.key,
|
||||
"value": {
|
||||
"name": pair.value.name,
|
||||
"access_level": pair.value.access_level,
|
||||
"color": lib_plankton.color.give_generic(
|
||||
(pair.key - 1),
|
||||
{
|
||||
|
@ -498,6 +505,7 @@ namespace _zeitbild.frontend_web.view
|
|||
"tableview-sources-entry",
|
||||
{
|
||||
"name": data.name,
|
||||
// "access_level": data.access_level,
|
||||
"color": lib_plankton.color.output_hex(data.color),
|
||||
"rel": calendar_id.toFixed(0),
|
||||
}
|
||||
|
@ -553,6 +561,20 @@ namespace _zeitbild.frontend_web.view
|
|||
),
|
||||
]
|
||||
),
|
||||
"rel": lib_plankton.call.convey(
|
||||
cell.pit,
|
||||
[
|
||||
lib_plankton.pit.to_datetime,
|
||||
(x : lib_plankton.pit.type_datetime) => lib_plankton.string.coin(
|
||||
"{{year}}-{{month}}-{{day}}",
|
||||
{
|
||||
"year": x.date.year.toFixed(0).padStart(4, "0"),
|
||||
"month": x.date.month.toFixed(0).padStart(2, "0"),
|
||||
"day": x.date.day.toFixed(0).padStart(2, "0"),
|
||||
}
|
||||
)
|
||||
]
|
||||
),
|
||||
"entries": (
|
||||
await _zeitbild.frontend_web.helpers.promise_row<string>(
|
||||
cell.entries
|
||||
|
@ -573,7 +595,7 @@ namespace _zeitbild.frontend_web.view
|
|||
),
|
||||
"name": entry.event_object.name,
|
||||
"rel": lib_plankton.string.coin(
|
||||
"{{calendar_id}}/{{event_id}}",
|
||||
"{{calendar_id}}/{{event_id}}/{{access_level}}",
|
||||
{
|
||||
"calendar_id": entry.calendar_id.toFixed(0),
|
||||
"event_id": (
|
||||
|
@ -583,6 +605,29 @@ namespace _zeitbild.frontend_web.view
|
|||
:
|
||||
entry.event_id.toFixed(0)
|
||||
),
|
||||
"access_level": (() => {
|
||||
const access_level : _zeitbild.frontend_web.type.enum_access_level = sources.get(entry.calendar_id).access_level;
|
||||
switch (access_level) {
|
||||
case _zeitbild.frontend_web.type.enum_access_level.none: return "none";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.view: return "view";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.edit: return "edit";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.admin: return "admin";
|
||||
}
|
||||
}) (),
|
||||
}
|
||||
),
|
||||
"additional_classes": lib_plankton.string.coin(
|
||||
" access_level-{{access_level}}",
|
||||
{
|
||||
"access_level": (() => {
|
||||
const access_level : _zeitbild.frontend_web.type.enum_access_level = sources.get(entry.calendar_id).access_level;
|
||||
switch (access_level) {
|
||||
case _zeitbild.frontend_web.type.enum_access_level.none: return "none";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.view: return "view";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.edit: return "edit";
|
||||
case _zeitbild.frontend_web.type.enum_access_level.admin: return "admin";
|
||||
}
|
||||
}) (),
|
||||
}
|
||||
),
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"calendar_add",
|
||||
async (parameters, target_element) => {
|
||||
target_element.innerHTML = "";
|
||||
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
|
||||
"calendar_add",
|
||||
{
|
||||
|
|
|
@ -6,7 +6,52 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"event_add",
|
||||
async (parameters, target_element) => {
|
||||
const calendar_id : int = parseInt(parameters["calendar_id"]);
|
||||
const calendar_id : (null | int) = (
|
||||
("calendar_id" in parameters)
|
||||
?
|
||||
parseInt(parameters["calendar_id"])
|
||||
:
|
||||
null
|
||||
);
|
||||
const year : (null | int) = (
|
||||
("year" in parameters)
|
||||
?
|
||||
parseInt(parameters["year"])
|
||||
:
|
||||
null
|
||||
);
|
||||
const month : (null | int) = (
|
||||
("month" in parameters)
|
||||
?
|
||||
parseInt(parameters["month"])
|
||||
:
|
||||
null
|
||||
);
|
||||
const day : (null | int) = (
|
||||
("day" in parameters)
|
||||
?
|
||||
parseInt(parameters["day"])
|
||||
:
|
||||
null
|
||||
);
|
||||
const date : lib_plankton.pit.type_date = (
|
||||
(
|
||||
(year !== null)
|
||||
&&
|
||||
(month !== null)
|
||||
&&
|
||||
(day !== null)
|
||||
)
|
||||
?
|
||||
{
|
||||
"year": year,
|
||||
"month": month,
|
||||
"day": day,
|
||||
}
|
||||
:
|
||||
lib_plankton.pit.to_datetime(lib_plankton.pit.now()).date
|
||||
);
|
||||
target_element.innerHTML = "";
|
||||
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
|
||||
"event_add",
|
||||
{
|
||||
|
@ -158,14 +203,23 @@ namespace _zeitbild.frontend_web.pages
|
|||
},
|
||||
]
|
||||
);
|
||||
/*
|
||||
await form.write(
|
||||
await form.setup(document.querySelector("#event_add_form"));
|
||||
await form.input_write(
|
||||
{
|
||||
"calendar_id": parameters["calendar_id"],
|
||||
"calendar_id": (calendar_id ?? 0),
|
||||
"event_object": {
|
||||
"name": "",
|
||||
"begin": {
|
||||
"timezone_shift": 0,
|
||||
"date": date,
|
||||
"time": null
|
||||
},
|
||||
"end": null,
|
||||
"location": null,
|
||||
"description": null,
|
||||
}
|
||||
}
|
||||
);
|
||||
*/
|
||||
await form.setup(document.querySelector("#event_add_form"));
|
||||
return Promise.resolve<void>(undefined);
|
||||
}
|
||||
);
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
async (parameters, target_element) => {
|
||||
const calendar_id : int = parseInt(parameters["calendar_id"]);
|
||||
const event_id : int = parseInt(parameters["event_id"]);
|
||||
target_element.innerHTML = "";
|
||||
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
|
||||
"event_edit",
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"events",
|
||||
async (parameters, target_element) => {
|
||||
target_element.innerHTML = "";
|
||||
const content : string = await _zeitbild.frontend_web.view.calendar_view_table_html(
|
||||
{
|
||||
"calendar_ids": null,
|
||||
|
@ -23,6 +24,36 @@ namespace _zeitbild.frontend_web.pages
|
|||
}
|
||||
);
|
||||
target_element.innerHTML = content;
|
||||
target_element.querySelectorAll(".calendar-cell-regular").forEach(
|
||||
(element) => {
|
||||
element.addEventListener(
|
||||
"click",
|
||||
(event) => {
|
||||
if (! (element === event.target)) {
|
||||
// do nothing
|
||||
}
|
||||
else {
|
||||
const rel : string = element.getAttribute("rel");
|
||||
const parts : Array<string> = rel.split("-");
|
||||
const year : int = parseInt(parts[0]);
|
||||
const month : int = parseInt(parts[1]);
|
||||
const day : int = parseInt(parts[2]);
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
"name": "event_add",
|
||||
"parameters": {
|
||||
"calendar_id": null,
|
||||
"year": year,
|
||||
"month": month,
|
||||
"day": day,
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
target_element.querySelectorAll(".calendar-event_entry").forEach(
|
||||
(element) => {
|
||||
element.addEventListener(
|
||||
|
@ -38,15 +69,38 @@ namespace _zeitbild.frontend_web.pages
|
|||
:
|
||||
parseInt(parts[1])
|
||||
);
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
"name": "event_edit",
|
||||
"parameters": {
|
||||
"calendar_id": calendar_id,
|
||||
"event_id": event_id,
|
||||
}
|
||||
const access_level : _zeitbild.frontend_web.type.enum_access_level = (() => {
|
||||
switch (parts[2]) {
|
||||
case "none": return _zeitbild.frontend_web.type.enum_access_level.none;
|
||||
case "view": return _zeitbild.frontend_web.type.enum_access_level.view;
|
||||
case "edit": return _zeitbild.frontend_web.type.enum_access_level.edit;
|
||||
case "admin": return _zeitbild.frontend_web.type.enum_access_level.admin;
|
||||
}
|
||||
);
|
||||
}) ();
|
||||
switch (access_level) {
|
||||
case _zeitbild.frontend_web.type.enum_access_level.none: {
|
||||
throw (new Error("this event should not be visible"));
|
||||
break;
|
||||
}
|
||||
case _zeitbild.frontend_web.type.enum_access_level.view: {
|
||||
// do nothing
|
||||
// TODO: edit_view?
|
||||
break;
|
||||
}
|
||||
case _zeitbild.frontend_web.type.enum_access_level.edit:
|
||||
case _zeitbild.frontend_web.type.enum_access_level.admin: {
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
"name": "event_edit",
|
||||
"parameters": {
|
||||
"calendar_id": calendar_id,
|
||||
"event_id": event_id,
|
||||
}
|
||||
}
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"login",
|
||||
async (parameters, target_element) => {
|
||||
target_element.innerHTML = "";
|
||||
const preparation : {kind : string; data : any;} = await _zeitbild.frontend_web.backend.session_prepare(
|
||||
{
|
||||
"oidc_redirect_uri_template": _zeitbild.frontend_web.conf.get()["misc"]["oidc_redirect_uri_template"],
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"logout",
|
||||
async (parameters, target_element) => {
|
||||
target_element.innerHTML = "";
|
||||
await _zeitbild.frontend_web.backend.session_end(
|
||||
);
|
||||
lib_plankton.zoo_page.set(
|
||||
|
|
|
@ -6,6 +6,7 @@ namespace _zeitbild.frontend_web.pages
|
|||
lib_plankton.zoo_page.register(
|
||||
"oidc_finish",
|
||||
async (parameters, target_element) => {
|
||||
target_element.innerHTML = "";
|
||||
await _zeitbild.frontend_web.backend.set_session_key(parameters["session_key"]);
|
||||
lib_plankton.zoo_page.set(
|
||||
{
|
||||
|
|
4
source/style/hacks.css
Normal file
4
source/style/hacks.css
Normal file
|
@ -0,0 +1,4 @@
|
|||
.plankton_input_group_field[rel="resource_kind"]
|
||||
{
|
||||
display: none;
|
||||
}
|
|
@ -90,6 +90,8 @@ a:hover {
|
|||
.calendar-cell-regular {
|
||||
width: 13.5%;
|
||||
height: 120px;
|
||||
|
||||
cursor: copy;
|
||||
}
|
||||
|
||||
.calendar-cell-today {
|
||||
|
@ -113,6 +115,19 @@ a:hover {
|
|||
font-size: 0.75em;
|
||||
color: #FFF;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.calendar-event_entry.access_level-none
|
||||
,
|
||||
.calendar-event_entry.access_level-view
|
||||
{
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.calendar-event_entry.access_level-edit
|
||||
,
|
||||
.calendar-event_entry.access_level-admin
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
<li class="calendar-event_entry" style="background-color: {{color}};" title="{{title}}" rel="{{rel}}">
|
||||
<li class="calendar-event_entry{{additional_classes}}" style="background-color: {{color}};" title="{{title}}" rel="{{rel}}">
|
||||
{{name}}
|
||||
</li>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<td class="calendar-cell calendar-cell-regular{{extra_classes}}">
|
||||
<td class="calendar-cell calendar-cell-regular{{extra_classes}}" rel="{{rel}}">
|
||||
<span class="calendar-day" title="{{title}}">
|
||||
{{day}}
|
||||
</span>
|
||||
|
|
Loading…
Add table
Reference in a new issue