Compare commits

...

3 Commits

Author SHA1 Message Date
Nextcloud bot 7cebde242c
[tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
3 years ago
Christoph Wurst a4368ad185
Merge pull request #27466 from nextcloud/feature/dav-scheduling-availability-settings
Add scheduling availability settings
3 years ago
Christoph Wurst f432dd2e2e
Add scheduling availability settings
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
3 years ago

@ -60,6 +60,7 @@
<settings>
<admin>OCA\DAV\Settings\CalDAVSettings</admin>
<personal>OCA\DAV\Settings\AvailabilitySettings</personal>
</settings>
<activity>

@ -277,6 +277,7 @@ return array(
'OCA\\DAV\\Search\\EventsSearchProvider' => $baseDir . '/../lib/Search/EventsSearchProvider.php',
'OCA\\DAV\\Search\\TasksSearchProvider' => $baseDir . '/../lib/Search/TasksSearchProvider.php',
'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php',
'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => $baseDir . '/../lib/Storage/PublicOwnerWrapper.php',
'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => $baseDir . '/../lib/SystemTag/SystemTagMappingNode.php',

@ -292,6 +292,7 @@ class ComposerStaticInitDAV
'OCA\\DAV\\Search\\EventsSearchProvider' => __DIR__ . '/..' . '/../lib/Search/EventsSearchProvider.php',
'OCA\\DAV\\Search\\TasksSearchProvider' => __DIR__ . '/..' . '/../lib/Search/TasksSearchProvider.php',
'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php',
'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => __DIR__ . '/..' . '/../lib/Storage/PublicOwnerWrapper.php',
'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagMappingNode.php',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Venç en %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Punt final de WebDAV",
"Save" : "Desa",
"Calendar server" : "Servidor de calendari",
"Send invitations to attendees" : "Envia invitacions als assistents",
"Automatically generate a birthday calendar" : "Genera automàticament un calendari daniversari",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.",
"Are you accepting the invitation?" : "Accepteu la invitació?",
"Tentative" : "Provisional",
"Save" : "Desa",
"Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.",
"Calendar and tasks" : "Calendari i tasques"
},

@ -86,6 +86,7 @@
"Due on %s" : "Venç en %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Punt final de WebDAV",
"Save" : "Desa",
"Calendar server" : "Servidor de calendari",
"Send invitations to attendees" : "Envia invitacions als assistents",
"Automatically generate a birthday calendar" : "Genera automàticament un calendari daniversari",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.",
"Are you accepting the invitation?" : "Accepteu la invitació?",
"Tentative" : "Provisional",
"Save" : "Desa",
"Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.",
"Calendar and tasks" : "Calendari i tasques"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Termín do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Uložit",
"Calendar server" : "Kalendářový server",
"Send invitations to attendees" : "Poslat pozvánky na adresy účastníků",
"Automatically generate a birthday calendar" : "Automaticky vytvořit kalendář s narozeninami",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
"Are you accepting the invitation?" : "Přijímáte pozvání?",
"Tentative" : "Nezávazně",
"Save" : "Uložit",
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
"Calendar and tasks" : "Kalendář a úkoly"
},

@ -119,6 +119,7 @@
"Due on %s" : "Termín do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Uložit",
"Calendar server" : "Kalendářový server",
"Send invitations to attendees" : "Poslat pozvánky na adresy účastníků",
"Automatically generate a birthday calendar" : "Automaticky vytvořit kalendář s narozeninami",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
"Are you accepting the invitation?" : "Přijímáte pozvání?",
"Tentative" : "Nezávazně",
"Save" : "Uložit",
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
"Calendar and tasks" : "Kalendář a úkoly"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"

@ -85,13 +85,13 @@ OC.L10N.register(
"Tasks" : "Opgaver",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Gem",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Send invitation til deltagere",
"Automatically generate a birthday calendar" : "Generer en fødselsdagskalender automatisk",
"Birthday calendars will be generated by a background job." : "Fødselsdagskalendere vil blive oprettet af et job, der kører i baggrunden.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Derfor vil de ikke blive synlige med det samme efter aktivering, men vil vise sig efter noget tid.",
"Are you accepting the invitation?" : "Accepter du invitationen?",
"Tentative" : "Foreløbig",
"Save" : "Gem"
"Tentative" : "Foreløbig"
},
"nplurals=2; plural=(n != 1);");

@ -83,13 +83,13 @@
"Tasks" : "Opgaver",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Gem",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Send invitation til deltagere",
"Automatically generate a birthday calendar" : "Generer en fødselsdagskalender automatisk",
"Birthday calendars will be generated by a background job." : "Fødselsdagskalendere vil blive oprettet af et job, der kører i baggrunden.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Derfor vil de ikke blive synlige med det samme efter aktivering, men vil vise sig efter noget tid.",
"Are you accepting the invitation?" : "Accepter du invitationen?",
"Tentative" : "Foreløbig",
"Save" : "Gem"
"Tentative" : "Foreløbig"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Fällig am %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-Endpunkt",
"Save" : "Speichern",
"Calendar server" : "Kalender-Server",
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
"Are you accepting the invitation?" : "Die Einladung annehmen?",
"Tentative" : "Vorläufig",
"Save" : "Speichern",
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
"Calendar and tasks" : "Kalender und Aufgaben"
},

@ -119,6 +119,7 @@
"Due on %s" : "Fällig am %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-Endpunkt",
"Save" : "Speichern",
"Calendar server" : "Kalender-Server",
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
"Are you accepting the invitation?" : "Die Einladung annehmen?",
"Tentative" : "Vorläufig",
"Save" : "Speichern",
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
"Calendar and tasks" : "Kalender und Aufgaben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Fällig am %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-Endpunkt",
"Save" : "Speichern",
"Calendar server" : "Kalender-Server",
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
"Are you accepting the invitation?" : "Die Einladung annehmen?",
"Tentative" : "Vorläufig",
"Save" : "Speichern",
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
"Calendar and tasks" : "Kalender und Aufgaben"
},

@ -119,6 +119,7 @@
"Due on %s" : "Fällig am %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-Endpunkt",
"Save" : "Speichern",
"Calendar server" : "Kalender-Server",
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
"Are you accepting the invitation?" : "Die Einladung annehmen?",
"Tentative" : "Vorläufig",
"Save" : "Speichern",
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
"Calendar and tasks" : "Kalender und Aufgaben"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Ενημερώσατε το ημερολόγιο {ημερολόγιο}",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Τερματικό WebDAV",
"Save" : "Αποθήκευση",
"Calendar server" : "Διακομιστής ημερολογίου",
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
"Tentative" : "Δοκιμαστικό",
"Save" : "Αποθήκευση",
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
"Calendar and tasks" : "Ημερολόγιο και εργασίες"
},

@ -86,6 +86,7 @@
"Due on %s" : "Ενημερώσατε το ημερολόγιο {ημερολόγιο}",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Τερματικό WebDAV",
"Save" : "Αποθήκευση",
"Calendar server" : "Διακομιστής ημερολογίου",
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
"Tentative" : "Δοκιμαστικό",
"Save" : "Αποθήκευση",
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
"Calendar and tasks" : "Ημερολόγιο και εργασίες"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -77,6 +77,7 @@ OC.L10N.register(
"Tasks" : "Taskoj",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-finpunkto",
"Save" : "Konservi",
"Calendar server" : "Kalendara servilo",
"Send invitations to attendees" : "Sendi invitojn al ĉeestantoj",
"Automatically generate a birthday calendar" : "Aŭtomate estigi datrevenan kalendaron",
@ -90,7 +91,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Bv. senpere kontakti la organizanton.",
"Are you accepting the invitation?" : "Ĉu vi akceptas la inviton?",
"Tentative" : "Nekonfirmita",
"Save" : "Konservi",
"Your attendance was updated successfully." : "Via ĉeesto sukcese ĝisdatiĝis."
},
"nplurals=2; plural=(n != 1);");

