diff --git a/application/controllers/api/frontend/v1/coodle/FreeBusy.php b/application/controllers/api/frontend/v1/coodle/FreeBusy.php index 2458dc0b6..6a68c3585 100644 --- a/application/controllers/api/frontend/v1/coodle/FreeBusy.php +++ b/application/controllers/api/frontend/v1/coodle/FreeBusy.php @@ -44,13 +44,9 @@ class FreeBusy extends FHCAPI_Controller public function getFreeBusyTypes() { - $freeBusyTypesResult = $this->FreeBusyTypeModel->getAllFreeBusyTypes(); + $freeBusyTypesResult = $this->FreeBusyTypeModel->getActiveFreeBusyTypes(); $freeBusyTypes = $this->getDataOrTerminateWithError($freeBusyTypesResult); - // todo: are we using all types? are we changing base urls? are we changing tables? - // tentatively filtering out most types, leaving only sogo and other - $freeBusyTypes = array_values(array_filter($freeBusyTypes, function ($freeBusyType) { - return in_array($freeBusyType->freebusytyp_kurzbz, ["Sonstiges", "SoGo"]); - })); + $freeBusyTypes = $this->formatDefaultUrlsInFreeBusyTypes($freeBusyTypes); $this->terminateWithSuccess($freeBusyTypes); } @@ -66,7 +62,6 @@ class FreeBusy extends FHCAPI_Controller public function createFreeBusyEntry() { $description = $this->input->post("description"); - // todo: check if defaulting to other is fine $type = $this->input->post("type") ?? "Sonstiges"; $url = $this->input->post("url"); $isActive = $this->input->post("isActive"); @@ -93,7 +88,6 @@ class FreeBusy extends FHCAPI_Controller { $id = $this->input->post("id"); $description = $this->input->post("description"); - // todo: check if defaulting to other is fine $type = $this->input->post("type") ?? "Sonstiges"; $url = $this->input->post("url"); $isActive = $this->input->post("isActive"); @@ -146,4 +140,20 @@ class FreeBusy extends FHCAPI_Controller { return !!@fopen($url, "r"); } + + private function formatDefaultUrlsInFreeBusyTypes($freeBusyTypes) + { + $uid = getAuthUID(); + return array_map(function ($freeBusyType) use ($uid) { + if (!$freeBusyType->url_vorlage || !strlen($freeBusyType->url_vorlage)) { + $freeBusyType->url_default = null; + unset($freeBusyType->url_vorlage); + return $freeBusyType; + } + + $freeBusyType->url_default = str_replace('$uid', $uid, $freeBusyType->url_vorlage); + unset($freeBusyType->url_vorlage); + return $freeBusyType; + }, $freeBusyTypes); + } } diff --git a/application/models/person/Freebusytyp_model.php b/application/models/person/Freebusytyp_model.php index edbb903c6..e5164657c 100644 --- a/application/models/person/Freebusytyp_model.php +++ b/application/models/person/Freebusytyp_model.php @@ -16,4 +16,9 @@ class Freebusytyp_model extends DB_Model { return $this->execReadOnlyQuery("SELECT * FROM " . $this->dbTable); } + + public function getActiveFreeBusyTypes() + { + return $this->execReadOnlyQuery("SELECT * FROM " . $this->dbTable . " WHERE is_active"); + } } diff --git a/public/js/components/Cis/Coodle/Components/CoodleFreeBusy.js b/public/js/components/Cis/Coodle/Components/CoodleFreeBusy.js index ab0cb2dd8..7092bc3d5 100644 --- a/public/js/components/Cis/Coodle/Components/CoodleFreeBusy.js +++ b/public/js/components/Cis/Coodle/Components/CoodleFreeBusy.js @@ -24,12 +24,12 @@ export default { externalSchedules: [], scheduleEditIndex: null, scheduleFormData: null, - scheduleTypeOptions: [], + scheduleTypes: [], }; }, methods: { getScheduleTypeText(value) { - let type = this.scheduleTypeOptions.find( + let type = this.scheduleTypes.find( (type) => type.value === value, ); return type?.text ?? "Other"; @@ -95,11 +95,12 @@ export default { const freeBusyTypesResponse = await this.$api.call( FreeBusyApi.getFreeBusyTypes(), ); - this.scheduleTypeOptions = freeBusyTypesResponse.data.map( + this.scheduleTypes = freeBusyTypesResponse.data.map( (type) => { return { value: type.freebusytyp_kurzbz, text: type.bezeichnung, + urlDefault: type.url_default, }; }, ); @@ -110,19 +111,10 @@ export default { ); this.externalSchedules = freeBusyEntriesResponse.data.map( (freeBusySchedule) => { - // todo: remove type defaulting if switch to using all types - let type = this.scheduleTypeOptions.find((type) => { - return ( - type.value === freeBusySchedule.freebusytyp_kurzbz - ); - }) - ? freeBusySchedule.freebusytyp_kurzbz - : "Sonstiges"; - return { id: freeBusySchedule.freebusy_id, description: freeBusySchedule.bezeichnung, - type, + type: freeBusySchedule.freebusytyp_kurzbz, url: freeBusySchedule.url, isActive: freeBusySchedule.aktiv, }; @@ -152,34 +144,56 @@ export default { {{ "To effectively use FreeBusy, you must carefully enter and update your calendar data. Your base schedule and planned absences will be displayed by default, but you can add additional schedules (Google, SOGo, etc)." }} -
| {{ "Description" }} | -{{ "Type" }} | -{{ "URL" }} | -{{ "Active" }} | -{{ "Actions" }} | -|||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ defaultSchedule.description }} | -{{ defaultSchedule.type }} | -- | {{ "Yes" }} | -- | |||||||||||||||||||||||||
| {{ schedule.description }} | -{{ getScheduleTypeText(schedule.type) }} | -{{ schedule.url }} | -{{ schedule.isActive ? "Yes" : "No" }} | -
-
-
-
+
+
| |||||||||||||||||||||||||