@ -75,6 +75,7 @@
"Tasks" : "Taskoj",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-finpunkto",
"Save" : "Konservi",
"Calendar server" : "Kalendara servilo",
"Send invitations to attendees" : "Sendi invitojn al ĉeestantoj",
"Automatically generate a birthday calendar" : "Aŭtomate estigi datrevenan kalendaron",
@ -88,7 +89,6 @@
"Please contact the organizer directly." : "Bv. senpere kontakti la organizanton.",
"Are you accepting the invitation?" : "Ĉu vi akceptas la inviton?",
"Tentative" : "Nekonfirmita",
"Save" : "Konservi",
"Your attendance was updated successfully." : "Via ĉeesto sukcese ĝisdatiĝis."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Finaliza el %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Extremo de WebDAV",
"Save" : "Guardar",
"Calendar server" : "Servidor de calendario",
"Send invitations to attendees" : "Enviar invitaciones a los asistentes",
"Automatically generate a birthday calendar" : "Generar automáticamente un calendario de cumpleaños",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
"Tentative" : "Provisional",
"Save" : "Guardar",
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
"Calendar and tasks" : "Calendario y tareas"
},

@ -119,6 +119,7 @@
"Due on %s" : "Finaliza el %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Extremo de WebDAV",
"Save" : "Guardar",
"Calendar server" : "Servidor de calendario",
"Send invitations to attendees" : "Enviar invitaciones a los asistentes",
"Automatically generate a birthday calendar" : "Generar automáticamente un calendario de cumpleaños",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
"Tentative" : "Provisional",
"Save" : "Guardar",
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
"Calendar and tasks" : "Calendario y tareas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "%s-(e)an epemuga",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV amaiera-puntua",
"Save" : "Gorde",
"Calendar server" : "Egutegi-zerbitzaria",
"Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali",
"Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
"Tentative" : "Behin behinekoa",
"Save" : "Gorde",
"Your attendance was updated successfully." : "Zure parte-hartzea ondo eguneratu da.",
"Calendar and tasks" : "Egutegia eta atazak"
},

@ -119,6 +119,7 @@
"Due on %s" : "%s-(e)an epemuga",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV amaiera-puntua",
"Save" : "Gorde",
"Calendar server" : "Egutegi-zerbitzaria",
"Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali",
"Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
"Tentative" : "Behin behinekoa",
"Save" : "Gorde",
"Your attendance was updated successfully." : "Zure parte-hartzea ondo eguneratu da.",
"Calendar and tasks" : "Egutegia eta atazak"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -105,6 +105,7 @@ OC.L10N.register(
"Untitled task" : "Nimetön tehtävä",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-päätepiste",
"Save" : "Tallenna",
"Calendar server" : "Kalenteripalvelin",
"Send invitations to attendees" : "Lähetä kutsut osallistujille",
"Automatically generate a birthday calendar" : "Luo syntymäpäiväkalenteri automaattisesti",
@ -117,7 +118,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Ota yhteys suoraan järjestäjään.",
"Are you accepting the invitation?" : "Hyväksytkö kutsun?",
"Tentative" : "Alustava",
"Save" : "Tallenna",
"Your attendance was updated successfully." : "Osallistumisesi päivitettiin onnistuneesti.",
"Calendar and tasks" : "Kalenteri ja tehtävät"
},

@ -103,6 +103,7 @@
"Untitled task" : "Nimetön tehtävä",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-päätepiste",
"Save" : "Tallenna",
"Calendar server" : "Kalenteripalvelin",
"Send invitations to attendees" : "Lähetä kutsut osallistujille",
"Automatically generate a birthday calendar" : "Luo syntymäpäiväkalenteri automaattisesti",
@ -115,7 +116,6 @@
"Please contact the organizer directly." : "Ota yhteys suoraan järjestäjään.",
"Are you accepting the invitation?" : "Hyväksytkö kutsun?",
"Tentative" : "Alustava",
"Save" : "Tallenna",
"Your attendance was updated successfully." : "Osallistumisesi päivitettiin onnistuneesti.",
"Calendar and tasks" : "Kalenteri ja tehtävät"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Echéance le %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Point d'accès WebDAV",
"Save" : "Enregistrer",
"Calendar server" : "Serveur de calendrier",
"Send invitations to attendees" : "Envoyer des invitations aux participants",
"Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
"Tentative" : "Provisoire",
"Save" : "Enregistrer",
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
"Calendar and tasks" : "Agenda et tâches"
},

@ -119,6 +119,7 @@
"Due on %s" : "Echéance le %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Point d'accès WebDAV",
"Save" : "Enregistrer",
"Calendar server" : "Serveur de calendrier",
"Send invitations to attendees" : "Envoyer des invitations aux participants",
"Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
"Tentative" : "Provisoire",
"Save" : "Enregistrer",
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
"Calendar and tasks" : "Agenda et tâches"
},"pluralForm" :"nplurals=2; plural=(n > 1);"

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Caduca o %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Terminación WebDAV",
"Save" : "Gardar",
"Calendar server" : "Servidor do calendario",
"Send invitations to attendees" : "Enviar convites aos asistentes",
"Automatically generate a birthday calendar" : "Xerar automaticamente o calendario de aniversarios",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Contacte directamente co organizador.",
"Are you accepting the invitation?" : "Acepta vostede o convite?",
"Tentative" : "Tentativa",
"Save" : "Gardar",
"Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.",
"Calendar and tasks" : "Calendario e tarefas"
},

@ -86,6 +86,7 @@
"Due on %s" : "Caduca o %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Terminación WebDAV",
"Save" : "Gardar",
"Calendar server" : "Servidor do calendario",
"Send invitations to attendees" : "Enviar convites aos asistentes",
"Automatically generate a birthday calendar" : "Xerar automaticamente o calendario de aniversarios",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Contacte directamente co organizador.",
"Are you accepting the invitation?" : "Acepta vostede o convite?",
"Tentative" : "Tentativa",
"Save" : "Gardar",
"Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.",
"Calendar and tasks" : "Calendario e tarefas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -86,6 +86,7 @@ OC.L10N.register(
"Completed on %s" : "הושלמה ב־%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "נקודת קצה WebDAV",
"Save" : "שמירה",
"Calendar server" : "שרת לוח שנה",
"Send invitations to attendees" : "שליחת הזמנות למשתתפים",
"Automatically generate a birthday calendar" : "יצירת יומן ימי הולדת אוטומטית",
@ -100,7 +101,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "נא ליצור קשר עם הגוף מארגן ישירות.",
"Are you accepting the invitation?" : "האם להיענות להזמנה?",
"Tentative" : "טנטטיבית",
"Save" : "שמירה",
"Your attendance was updated successfully." : "ההשתתפות שלך עודכנה בהצלחה.",
"Calendar and tasks" : "לוח שנה ומשימות"
},

@ -84,6 +84,7 @@
"Completed on %s" : "הושלמה ב־%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "נקודת קצה WebDAV",
"Save" : "שמירה",
"Calendar server" : "שרת לוח שנה",
"Send invitations to attendees" : "שליחת הזמנות למשתתפים",
"Automatically generate a birthday calendar" : "יצירת יומן ימי הולדת אוטומטית",
@ -98,7 +99,6 @@
"Please contact the organizer directly." : "נא ליצור קשר עם הגוף מארגן ישירות.",
"Are you accepting the invitation?" : "האם להיענות להזמנה?",
"Tentative" : "טנטטיבית",
"Save" : "שמירה",
"Your attendance was updated successfully." : "ההשתתפות שלך עודכנה בהצלחה.",
"Calendar and tasks" : "לוח שנה ומשימות"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Treba završiti do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV krajnja točka",
"Save" : "Spremi",
"Calendar server" : "Poslužitelj kalendara",
"Send invitations to attendees" : "Pošaljite pozive sudionicima",
"Automatically generate a birthday calendar" : "Automatski generiraj kalendar rođendana",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Izravno se obratite organizatoru.",
"Are you accepting the invitation?" : "Prihvaćate li poziv?",
"Tentative" : "Uvjetno",
"Save" : "Spremi",
"Your attendance was updated successfully." : "Vaša je prisutnost uspješno ažurirana.",
"Calendar and tasks" : "Kalendar i zadaci"
},

@ -119,6 +119,7 @@
"Due on %s" : "Treba završiti do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV krajnja točka",
"Save" : "Spremi",
"Calendar server" : "Poslužitelj kalendara",
"Send invitations to attendees" : "Pošaljite pozive sudionicima",
"Automatically generate a birthday calendar" : "Automatski generiraj kalendar rođendana",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Izravno se obratite organizatoru.",
"Are you accepting the invitation?" : "Prihvaćate li poziv?",
"Tentative" : "Uvjetno",
"Save" : "Spremi",
"Your attendance was updated successfully." : "Vaša je prisutnost uspješno ažurirana.",
"Calendar and tasks" : "Kalendar i zadaci"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"

@ -87,6 +87,7 @@ OC.L10N.register(
"Due on %s" : "%s időpontban esedékes",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV végpont",
"Save" : "Mentés",
"Calendar server" : "Naptár szerver",
"Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
"Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása",
@ -101,7 +102,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Kérlek vedd fel közvetlenül a kapcsolatot a szervezővel.",
"Are you accepting the invitation?" : "Elfogadod az meghívást?",
"Tentative" : "Valószínűleg",
"Save" : "Mentés",
"Your attendance was updated successfully." : "A részvételed frissítése sikerült.",
"Calendar and tasks" : "Naptár és feladatok"
},

@ -85,6 +85,7 @@
"Due on %s" : "%s időpontban esedékes",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV végpont",
"Save" : "Mentés",
"Calendar server" : "Naptár szerver",
"Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
"Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása",
@ -99,7 +100,6 @@
"Please contact the organizer directly." : "Kérlek vedd fel közvetlenül a kapcsolatot a szervezővel.",
"Are you accepting the invitation?" : "Elfogadod az meghívást?",
"Tentative" : "Valószínűleg",
"Save" : "Mentés",
"Your attendance was updated successfully." : "A részvételed frissítése sikerült.",
"Calendar and tasks" : "Naptár és feladatok"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -77,6 +77,7 @@ OC.L10N.register(
"Untitled task" : "Ónefnt verkefni",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-endapunktur",
"Save" : "Vista",
"Calendar server" : "Dagatalaþjónn",
"Send invitations to attendees" : "Senda boð til þátttakenda",
"Automatically generate a birthday calendar" : "Útbúa fæðingardagatal sjálfvirkt",
@ -88,7 +89,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
"Tentative" : "Bráðabirgða",
"Save" : "Vista",
"Your attendance was updated successfully." : "Mætingarstaða þín var uppfærð."
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");

@ -75,6 +75,7 @@
"Untitled task" : "Ónefnt verkefni",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV-endapunktur",
"Save" : "Vista",
"Calendar server" : "Dagatalaþjónn",
"Send invitations to attendees" : "Senda boð til þátttakenda",
"Automatically generate a birthday calendar" : "Útbúa fæðingardagatal sjálfvirkt",
@ -86,7 +87,6 @@
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
"Tentative" : "Bráðabirgða",
"Save" : "Vista",
"Your attendance was updated successfully." : "Mætingarstaða þín var uppfærð."
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
}

@ -92,6 +92,7 @@ OC.L10N.register(
"Due on %s" : "Scade il %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Terminatore WebDAV",
"Save" : "Salva",
"Calendar server" : "Server di calendari",
"Send invitations to attendees" : "Invia gli inviti ai partecipanti",
"Automatically generate a birthday calendar" : "Genera automaticamente un calendario dei compleanni",
@ -106,7 +107,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
"Are you accepting the invitation?" : "Accetti l'invito?",
"Tentative" : "Provvisorio",
"Save" : "Salva",
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
"Calendar and tasks" : "Calendario e attività"
},

@ -90,6 +90,7 @@
"Due on %s" : "Scade il %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Terminatore WebDAV",
"Save" : "Salva",
"Calendar server" : "Server di calendari",
"Send invitations to attendees" : "Invia gli inviti ai partecipanti",
"Automatically generate a birthday calendar" : "Genera automaticamente un calendario dei compleanni",
@ -104,7 +105,6 @@
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
"Are you accepting the invitation?" : "Accetti l'invito?",
"Tentative" : "Provvisorio",
"Save" : "Salva",
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
"Calendar and tasks" : "Calendario e attività"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "期限日:%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAVエンドポイント",
"Save" : "保存",
"Calendar server" : "カレンダーサーバー",
"Send invitations to attendees" : "参加者に招待状を送信する",
"Automatically generate a birthday calendar" : "自動的に誕生日カレンダーを生成する",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
"Are you accepting the invitation?" : "招待を受け入れていますか?",
"Tentative" : "暫定的",
"Save" : "保存",
"Your attendance was updated successfully." : "出席は正常に更新されました。",
"Calendar and tasks" : "カレンダーとタスク"
},

@ -119,6 +119,7 @@
"Due on %s" : "期限日:%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAVエンドポイント",
"Save" : "保存",
"Calendar server" : "カレンダーサーバー",
"Send invitations to attendees" : "参加者に招待状を送信する",
"Automatically generate a birthday calendar" : "自動的に誕生日カレンダーを生成する",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
"Are you accepting the invitation?" : "招待を受け入れていますか?",
"Tentative" : "暫定的",
"Save" : "保存",
"Your attendance was updated successfully." : "出席は正常に更新されました。",
"Calendar and tasks" : "カレンダーとタスク"
},"pluralForm" :"nplurals=1; plural=0;"

@ -119,6 +119,7 @@ OC.L10N.register(
"Due on %s" : "만료일: %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 종단점",
"Save" : "저장",
"Calendar server" : "달력 서버",
"Send invitations to attendees" : "참석자에게 초대장 보내기",
"Automatically generate a birthday calendar" : "자동으로 생일 달력 생성",
@ -133,7 +134,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
"Tentative" : "예정됨",
"Save" : "저장",
"Your attendance was updated successfully." : "참석 정보를 업데이트했습니다.",
"Calendar and tasks" : "달력과 작업"
},

@ -117,6 +117,7 @@
"Due on %s" : "만료일: %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 종단점",
"Save" : "저장",
"Calendar server" : "달력 서버",
"Send invitations to attendees" : "참석자에게 초대장 보내기",
"Automatically generate a birthday calendar" : "자동으로 생일 달력 생성",
@ -131,7 +132,6 @@
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
"Tentative" : "예정됨",
"Save" : "저장",
"Your attendance was updated successfully." : "참석 정보를 업데이트했습니다.",
"Calendar and tasks" : "달력과 작업"
},"pluralForm" :"nplurals=1; plural=0;"

@ -95,6 +95,7 @@ OC.L10N.register(
"Tasks" : "Užduotys",
"Untitled task" : "Užduotis be pavadinimo",
"WebDAV" : "WebDAV",
"Save" : "Įrašyti",
"Calendar server" : "Kalendoriaus serveris",
"Send invitations to attendees" : "Siųsti pakvietimus kviestiniams",
"Automatically generate a birthday calendar" : "Automatiškai sukurti gimtadienių kalendorių",
@ -107,7 +108,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Prašome susisiekti su organizatoriumi tiesiogiai.",
"Are you accepting the invitation?" : "Ar priimate pakvietimą?",
"Tentative" : "Preliminarus",
"Save" : "Įrašyti",
"Calendar and tasks" : "Kalendorius ir užduotys"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");

@ -93,6 +93,7 @@
"Tasks" : "Užduotys",
"Untitled task" : "Užduotis be pavadinimo",
"WebDAV" : "WebDAV",
"Save" : "Įrašyti",
"Calendar server" : "Kalendoriaus serveris",
"Send invitations to attendees" : "Siųsti pakvietimus kviestiniams",
"Automatically generate a birthday calendar" : "Automatiškai sukurti gimtadienių kalendorių",
@ -105,7 +106,6 @@
"Please contact the organizer directly." : "Prašome susisiekti su organizatoriumi tiesiogiai.",
"Are you accepting the invitation?" : "Ar priimate pakvietimą?",
"Tentative" : "Preliminarus",
"Save" : "Įrašyti",
"Calendar and tasks" : "Kalendorius ir užduotys"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
}

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Истекува на %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV крајна точка",
"Save" : "Зачувај",
"Calendar server" : "Календар сервер",
"Send invitations to attendees" : "Испрати покани на учесниците",
"Automatically generate a birthday calendar" : "Автоматско генерирање на календар со родендени",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
"Tentative" : "Прелиминарно",
"Save" : "Зачувај",
"Your attendance was updated successfully." : "Вашето присуство е успешно ажурирано.",
"Calendar and tasks" : "Календар и задачи"
},

@ -86,6 +86,7 @@
"Due on %s" : "Истекува на %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV крајна точка",
"Save" : "Зачувај",
"Calendar server" : "Календар сервер",
"Send invitations to attendees" : "Испрати покани на учесниците",
"Automatically generate a birthday calendar" : "Автоматско генерирање на календар со родендени",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
"Tentative" : "Прелиминарно",
"Save" : "Зачувај",
"Your attendance was updated successfully." : "Вашето присуство е успешно ажурирано.",
"Calendar and tasks" : "Календар и задачи"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Forfaller på %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endepunkt",
"Save" : "Lagre",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Send invitasjoner til oppmøtte",
"Automatically generate a birthday calendar" : "Lag fødelsdagskalender automatisk",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
"Tentative" : "Foreløpig",
"Save" : "Lagre",
"Your attendance was updated successfully." : "Deltakelsen din ble oppdatert.",
"Calendar and tasks" : "Kalender og oppgaver"
},

@ -86,6 +86,7 @@
"Due on %s" : "Forfaller på %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endepunkt",
"Save" : "Lagre",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Send invitasjoner til oppmøtte",
"Automatically generate a birthday calendar" : "Lag fødelsdagskalender automatisk",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
"Tentative" : "Foreløpig",
"Save" : "Lagre",
"Your attendance was updated successfully." : "Deltakelsen din ble oppdatert.",
"Calendar and tasks" : "Kalender og oppgaver"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Verwacht op %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV eindpunt",
"Save" : "Opslaan",
"Calendar server" : "Agendaserver",
"Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
"Automatically generate a birthday calendar" : "Genereer verjaardagskalender automatisch",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
"Tentative" : "Onder voorbehoud",
"Save" : "Opslaan",
"Your attendance was updated successfully." : "Je deelname is succesvol bijgewerkt.",
"Calendar and tasks" : "Agenda en taken"
},

@ -119,6 +119,7 @@
"Due on %s" : "Verwacht op %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV eindpunt",
"Save" : "Opslaan",
"Calendar server" : "Agendaserver",
"Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
"Automatically generate a birthday calendar" : "Genereer verjaardagskalender automatisch",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
"Tentative" : "Onder voorbehoud",
"Save" : "Opslaan",
"Your attendance was updated successfully." : "Je deelname is succesvol bijgewerkt.",
"Calendar and tasks" : "Agenda en taken"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Na dzień %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Adres WebDAV",
"Save" : "Zapisz",
"Calendar server" : "Serwer kalendarza",
"Send invitations to attendees" : "Wyślij zaproszenia do uczestników",
"Automatically generate a birthday calendar" : "Automatycznie generuj kalendarz urodzin",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.",
"Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?",
"Tentative" : "Niepewne",
"Save" : "Zapisz",
"Your attendance was updated successfully." : "Twoja obecność została pomyślnie zaktualizowana.",
"Calendar and tasks" : "Kalendarz i zadania"
},

@ -119,6 +119,7 @@
"Due on %s" : "Na dzień %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Adres WebDAV",
"Save" : "Zapisz",
"Calendar server" : "Serwer kalendarza",
"Send invitations to attendees" : "Wyślij zaproszenia do uczestników",
"Automatically generate a birthday calendar" : "Automatycznie generuj kalendarz urodzin",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.",
"Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?",
"Tentative" : "Niepewne",
"Save" : "Zapisz",
"Your attendance was updated successfully." : "Twoja obecność została pomyślnie zaktualizowana.",
"Calendar and tasks" : "Kalendarz i zadania"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Vence em %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Endpoint WebDAV",
"Save" : "Salvar",
"Calendar server" : "Servidor de calendário",
"Send invitations to attendees" : "Enviar convites aos participantes",
"Automatically generate a birthday calendar" : "Gerar um calendário de aniversários automaticamente",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Por favor, contate o organizador diretamente.",
"Are you accepting the invitation?" : "Você está aceitando o convite?",
"Tentative" : "Tentativa",
"Save" : "Salvar",
"Your attendance was updated successfully." : "Sua presença foi atualizada com sucesso.",
"Calendar and tasks" : "Calendário e tarefas"
},

@ -119,6 +119,7 @@
"Due on %s" : "Vence em %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Endpoint WebDAV",
"Save" : "Salvar",
"Calendar server" : "Servidor de calendário",
"Send invitations to attendees" : "Enviar convites aos participantes",
"Automatically generate a birthday calendar" : "Gerar um calendário de aniversários automaticamente",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Por favor, contate o organizador diretamente.",
"Are you accepting the invitation?" : "Você está aceitando o convite?",
"Tentative" : "Tentativa",
"Save" : "Salvar",
"Your attendance was updated successfully." : "Sua presença foi atualizada com sucesso.",
"Calendar and tasks" : "Calendário e tarefas"
},"pluralForm" :"nplurals=2; plural=(n > 1);"

@ -120,6 +120,7 @@ OC.L10N.register(
"Due on %s" : "До %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "точка подключения WebDAV",
"Save" : "Сохранить",
"Calendar server" : "Сервер календаря",
"Send invitations to attendees" : "Отправить приглашения",
"Automatically generate a birthday calendar" : "Создавать календарь дней рождения автоматически",
@ -134,7 +135,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Обратитесь к организатору напрямую.",
"Are you accepting the invitation?" : "Принять приглашение?",
"Tentative" : "Под вопросом",
"Save" : "Сохранить",
"Your attendance was updated successfully." : "Статус участия обновлён.",
"Calendar and tasks" : "Календарь и задачи"
},

@ -118,6 +118,7 @@
"Due on %s" : "До %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "точка подключения WebDAV",
"Save" : "Сохранить",
"Calendar server" : "Сервер календаря",
"Send invitations to attendees" : "Отправить приглашения",
"Automatically generate a birthday calendar" : "Создавать календарь дней рождения автоматически",
@ -132,7 +133,6 @@
"Please contact the organizer directly." : "Обратитесь к организатору напрямую.",
"Are you accepting the invitation?" : "Принять приглашение?",
"Tentative" : "Под вопросом",
"Save" : "Сохранить",
"Your attendance was updated successfully." : "Статус участия обновлён.",
"Calendar and tasks" : "Календарь и задачи"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "iscadet su %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "puntu finale WebDAV ",
"Save" : "Sarva",
"Calendar server" : "Serbidore calendàriu",
"Send invitations to attendees" : "Imbia invitos de partetzipatziones",
"Automatically generate a birthday calendar" : "Gènera in automàticu su calendàriu de cumpleannos",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Pro praghere, cuntata deretu a s'organizadore.",
"Are you accepting the invitation?" : "Cheres atzetare s'invitu?",
"Tentative" : "Intentu",
"Save" : "Sarva",
"Your attendance was updated successfully." : "Sa partetzipatzione tua est istada agiornada in manera curreta.",
"Calendar and tasks" : "Calendàrios e fainas"
},

@ -119,6 +119,7 @@
"Due on %s" : "iscadet su %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "puntu finale WebDAV ",
"Save" : "Sarva",
"Calendar server" : "Serbidore calendàriu",
"Send invitations to attendees" : "Imbia invitos de partetzipatziones",
"Automatically generate a birthday calendar" : "Gènera in automàticu su calendàriu de cumpleannos",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Pro praghere, cuntata deretu a s'organizadore.",
"Are you accepting the invitation?" : "Cheres atzetare s'invitu?",
"Tentative" : "Intentu",
"Save" : "Sarva",
"Your attendance was updated successfully." : "Sa partetzipatzione tua est istada agiornada in manera curreta.",
"Calendar and tasks" : "Calendàrios e fainas"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "Termín do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Koncový bod WebDAV",
"Save" : "Uložiť",
"Calendar server" : "Kalendárový server",
"Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
"Are you accepting the invitation?" : "Príjmate pozvánku?",
"Tentative" : "Neistý",
"Save" : "Uložiť",
"Your attendance was updated successfully." : "Vaša účasť bola aktualizovaná úspešne.",
"Calendar and tasks" : "Kalendár a úlohy"
},

@ -119,6 +119,7 @@
"Due on %s" : "Termín do %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Koncový bod WebDAV",
"Save" : "Uložiť",
"Calendar server" : "Kalendárový server",
"Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
"Are you accepting the invitation?" : "Príjmate pozvánku?",
"Tentative" : "Neistý",
"Save" : "Uložiť",
"Your attendance was updated successfully." : "Vaša účasť bola aktualizovaná úspešne.",
"Calendar and tasks" : "Kalendár a úlohy"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"

@ -89,6 +89,7 @@ OC.L10N.register(
"Due on %s" : "Poteče %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Končna točka WebDAV",
"Save" : "Shrani",
"Calendar server" : "Strežnik koledarja",
"Send invitations to attendees" : "Pošlji povabilo udeležencem",
"Automatically generate a birthday calendar" : "Samodejno ustvari koledar rojstnih dni",
@ -103,7 +104,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Z organizatorjem stopite v stik neposredno.",
"Are you accepting the invitation?" : "Ali želite sprejeti povabilo?",
"Tentative" : "Začasno",
"Save" : "Shrani",
"Your attendance was updated successfully." : "Vaša prisotnost je uspešno posodobljena.",
"Calendar and tasks" : "Koledar in naloge"
},

@ -87,6 +87,7 @@
"Due on %s" : "Poteče %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Končna točka WebDAV",
"Save" : "Shrani",
"Calendar server" : "Strežnik koledarja",
"Send invitations to attendees" : "Pošlji povabilo udeležencem",
"Automatically generate a birthday calendar" : "Samodejno ustvari koledar rojstnih dni",
@ -101,7 +102,6 @@
"Please contact the organizer directly." : "Z organizatorjem stopite v stik neposredno.",
"Are you accepting the invitation?" : "Ali želite sprejeti povabilo?",
"Tentative" : "Začasno",
"Save" : "Shrani",
"Your attendance was updated successfully." : "Vaša prisotnost je uspešno posodobljena.",
"Calendar and tasks" : "Koledar in naloge"
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"

@ -88,6 +88,7 @@ OC.L10N.register(
"Due on %s" : "Рок је %s",
"WebDAV" : "ВебДАВ",
"WebDAV endpoint" : "WebDAV крајња тачка",
"Save" : "Сачувај",
"Calendar server" : "Календар сервера",
"Send invitations to attendees" : "Пошаљи позивницу учесницима",
"Automatically generate a birthday calendar" : "Аутоматски изгенериши календар рођендана",
@ -102,7 +103,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Контактирајте директно организатора.",
"Are you accepting the invitation?" : "Да ли прихватате позивницу?",
"Tentative" : "Условна потврда",
"Save" : "Сачувај",
"Your attendance was updated successfully." : "Ваше присуство је успешно ажурирано.",
"Calendar and tasks" : "Календар и задаци"
},

@ -86,6 +86,7 @@
"Due on %s" : "Рок је %s",
"WebDAV" : "ВебДАВ",
"WebDAV endpoint" : "WebDAV крајња тачка",
"Save" : "Сачувај",
"Calendar server" : "Календар сервера",
"Send invitations to attendees" : "Пошаљи позивницу учесницима",
"Automatically generate a birthday calendar" : "Аутоматски изгенериши календар рођендана",
@ -100,7 +101,6 @@
"Please contact the organizer directly." : "Контактирајте директно организатора.",
"Are you accepting the invitation?" : "Да ли прихватате позивницу?",
"Tentative" : "Условна потврда",
"Save" : "Сачувај",
"Your attendance was updated successfully." : "Ваше присуство је успешно ажурирано.",
"Calendar and tasks" : "Календар и задаци"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"

@ -118,6 +118,7 @@ OC.L10N.register(
"Due on %s" : "Slutar den %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Spara",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Skicka inbjudan till deltagare",
"Automatically generate a birthday calendar" : "Generera en födelsedagskalender automatiskt",
@ -132,7 +133,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.",
"Are you accepting the invitation?" : "Acceptera inbjudan?",
"Tentative" : "Preliminärt",
"Save" : "Spara",
"Your attendance was updated successfully." : "Dina närvaro uppdaterades.",
"Calendar and tasks" : "Kalender och uppgifter"
},

@ -116,6 +116,7 @@
"Due on %s" : "Slutar den %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV endpoint",
"Save" : "Spara",
"Calendar server" : "Kalenderserver",
"Send invitations to attendees" : "Skicka inbjudan till deltagare",
"Automatically generate a birthday calendar" : "Generera en födelsedagskalender automatiskt",
@ -130,7 +131,6 @@
"Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.",
"Are you accepting the invitation?" : "Acceptera inbjudan?",
"Tentative" : "Preliminärt",
"Save" : "Spara",
"Your attendance was updated successfully." : "Dina närvaro uppdaterades.",
"Calendar and tasks" : "Kalender och uppgifter"
},"pluralForm" :"nplurals=2; plural=(n != 1);"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "%s tarihine kadar",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV bağlantı noktası",
"Save" : "Kaydet",
"Calendar server" : "Takvim sunucusu",
"Send invitations to attendees" : "Katılımcılara çağrıları gönder",
"Automatically generate a birthday calendar" : "Doğum günü takvimi otomatik oluşturulsun",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
"Are you accepting the invitation?" : "Çağrıyı kabul ediyor musunuz?",
"Tentative" : "Kesin değil",
"Save" : "Kaydet",
"Your attendance was updated successfully." : "Katılımınız güncellendi.",
"Calendar and tasks" : "Takvim ve görevler"
},

@ -119,6 +119,7 @@
"Due on %s" : "%s tarihine kadar",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV bağlantı noktası",
"Save" : "Kaydet",
"Calendar server" : "Takvim sunucusu",
"Send invitations to attendees" : "Katılımcılara çağrıları gönder",
"Automatically generate a birthday calendar" : "Doğum günü takvimi otomatik oluşturulsun",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
"Are you accepting the invitation?" : "Çağrıyı kabul ediyor musunuz?",
"Tentative" : "Kesin değil",
"Save" : "Kaydet",
"Your attendance was updated successfully." : "Katılımınız güncellendi.",
"Calendar and tasks" : "Takvim ve görevler"
},"pluralForm" :"nplurals=2; plural=(n > 1);"

@ -79,6 +79,7 @@ OC.L10N.register(
"Untitled task" : "Завдання без назви",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Точка доступу WebDAV",
"Save" : "Зберегти",
"Calendar server" : "Сервер календаря",
"Send invitations to attendees" : "Надіслати запрошення учасникам",
"Automatically generate a birthday calendar" : "Автоматично згенерувати календар днів народження",
@ -93,7 +94,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
"Tentative" : "Попередній",
"Save" : "Зберегти",
"Your attendance was updated successfully." : "Ваша участь успішно оновлена."
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");

@ -77,6 +77,7 @@
"Untitled task" : "Завдання без назви",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "Точка доступу WebDAV",
"Save" : "Зберегти",
"Calendar server" : "Сервер календаря",
"Send invitations to attendees" : "Надіслати запрошення учасникам",
"Automatically generate a birthday calendar" : "Автоматично згенерувати календар днів народження",
@ -91,7 +92,6 @@
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
"Tentative" : "Попередній",
"Save" : "Зберегти",
"Your attendance was updated successfully." : "Ваша участь успішно оновлена."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
}

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "到期于%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV端点",
"Save" : "保存",
"Calendar server" : "日历服务器",
"Send invitations to attendees" : "向与会者发送邀请",
"Automatically generate a birthday calendar" : "自动生成生日日历",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "请直接联系组织者。",
"Are you accepting the invitation?" : "您是否接受邀请?",
"Tentative" : "暂定",
"Save" : "保存",
"Your attendance was updated successfully." : "您的出席状态更新成功。",
"Calendar and tasks" : "日历和任务"
},

@ -119,6 +119,7 @@
"Due on %s" : "到期于%s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV端点",
"Save" : "保存",
"Calendar server" : "日历服务器",
"Send invitations to attendees" : "向与会者发送邀请",
"Automatically generate a birthday calendar" : "自动生成生日日历",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "请直接联系组织者。",
"Are you accepting the invitation?" : "您是否接受邀请?",
"Tentative" : "暂定",
"Save" : "保存",
"Your attendance was updated successfully." : "您的出席状态更新成功。",
"Calendar and tasks" : "日历和任务"
},"pluralForm" :"nplurals=1; plural=0;"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "完成日期 %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 端點",
"Save" : "儲存",
"Calendar server" : "日曆伺服器",
"Send invitations to attendees" : "發送邀請函給參加者",
"Automatically generate a birthday calendar" : "自動建立生日日曆",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "請直接聯繫絡主辦人",
"Are you accepting the invitation?" : "接受邀請嗎?",
"Tentative" : "暫定",
"Save" : "儲存",
"Your attendance was updated successfully." : "您的參與狀況成功更新",
"Calendar and tasks" : "日曆和任務"
},

@ -119,6 +119,7 @@
"Due on %s" : "完成日期 %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 端點",
"Save" : "儲存",
"Calendar server" : "日曆伺服器",
"Send invitations to attendees" : "發送邀請函給參加者",
"Automatically generate a birthday calendar" : "自動建立生日日曆",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "請直接聯繫絡主辦人",
"Are you accepting the invitation?" : "接受邀請嗎?",
"Tentative" : "暫定",
"Save" : "儲存",
"Your attendance was updated successfully." : "您的參與狀況成功更新",
"Calendar and tasks" : "日曆和任務"
},"pluralForm" :"nplurals=1; plural=0;"

@ -121,6 +121,7 @@ OC.L10N.register(
"Due on %s" : "到期於 %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 端點",
"Save" : "儲存",
"Calendar server" : "日曆伺服器",
"Send invitations to attendees" : "發送邀請函給參加者",
"Automatically generate a birthday calendar" : "自動生成生日日曆",
@ -135,7 +136,6 @@ OC.L10N.register(
"Please contact the organizer directly." : "請直接聯絡主辦人。",
"Are you accepting the invitation?" : "您接受邀請嗎?",
"Tentative" : "暫定",
"Save" : "儲存",
"Your attendance was updated successfully." : "您的參與狀態成功更新。",
"Calendar and tasks" : "日曆與工作項目"
},

@ -119,6 +119,7 @@
"Due on %s" : "到期於 %s",
"WebDAV" : "WebDAV",
"WebDAV endpoint" : "WebDAV 端點",
"Save" : "儲存",
"Calendar server" : "日曆伺服器",
"Send invitations to attendees" : "發送邀請函給參加者",
"Automatically generate a birthday calendar" : "自動生成生日日曆",
@ -133,7 +134,6 @@
"Please contact the organizer directly." : "請直接聯絡主辦人。",
"Are you accepting the invitation?" : "您接受邀請嗎?",
"Tentative" : "暫定",
"Save" : "儲存",
"Your attendance was updated successfully." : "您的參與狀態成功更新。",
"Calendar and tasks" : "日曆與工作項目"
},"pluralForm" :"nplurals=1; plural=0;"

@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
/*
* @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace OCA\DAV\Settings;
use OCA\DAV\AppInfo\Application;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\Settings\ISettings;
class AvailabilitySettings implements ISettings {
public function getForm(): TemplateResponse {
return new TemplateResponse(Application::APP_ID, 'settings-personal-availability');
}
public function getSection(): string {
return 'groupware';
}
public function getPriority(): int {
return 10;
}
}

@ -0,0 +1,39 @@
/*
* @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import * as webdav from 'webdav'
import axios from '@nextcloud/axios'
import memoize from 'lodash/fp/memoize'
import { generateRemoteUrl } from '@nextcloud/router'
import { getCurrentUser } from '@nextcloud/auth'
export const getClient = memoize((service) => {
// Add this so the server knows it is an request from the browser
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// force our axios
const patcher = webdav.getPatcher()
patcher.patch('request', axios)
return webdav.createClient(
generateRemoteUrl(`dav/${service}/${getCurrentUser().uid}`)
)
})

@ -0,0 +1,147 @@
/**
* @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import { getClient } from '../dav/client'
import ICAL from 'ical.js'
import logger from './logger'
import { parseXML } from 'webdav/dist/node/tools/dav'
import { v4 as uuidv4 } from 'uuid'
export function getEmptySlots() {
return {
MO: [],
TU: [],
WE: [],
TH: [],
FR: [],
SA: [],
SU: [],
}
}
export async function findScheduleInboxAvailability() {
const client = getClient('calendars')
const response = await client.customRequest('inbox', {
method: 'PROPFIND',
data: `<?xml version="1.0"?>
<x0:propfind xmlns:x0="DAV:">
<x0:prop>
<x1:calendar-availability xmlns:x1="urn:ietf:params:xml:ns:caldav"/>
</x0:prop>
</x0:propfind>`
})
const xml = await parseXML(response.data)
if (!xml) {
return undefined
}
const availability = xml?.multistatus?.response[0]?.propstat?.prop['calendar-availability']
if (!availability) {
return undefined
}
const parsedIcal = ICAL.parse(availability)
const vcalendarComp = new ICAL.Component(parsedIcal)
const vavailabilityComp = vcalendarComp.getFirstSubcomponent('vavailability')
const availableComps = vavailabilityComp.getAllSubcomponents('available')
// Combine all AVAILABLE blocks into a week of slots
const slots = getEmptySlots()
availableComps.forEach((availableComp) => {
const start = availableComp.getFirstProperty('dtstart').getFirstValue().toJSDate()
const end = availableComp.getFirstProperty('dtend').getFirstValue().toJSDate()
const rrule = availableComp.getFirstProperty('rrule')
if (rrule.getFirstValue().freq !== 'WEEKLY') {
logger.warn('rrule not supported', {
rrule: rrule.toICALString(),
})
return
}
rrule.getFirstValue().getComponent('BYDAY').forEach(day => {
slots[day].push({
start,
end,
})
})
})
return {
slots,
}
}
export async function saveScheduleInboxAvailability(slots, timezoneId) {
const all = [...Object.keys(slots).flatMap(dayId => slots[dayId].map(slot => ({
...slot,
day: dayId,
})))]
const vavailabilityComp = new ICAL.Component('vavailability')
// TODO: deduplicate slots that occur on more than one day
all.map(slot => {
const availableComp = new ICAL.Component('available')
// Define DTSTART and DTEND
// TODO: tz? moment.tz(dateTime, timezone).toDate()
const startTimeProp = availableComp.addPropertyWithValue('dtstart', ICAL.Time.fromJSDate(slot.start, false))
startTimeProp.setParameter('tzid', timezoneId)
const endTimeProp = availableComp.addPropertyWithValue('dtend', ICAL.Time.fromJSDate(slot.end, false))
endTimeProp.setParameter('tzid', timezoneId)
// Add mandatory UID
availableComp.addPropertyWithValue('uid', uuidv4())
// TODO: add optional summary
// Define RRULE
availableComp.addPropertyWithValue('rrule', {
freq: 'WEEKLY',
byday: slot.day,
})
return availableComp
}).map(vavailabilityComp.addSubcomponent.bind(vavailabilityComp))
const vcalendarComp = new ICAL.Component('vcalendar')
vcalendarComp.addSubcomponent(vavailabilityComp)
logger.debug('New availability ical created', {
asObject: vcalendarComp,
asString: vcalendarComp.toString(),
})
const client = getClient('calendars')
await client.customRequest('inbox', {
method: 'PROPPATCH',
data: `<?xml version="1.0"?>
<x0:propertyupdate xmlns:x0="DAV:">
<x0:set>
<x0:prop>
<x1:calendar-availability xmlns:x1="urn:ietf:params:xml:ns:caldav">${vcalendarComp.toString()}</x1:calendar-availability>
</x0:prop>
</x0:set>
</x0:propertyupdate>`
})
}

@ -0,0 +1,28 @@
/*
* @copyright 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @author 2021 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import { getLoggerBuilder } from '@nextcloud/logger'
const logger = getLoggerBuilder()
.setApp('dav')
.detectUser()
.build()
export default logger

@ -0,0 +1,9 @@
import Vue from 'vue'
import { translate } from '@nextcloud/l10n'
import Availability from './views/Availability'
Vue.prototype.$t = translate
const View = Vue.extend(Availability);
(new View({})).$mount('#settings-personal-availability')

@ -0,0 +1,223 @@
<template>
<div class="section">
<h2>{{ $t('dav', 'Availability') }}</h2>
<p>
{{ $t('dav', 'If you configure your working hours, other users will see when you are out of office when they book a meeting.') }}
</p>
<div class="time-zone">
<strong>
{{ $t('calendar', 'Please select a time zone:') }}
</strong>
<TimezonePicker v-model="timezone" />
</div>
<div class="grid-table">
<template v-for="day in daysOfTheWeek">
<div :key="`day-label-${day.id}`" class="label-weekday">
{{ day.displayName }}
</div>
<div :key="`day-slots-${day.id}`" class="availability-slots">
<div class="availability-slot">
<template v-for="(slot, idx) in day.slots">
<div :key="`slot-${day.id}-${idx}`">
<DatetimePicker
v-model="slot.start"
type="time"
class="start-date"
format="H:mm" />
{{ $t('dav', 'to') }}
<DatetimePicker
v-model="slot.end"
type="time"
class="end-date"
format="H:mm" />
<button :key="`slot-${day.id}-${idx}-btn`"
class="icon-delete delete-slot button"
:title="$t('dav', 'Delete slot')"
@click="deleteSlot(day, idx)" />
</div>
</template>
</div>
<button :disabled="loading"
class="add-another button"
@click="addSlot(day)">
{{ $t('dav', 'Add slot') }}
</button>
</div>
</template>
</div>
<button :disabled="loading || saving"
class="button"
@click="save">
{{ $t('dav', 'Save') }}
</button>
</div>
</template>
<script>
import DatetimePicker from '@nextcloud/vue/dist/Components/DatetimePicker'
import {
findScheduleInboxAvailability,
getEmptySlots,
saveScheduleInboxAvailability,
} from '../service/CalendarService'
import { getFirstDay } from '@nextcloud/l10n'
import jstz from 'jstimezonedetect'
import TimezonePicker from '@nextcloud/vue/dist/Components/TimezonePicker'
export default {
name: 'Availability',
components: {
DatetimePicker,
TimezonePicker,
},
data() {
// Try to determine the current timezone, and fall back to UTC otherwise
const defaultTimezone = jstz.determine()
const defaultTimezoneId = defaultTimezone ? defaultTimezone.name() : 'UTC'
const moToSa = [
{
id: 'MO',
displayName: this.$t('dav', 'Monday'),
slots: [],
},
{
id: 'TU',
displayName: this.$t('dav', 'Tuesday'),
slots: [],
},
{
id: 'WE',
displayName: this.$t('dav', 'Wednesday'),
slots: [],
},
{
id: 'TH',
displayName: this.$t('dav', 'Thursday'),
slots: [],
},
{
id: 'FR',
displayName: this.$t('dav', 'Friday'),
slots: [],
},
{
id: 'SA',
displayName: this.$t('dav', 'Saturday'),
slots: [],
},
]
const sunday = {
id: 'SU',
displayName: this.$t('dav', 'Sunday'),
slots: [],
}
const daysOfTheWeek = getFirstDay() === 1 ? [...moToSa, sunday] : [sunday, ...moToSa]
return {
loading: true,
saving: false,
timezone: defaultTimezoneId,
daysOfTheWeek,
}
},
async mounted() {
try {
const { slots } = await findScheduleInboxAvailability()
if (slots) {
this.daysOfTheWeek.forEach(day => {
day.slots.push(...slots[day.id])
})
}
console.info('availability loaded', this.daysOfTheWeek)
} catch (e) {
console.error('could not load existing availability', e)
// TODO: show a nice toast
} finally {
this.loading = false
}
},
methods: {
addSlot(day) {
const start = new Date()
start.setHours(9)
start.setMinutes(0)
start.setSeconds(0)
const end = new Date()
end.setHours(17)
end.setMinutes(0)
end.setSeconds(0)
day.slots.push({
start,
end,
})
},
deleteSlot(day, idx) {
day.slots.splice(idx, 1)
},
async save() {
try {
this.saving = true
const slots = getEmptySlots()
this.daysOfTheWeek.forEach(day => {
day.slots.forEach(slot => slots[day.id].push(slot))
})
await saveScheduleInboxAvailability(slots, this.timezone)
// TODO: show a nice toast
} catch (e) {
console.error('could not save availability', e)
// TODO: show a nice toast
} finally {
this.saving = false
}
},
},
}
</script>
<style lang="scss" scoped>
.availability-day {
padding: 0 10px 10px 10px;
position: absolute;
}
.availability-slots {
display: flex;
}
.availability-slot {
display: flex;
flex-direction: column;
}
::v-deep .mx-input-wrapper {
width: 85px;
}
::v-deep .mx-datepicker {
width: 110px;
}
::v-deep .multiselect {
border: 1px solid var(--color-border-dark);
width: 120px;
}
.time-zone {
padding: 12px 12px 12px 0;
}
.grid-table {
display: grid;
grid-template-columns: min-content auto;
}
.button {
align-self: flex-end;
}
.label-weekday {
padding: 8px 23px 14px 0;
position: relative;
display: inline-flex;
}
.delete-slot {
background-color: transparent;
border: none;
padding: 15px;
}
</style>

@ -0,0 +1,29 @@
<?php
/**
* @copyright 2017, Georg Ehrke <oc.list@georgehrke.com>
*
* @author Georg Ehrke <oc.list@georgehrke.com>
* @author François Freitag <mail@franek.fr>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
script('dav', 'settings-personal-availability');
?>
<div id="settings-personal-availability"></div>

@ -25,6 +25,7 @@ const path = require('path')
module.exports = {
entry: {
'settings-admin-caldav': path.join(__dirname, 'src', 'settings.js'),
'settings-personal-availability': path.join(__dirname, 'src', 'settings-personal-availability.js'),
},
output: {
path: path.resolve(__dirname, './js'),

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "Aby měl pověření upravovat toto nastavení, je třeba, aby přihlášený uživatel byl správce.",
"Email confirmation" : "Potvrzení e-mailu",
"To enable the email address %s please click the button below." : "Pokud chcete povolit e-mailovou adresu %s, klikněte na tlačítko níže.",
"Confirm" : "Potvrdit",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "Aby měl pověření upravovat toto nastavení, je třeba, aby přihlášený uživatel byl správce.",
"Email confirmation" : "Potvrzení e-mailu",
"To enable the email address %s please click the button below." : "Pokud chcete povolit e-mailovou adresu %s, klikněte na tlačítko níže.",
"Confirm" : "Potvrdit",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
"Email confirmation" : "E-Mail-Bestätigung",
"To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicken Sie bitte auf die untenstehende Schaltfläche.",
"Confirm" : "Bestätigen",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "Der angemeldete Benutzer muss ein Administrator sein oder die Berechtigung haben, diese Einstellung zu bearbeiten.",
"Email confirmation" : "E-Mail-Bestätigung",
"To enable the email address %s please click the button below." : "Um die E-Mail-Adresse %s zu bestätigen, klicken Sie bitte auf die untenstehende Schaltfläche.",
"Confirm" : "Bestätigen",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "Zalogowany użytkownik musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
"Email confirmation" : "Potwierdzenie e-mailem",
"To enable the email address %s please click the button below." : "Aby włączyć adres e-mail %s, kliknij poniższy przycisk.",
"Confirm" : "Potwierdź",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "Zalogowany użytkownik musi być administratorem lub mieć uprawnienia do edycji tego ustawienia.",
"Email confirmation" : "Potwierdzenie e-mailem",
"To enable the email address %s please click the button below." : "Aby włączyć adres e-mail %s, kliknij poniższy przycisk.",
"Confirm" : "Potwierdź",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na prístup k tomuto nastaveniu.",
"Email confirmation" : "Overenie e-mailu",
"To enable the email address %s please click the button below." : "Pre povolenie e-mailovej adresy %s prosím kliknite na tlačítko nižšie.",
"Confirm" : "Potvrdiť",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "Prihlásený používateľ musí byť správcom, alebo musí mať špeciálne právo na prístup k tomuto nastaveniu.",
"Email confirmation" : "Overenie e-mailu",
"To enable the email address %s please click the button below." : "Pre povolenie e-mailovej adresy %s prosím kliknite na tlačítko nižšie.",
"Confirm" : "Potvrdiť",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "Oturum açmış kullanıcı bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
"Email confirmation" : "E-posta doğrulaması",
"To enable the email address %s please click the button below." : "%s e-posta adresini doğrulamak için aşağıdaki düğmeye tıklayın.",
"Confirm" : "Onayla",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "Oturum açmış kullanıcı bir yönetici olmalı ya da bu ayarı düzenleme izni olmalıdır.",
"Email confirmation" : "E-posta doğrulaması",
"To enable the email address %s please click the button below." : "%s e-posta adresini doğrulamak için aşağıdaki düğmeye tıklayın.",
"Confirm" : "Onayla",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "已登录用户必须是一名管理员或拥有编辑此设置的授权",
"Email confirmation" : "电子邮件确认",
"To enable the email address %s please click the button below." : "要启用电子邮件地址 %s 请点击下方按钮。",
"Confirm" : "确认",

@ -1,4 +1,5 @@
{ "translations": {
"Logged in user must be an administrator or have authorization to edit this setting." : "已登录用户必须是一名管理员或拥有编辑此设置的授权",
"Email confirmation" : "电子邮件确认",
"To enable the email address %s please click the button below." : "要启用电子邮件地址 %s 请点击下方按钮。",
"Confirm" : "确认",

@ -1,6 +1,7 @@
OC.L10N.register(
"provisioning_api",
{
"Logged in user must be an administrator or have authorization to edit this setting." : "登錄用戶必須是管理員或有編輯此設置的授權。",
"Email confirmation" : "電郵地址確認",
"To enable the email address %s please click the button below." : "請單擊下面的按鈕以啟用電郵地址 %s。",
"Confirm" : "確認",

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save