├── l10n ├── .gitkeep ├── th.json ├── az.json ├── km.json ├── mn.json ├── ms_MY.json ├── ps.json ├── af.json ├── fo.json ├── hy.json ├── ia.json ├── ka_GE.json ├── kn.json ├── lb.json ├── sq.json ├── ta.json ├── ur_PK.json ├── bn_BD.json ├── nn_NO.json ├── vi.json ├── id.json ├── ka.json ├── lo.json ├── ast.json ├── th.js ├── az.js ├── km.js ├── mn.js ├── ms_MY.js ├── ps.js ├── si.json ├── af.js ├── fo.js ├── hy.js ├── ia.js ├── ka_GE.js ├── kab.json ├── kn.js ├── lb.js ├── sq.js ├── ta.js ├── ur_PK.js ├── bn_BD.js ├── es_419.json ├── es_AR.json ├── es_CL.json ├── es_CO.json ├── es_CR.json ├── es_DO.json ├── es_GT.json ├── es_HN.json ├── es_NI.json ├── es_PA.json ├── es_PE.json ├── es_PR.json ├── es_PY.json ├── es_SV.json ├── es_UY.json ├── nn_NO.js ├── vi.js ├── id.js ├── ka.js ├── lo.js ├── ast.js ├── si.js ├── es_MX.json ├── kab.js ├── cy_GB.json ├── es_419.js ├── es_AR.js ├── es_CL.js ├── es_CO.js ├── es_CR.js ├── es_DO.js ├── es_GT.js ├── es_HN.js ├── es_NI.js ├── es_PA.js ├── es_PE.js ├── es_PR.js ├── es_PY.js ├── es_SV.js ├── es_UY.js ├── bs.json ├── es_MX.js ├── cy_GB.js ├── bs.js ├── be.json ├── be.js ├── oc.json ├── oc.js ├── zh_CN.json ├── zh_TW.json ├── zh_HK.json ├── ja.json ├── ko.json ├── zh_CN.js ├── zh_TW.js ├── zh_HK.js ├── ja.js ├── ko.js ├── da.json ├── en_GB.json ├── he.json ├── bg.json ├── nb.json ├── sw.json ├── ug.json ├── da.js ├── is.json ├── ar.json ├── eo.json ├── fa.json ├── mk.json ├── sv.json ├── uz.json ├── en_GB.js ├── he.js ├── bg.js ├── nb.js ├── nl.json ├── sw.js ├── ug.js ├── is.js ├── ar.js ├── eo.js ├── fa.js ├── ga.json ├── mk.js ├── sv.js ├── uz.js ├── de.json ├── lv.json ├── nl.js ├── de_DE.json ├── sc.json ├── es.json ├── fi.json ├── fr.json ├── gl.json ├── hr.json ├── es_EC.json ├── et_EE.json ├── pt_BR.json ├── sl.json ├── tr.json ├── eu.json ├── ga.js ├── hu.json ├── it.json ├── pt_PT.json ├── ro.json ├── sk.json ├── ca.json ├── lv.js ├── de.js ├── cs.json ├── de_DE.js ├── fr.js ├── sc.js ├── sr.json ├── el.json ├── es.js ├── fi.js ├── gl.js ├── es_EC.js ├── hr.js ├── et_EE.js ├── eu.js ├── pt_BR.js ├── pt_PT.js ├── ro.js ├── sk.js ├── sl.js ├── tr.js ├── hu.js ├── it.js ├── ca.js ├── cs.js ├── el.js ├── sr.js ├── ru.json ├── lt_LT.json ├── ru.js ├── uk.json ├── lt_LT.js ├── pl.json ├── uk.js ├── pl.js ├── br.json └── br.js ├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── reuse.yml │ ├── lint-info-xml.yml │ ├── dependabot-approve-merge.yml │ ├── lint-php-cs.yml │ ├── update-nextcloud-ocp-approve-merge.yml │ ├── lint-php.yml │ ├── psalm-matrix.yml │ ├── update-nextcloud-ocp-matrix.yml │ └── appstore-build-publish.yml ├── docs ├── demo.png └── demo.png.license ├── .tx ├── config.license └── config ├── tests ├── psalm-baseline.xml.license └── psalm-baseline.xml ├── AUTHORS.md ├── .php-cs-fixer.dist.php ├── README.md ├── psalm.xml ├── .gitignore ├── REUSE.toml ├── composer.json ├── LICENSES ├── MIT.txt └── CC0-1.0.txt ├── appinfo └── info.xml ├── lib ├── AppInfo │ └── Application.php ├── Notifier.php └── EventListener.php ├── Makefile ├── CHANGELOG.md └── composer.lock /l10n/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | /appinfo/info.xml @nickvergessen 2 | -------------------------------------------------------------------------------- /docs/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/event_update_notification/HEAD/docs/demo.png -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "ส่วนตัว" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Şəxsi" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "ផ្ទាល់​ខ្លួន" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Хувийн" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ms_MY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Peribadi" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/ps.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "شخصي" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Persoonlik" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/fo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Persónligt" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/hy.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Անձնական" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "პირადი" 3 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 4 | } -------------------------------------------------------------------------------- /l10n/kn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "ವೈಯಕ್ತಿಕ" 3 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 4 | } -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Perséinlech" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personale" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "தனிப்பட்ட" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ur_PK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "شخصی" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "ব্যক্তিগত" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personleg" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /docs/demo.png.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: CC0-1.0 3 | -------------------------------------------------------------------------------- /.tx/config.license: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: CC0-1.0 3 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Bận", 3 | "Personal" : "Cá nhân" 4 | },"pluralForm" :"nplurals=1; plural=0;" 5 | } -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Sibuk", 3 | "Personal" : "Personal" 4 | },"pluralForm" :"nplurals=1; plural=0;" 5 | } -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Busy", 3 | "Personal" : "Personal" 4 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 5 | } -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Busy", 3 | "Personal" : "ສ່ວນບຸກຄົນ" 4 | },"pluralForm" :"nplurals=1; plural=0;" 5 | } -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Ocupáu", 3 | "Personal" : "Personal" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "ส่วนตัว" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /tests/psalm-baseline.xml.license: -------------------------------------------------------------------------------- 1 | SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors 2 | SPDX-License-Identifier: CC0-1.0 3 | -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Şəxsi" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "ផ្ទាល់​ខ្លួន" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Хувийн" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ms_MY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Peribadi" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/ps.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "شخصي" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "කාර්යබහුලයි", 3 | "Personal" : "පුද්ගලික" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Persoonlik" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/fo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Persónligt" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/hy.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Անձնական" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "პირადი" 5 | }, 6 | "nplurals=2; plural=(n!=1);"); 7 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Ur yestuf ara", 3 | "Personal" : "Udmawan" 4 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 5 | } -------------------------------------------------------------------------------- /l10n/kn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "ವೈಯಕ್ತಿಕ" 5 | }, 6 | "nplurals=2; plural=(n > 1);"); 7 | -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Perséinlech" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personale" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "தனிப்பட்ட" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ur_PK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "شخصی" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "ব্যক্তিগত" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Personal" : "Personal" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personleg" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Bận", 5 | "Personal" : "Cá nhân" 6 | }, 7 | "nplurals=1; plural=0;"); 8 | -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Sibuk", 5 | "Personal" : "Personal" 6 | }, 7 | "nplurals=1; plural=0;"); 8 | -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Busy", 5 | "Personal" : "Personal" 6 | }, 7 | "nplurals=2; plural=(n!=1);"); 8 | -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Busy", 5 | "Personal" : "ສ່ວນບຸກຄົນ" 6 | }, 7 | "nplurals=1; plural=0;"); 8 | -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Ocupáu", 5 | "Personal" : "Personal" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "කාර්යබහුලයි", 5 | "Personal" : "පුද්ගලික" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Ocupado", 3 | "Personal" : "Personal" 4 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 5 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Ur yestuf ara", 5 | "Personal" : "Udmawan" 6 | }, 7 | "nplurals=2; plural=(n != 1);"); 8 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Prysur", 3 | "Personal" : "Personol" 4 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 5 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Personal" : "Personal" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | # Authors 7 | 8 | - Joas Schilling 9 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Zauzet", 3 | "Personal" : "Osobno" 4 | },"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);" 5 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Ocupado", 5 | "Personal" : "Personal" 6 | }, 7 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 8 | -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Prysur", 5 | "Personal" : "Personol" 6 | }, 7 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 8 | -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Zauzet", 5 | "Personal" : "Osobno" 6 | }, 7 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 8 | -------------------------------------------------------------------------------- /l10n/be.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Busy" : "Заняты", 3 | "Personal" : "Асабістыя" 4 | },"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);" 5 | } -------------------------------------------------------------------------------- /l10n/be.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Busy" : "Заняты", 5 | "Personal" : "Асабістыя" 6 | }, 7 | "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);"); 8 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: composer 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | day: saturday 8 | time: "03:00" 9 | timezone: Europe/Paris 10 | open-pull-requests-limit: 10 11 | labels: 12 | - 3. to review 13 | - dependencies 14 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th 4 | 5 | [o:nextcloud:p:nextcloud:r:event_update_notification] 6 | file_filter = translationfiles//event_update_notification.po 7 | source_file = translationfiles/templates/event_update_notification.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificacion per mesa a jorn d’eveniment del calendièr", 3 | "{actor} created {event} in {calendar}" : "{actor} creèt {event} dins {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} suprimèt {event} a partir de {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} actualizèt {event} dins {calendar}", 6 | "Busy" : "Ocupat", 7 | "Personal" : "Personal" 8 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 9 | } -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | getFinder() 17 | ->notPath('build') 18 | ->notPath('l10n') 19 | ->notPath('node_modules') 20 | ->notPath('src') 21 | ->notPath('vendor') 22 | ->in(__DIR__); 23 | return $config; 24 | -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificacion per mesa a jorn d’eveniment del calendièr", 5 | "{actor} created {event} in {calendar}" : "{actor} creèt {event} dins {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} suprimèt {event} a partir de {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} actualizèt {event} dins {calendar}", 8 | "Busy" : "Ocupat", 9 | "Personal" : "Personal" 10 | }, 11 | "nplurals=2; plural=(n > 1);"); 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | [![REUSE status](https://api.reuse.software/badge/github.com/nextcloud/event_update_notification)](https://api.reuse.software/info/github.com/nextcloud/event_update_notification) 7 | 8 | # Notifications for calendar event actions 9 | 10 | 🆕 New event was created 11 | 12 | ✏️ Event has been updated 13 | 14 | 🗑 Event has been deleted 15 | 16 | ![](https://github.com/nickv-nextcloud/event_update_notification/raw/main/docs/demo.png) 17 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "日历事件更新通知", 3 | "{actor} created {event} in {calendar}" : "{actor} 在 {calendar} 中新增了 {event} 事件", 4 | "{actor} deleted {event} from {calendar}" : "{actor} 从 {calendar} 删除了 {event}", 5 | "{actor} updated {event} in {calendar}" : "{actor} 在 {calendar} 中更新了 {event}", 6 | "Busy" : "忙碌", 7 | "Personal" : "个人", 8 | "Notifications for calendar event updates" : "日历事件更新的通知", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "当添加、修改或删除一个共享日历事件时收到通知" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/zh_TW.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "行事曆活動項目更新通知", 3 | "{actor} created {event} in {calendar}" : "{actor}在{calendar}行事曆中新增了{event}活動項目", 4 | "{actor} deleted {event} from {calendar}" : "{actor}在{calendar}行事曆中刪除了{event}活動項目", 5 | "{actor} updated {event} in {calendar}" : "{actor}在{calendar}行事曆中變更了{event}活動項目", 6 | "Busy" : "忙碌中", 7 | "Personal" : "個人", 8 | "Notifications for calendar event updates" : "日曆活動項目更新通知", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "在共享行事曆中新增、更改與刪除活動項目時接受通知" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "日曆活動項目更新通知", 3 | "{actor} created {event} in {calendar}" : "{actor} 在 {calendar} 日曆中新增了 {event} 活動項目", 4 | "{actor} deleted {event} from {calendar}" : "{actor} 從 {calendar} 日曆中刪除了 {event} 活動項目", 5 | "{actor} updated {event} in {calendar}" : "{actor} 在 {calendar} 日曆中變更了 {event} 活動項目", 6 | "Busy" : "忙碌", 7 | "Personal" : "個人", 8 | "Notifications for calendar event updates" : "日曆活動項目更新通知", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "在共享日曆中新增、更改與刪除活動項目時接受通知" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "カレンダーイベントの更新通知", 3 | "{actor} created {event} in {calendar}" : "{actor}は{calendar}に{event}を作成しました", 4 | "{actor} deleted {event} from {calendar}" : "{actor} {calendar}から{event}を削除しました", 5 | "{actor} updated {event} in {calendar}" : "{actor} {calendar}の{event}を更新しました", 6 | "Busy" : "ビジー", 7 | "Personal" : "個人", 8 | "Notifications for calendar event updates" : "カレンダーイベントの更新に関する通知", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "共有カレンダーの予定が追加、変更、または削除されたときに通知を受け取ります。" 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "달력 행사 업데이트 알림", 3 | "{actor} created {event} in {calendar}" : "{actor}님이 달력 {calendar}에 {event}을(를) 생성함", 4 | "{actor} deleted {event} from {calendar}" : "{actor}님이 달력 {calendar}에서 {event}을(를) 삭제함", 5 | "{actor} updated {event} in {calendar}" : "{actor}님이 달력 {calendar}의 {event}을(를) 업데이트함", 6 | "Busy" : "바쁨", 7 | "Personal" : "개인", 8 | "Notifications for calendar event updates" : "달력 행사 업데이트 알림", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "공유 달력에 행사가 추가, 변경, 삭제되었을 때 알립니다." 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "日历事件更新通知", 5 | "{actor} created {event} in {calendar}" : "{actor} 在 {calendar} 中新增了 {event} 事件", 6 | "{actor} deleted {event} from {calendar}" : "{actor} 从 {calendar} 删除了 {event}", 7 | "{actor} updated {event} in {calendar}" : "{actor} 在 {calendar} 中更新了 {event}", 8 | "Busy" : "忙碌", 9 | "Personal" : "个人", 10 | "Notifications for calendar event updates" : "日历事件更新的通知", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "当添加、修改或删除一个共享日历事件时收到通知" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/zh_TW.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "行事曆活動項目更新通知", 5 | "{actor} created {event} in {calendar}" : "{actor}在{calendar}行事曆中新增了{event}活動項目", 6 | "{actor} deleted {event} from {calendar}" : "{actor}在{calendar}行事曆中刪除了{event}活動項目", 7 | "{actor} updated {event} in {calendar}" : "{actor}在{calendar}行事曆中變更了{event}活動項目", 8 | "Busy" : "忙碌中", 9 | "Personal" : "個人", 10 | "Notifications for calendar event updates" : "日曆活動項目更新通知", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "在共享行事曆中新增、更改與刪除活動項目時接受通知" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "日曆活動項目更新通知", 5 | "{actor} created {event} in {calendar}" : "{actor} 在 {calendar} 日曆中新增了 {event} 活動項目", 6 | "{actor} deleted {event} from {calendar}" : "{actor} 從 {calendar} 日曆中刪除了 {event} 活動項目", 7 | "{actor} updated {event} in {calendar}" : "{actor} 在 {calendar} 日曆中變更了 {event} 活動項目", 8 | "Busy" : "忙碌", 9 | "Personal" : "個人", 10 | "Notifications for calendar event updates" : "日曆活動項目更新通知", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "在共享日曆中新增、更改與刪除活動項目時接受通知" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "カレンダーイベントの更新通知", 5 | "{actor} created {event} in {calendar}" : "{actor}は{calendar}に{event}を作成しました", 6 | "{actor} deleted {event} from {calendar}" : "{actor} {calendar}から{event}を削除しました", 7 | "{actor} updated {event} in {calendar}" : "{actor} {calendar}の{event}を更新しました", 8 | "Busy" : "ビジー", 9 | "Personal" : "個人", 10 | "Notifications for calendar event updates" : "カレンダーイベントの更新に関する通知", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "共有カレンダーの予定が追加、変更、または削除されたときに通知を受け取ります。" 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "달력 행사 업데이트 알림", 5 | "{actor} created {event} in {calendar}" : "{actor}님이 달력 {calendar}에 {event}을(를) 생성함", 6 | "{actor} deleted {event} from {calendar}" : "{actor}님이 달력 {calendar}에서 {event}을(를) 삭제함", 7 | "{actor} updated {event} in {calendar}" : "{actor}님이 달력 {calendar}의 {event}을(를) 업데이트함", 8 | "Busy" : "바쁨", 9 | "Personal" : "개인", 10 | "Notifications for calendar event updates" : "달력 행사 업데이트 알림", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "공유 달력에 행사가 추가, 변경, 삭제되었을 때 알립니다." 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/da.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Besked om kalenderændring", 3 | "{actor} created {event} in {calendar}" : "{actor} oprettede {event} i {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} slettede {event} fra {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} opdaterede {event} i {calendar}", 6 | "Busy" : "Optaget", 7 | "Personal" : "Personlig", 8 | "Notifications for calendar event updates" : "Beskeder om kalenderændringer", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Få besked, når der tilføjes, ændres eller slettes en begivenhed i en delt kalender" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /psalm.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /l10n/en_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Calendar event update notifications", 3 | "{actor} created {event} in {calendar}" : "{actor} created {event} in {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} deleted {event} from {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} updated {event} in {calendar}", 6 | "Busy" : "Busy", 7 | "Personal" : "Personal", 8 | "Notifications for calendar event updates" : "Notifications for calendar event updates", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receive a notification when an event in a shared calendar was added, modified or deleted." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "הודעות עדכוני אירועי לוח שנה", 3 | "{actor} created {event} in {calendar}" : "{event} נוצר על ידי {actor} ב{calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{event} נמחק על ידי {actor} מ{calendar}", 5 | "{actor} updated {event} in {calendar}" : "{event} עודכן על ידי {actor} ב{calendar}", 6 | "Busy" : "עסוק", 7 | "Personal" : "אישי", 8 | "Notifications for calendar event updates" : "התראות על עדכונים של אירועים ביומן", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "קבלת התראה כאשר נוסף, נערך או נמחק אירוע ביומן משותף." 10 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 11 | } -------------------------------------------------------------------------------- /l10n/bg.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Известия за актуализиране на събития в календар", 3 | "{actor} created {event} in {calendar}" : "{actor} създаде {event} в {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} изтри {event} в {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} промени {event} в {calendar}", 6 | "Busy" : "Зает", 7 | "Personal" : "Лични", 8 | "Notifications for calendar event updates" : "Известия за промени по събития от календар", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Получаване на известие, когато събитие в споделен календар е добавено, променено или изтрито" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/nb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Oppdateringsvarsel for kalender hendelse", 3 | "{actor} created {event} in {calendar}" : "{actor} opprettet {event} i {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} slettet {event} fra {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} oppdaterte {event} i {calendar}", 6 | "Busy" : "Opptatt", 7 | "Personal" : "Personlig", 8 | "Notifications for calendar event updates" : "Oppdateringsvarsel for hendelser i kalender ", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Motta varsel når en hendelse i en delt kalender er lagt til, endret eller slettet." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/sw.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Arifa ya sasisho la tukio la kalenda", 3 | "{actor} created {event} in {calendar}" : "{actor}ametengeneza {event}katika{calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor}amefuta{event}kutoka {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor}amesasisha{event}katika{calendar}", 6 | "Busy" : "Bize", 7 | "Personal" : "Binafsi", 8 | "Notifications for calendar event updates" : "Arifa za masasisho ya matukio ya kalenda", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Pokea arifa wakati tukio katika kalenda iliyoshirikiwa liliongezwa, kurekebishwa au kufutwa." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/ug.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "كالېندار پائالىيىتى يېڭىلاش ئۇقتۇرۇشى", 3 | "{actor} created {event} in {calendar}" : "{actor} كالېندار {calendar}دا {event} قۇردى", 4 | "{actor} deleted {event} from {calendar}" : "{actor} ئۆچۈرۈلگەن {event} {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} يېڭىلانغان {event} {calendar}", 6 | "Busy" : "ئالدىراش", 7 | "Personal" : "شەخسىي", 8 | "Notifications for calendar event updates" : "كالېندار ھادىسىسىنى يېڭىلاش ھەققىدىكى ئۇقتۇرۇش", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "ئورتاق كالېنداردىكى ھادىسە قوشۇلغان ، ئۆزگەرتىلگەن ياكى ئۆچۈرۈلگەندە ئۇقتۇرۇش تاپشۇرۇۋېلىڭ." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/da.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Besked om kalenderændring", 5 | "{actor} created {event} in {calendar}" : "{actor} oprettede {event} i {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} slettede {event} fra {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} opdaterede {event} i {calendar}", 8 | "Busy" : "Optaget", 9 | "Personal" : "Personlig", 10 | "Notifications for calendar event updates" : "Beskeder om kalenderændringer", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Få besked, når der tilføjes, ændres eller slettes en begivenhed i en delt kalender" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Tilkynningar um uppfærslu á atburðum í dagatali", 3 | "{actor} created {event} in {calendar}" : "{actor} bjó til {event} í {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} eyddi {event} úr {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} uppfærði {event} í {calendar}", 6 | "Busy" : "Upptekinn", 7 | "Personal" : "Einka", 8 | "Notifications for calendar event updates" : "Tilkynningar um uppfærslu á atburðum í dagatali", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Fáðu tilkynningu þegar atburðum í dagatali er breytt, bætt við eða þeim eytt." 10 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 11 | } -------------------------------------------------------------------------------- /l10n/ar.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "إشعارات عن تحديث في أحداث التقويم", 3 | "{actor} created {event} in {calendar}" : "{actor} أنشأ {event} في {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} حذف {event} من {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} عدّل {event} في {calendar}", 6 | "Busy" : "مشغول", 7 | "Personal" : "شخصي", 8 | "Notifications for calendar event updates" : "إشعارات عن تحديث في أحداث التقويم", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "سستقبل إشعاراً عن إضافة أو تعديل أو حذف حدث في تقويم مشترك." 10 | },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" 11 | } -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Sciigoj pri kalendara ĝisdatigo", 3 | "{actor} created {event} in {calendar}" : "{actor} kreis okazaĵon „{event}“ en {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} forigis okazaĵon „{event}“ el {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} ĝisdatigis okazaĵon „{event}“ en {calendar}", 6 | "Busy" : "Okupita", 7 | "Personal" : "Persona", 8 | "Notifications for calendar event updates" : "Sciigoj dum ĝisdatigo de kalendaraj okazaĵoj", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ricevi sciigon kiam okazaĵo en kunhavigita kalendaro aldoniĝis, modifiĝis aŭ foriĝis." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/fa.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "اعلان‌های به‌روزرسانی رویداد تقویم", 3 | "{actor} created {event} in {calendar}" : "{actor} رویداد {event} را در {calendar} ایجاد کرد", 4 | "{actor} deleted {event} from {calendar}" : "{actor} رویداد {event} را از {calendar} حذف کرد", 5 | "{actor} updated {event} in {calendar}" : "{actor} رویداد {event} را از {calendar} به‌روزرسانی کرد", 6 | "Busy" : "مشغول", 7 | "Personal" : "شخصی", 8 | "Notifications for calendar event updates" : "اعلان‌ها برای به‌روزرسانی رویدادهای تقویم", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "هنگامی که یک رویداد در یک تقویم مشترک اضافه، تغییر یا حذف شده است، اعلان دریافت کنید." 10 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 11 | } -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Известувања за настани во календар", 3 | "{actor} created {event} in {calendar}" : "{actor} креираше {event} во {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} избриша {event} од {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} ажурираше {event} во {calendar}", 6 | "Busy" : "Зафатен", 7 | "Personal" : "Лично", 8 | "Notifications for calendar event updates" : "Известувања за настаните во календаот", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Добивајте известување кога некој настан од споделен календар е додаден, изменет или избришан." 10 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 11 | } -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Aviseringar om uppdatering av kalenderhändelser", 3 | "{actor} created {event} in {calendar}" : "{actor} skapade {event} i {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} tog bort {event} från {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} uppdaterade {event} i {calendar}", 6 | "Busy" : "Upptagen", 7 | "Personal" : "Privat", 8 | "Notifications for calendar event updates" : "Aviseringar för uppdateringar av kalenderhändelser", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Få avisering när en händelse i en delad kalender har lagts till, ändrats eller tagits bort." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Taqvim voqealarini yangilash bildirishnomalari", 3 | "{actor} created {event} in {calendar}" : "{actor} {event} da {calendar} yaratdi", 4 | "{actor} deleted {event} from {calendar}" : "{actor} {event} {calendar}ni oʻchirib tashladi", 5 | "{actor} updated {event} in {calendar}" : "{actor} {event} da {calendar}ni yangiladi", 6 | "Busy" : "Band", 7 | "Personal" : "Shaxsiy", 8 | "Notifications for calendar event updates" : "Taqvim voqealari yangilanishi uchun bildirishnomalar", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Umumiy taqvimdagi voqea qoʻshilgan, oʻzgartirilgan yoki oʻchirilganda bildirishnoma oling." 10 | },"pluralForm" :"nplurals=1; plural=0;" 11 | } -------------------------------------------------------------------------------- /l10n/en_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Calendar event update notifications", 5 | "{actor} created {event} in {calendar}" : "{actor} created {event} in {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} deleted {event} from {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} updated {event} in {calendar}", 8 | "Busy" : "Busy", 9 | "Personal" : "Personal", 10 | "Notifications for calendar event updates" : "Notifications for calendar event updates", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receive a notification when an event in a shared calendar was added, modified or deleted." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "הודעות עדכוני אירועי לוח שנה", 5 | "{actor} created {event} in {calendar}" : "{event} נוצר על ידי {actor} ב{calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{event} נמחק על ידי {actor} מ{calendar}", 7 | "{actor} updated {event} in {calendar}" : "{event} עודכן על ידי {actor} ב{calendar}", 8 | "Busy" : "עסוק", 9 | "Personal" : "אישי", 10 | "Notifications for calendar event updates" : "התראות על עדכונים של אירועים ביומן", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "קבלת התראה כאשר נוסף, נערך או נמחק אירוע ביומן משותף." 12 | }, 13 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 14 | -------------------------------------------------------------------------------- /l10n/bg.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Известия за актуализиране на събития в календар", 5 | "{actor} created {event} in {calendar}" : "{actor} създаде {event} в {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} изтри {event} в {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} промени {event} в {calendar}", 8 | "Busy" : "Зает", 9 | "Personal" : "Лични", 10 | "Notifications for calendar event updates" : "Известия за промени по събития от календар", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Получаване на известие, когато събитие в споделен календар е добавено, променено или изтрито" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/nb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Oppdateringsvarsel for kalender hendelse", 5 | "{actor} created {event} in {calendar}" : "{actor} opprettet {event} i {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} slettet {event} fra {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} oppdaterte {event} i {calendar}", 8 | "Busy" : "Opptatt", 9 | "Personal" : "Personlig", 10 | "Notifications for calendar event updates" : "Oppdateringsvarsel for hendelser i kalender ", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Motta varsel når en hendelse i en delt kalender er lagt til, endret eller slettet." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/nl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Kalender aanpassing melding", 3 | "{actor} created {event} in {calendar}" : "{actor} heeft {event} in {calendar} gemaakt", 4 | "{actor} deleted {event} from {calendar}" : "{actor} heeft {event} uit {calendar} verwijderd", 5 | "{actor} updated {event} in {calendar}" : "{actor} heeft {event} in {calendar} aangepast", 6 | "Busy" : "Bezig", 7 | "Personal" : "Persoonlijke", 8 | "Notifications for calendar event updates" : "Meldingen voor aanpassingen van agenda-afspraken", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ontvang een melding als er een gebeurtenis in een gedeelde agenda is toegevoegd, aangepast of verwijderd." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/sw.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Arifa ya sasisho la tukio la kalenda", 5 | "{actor} created {event} in {calendar}" : "{actor}ametengeneza {event}katika{calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor}amefuta{event}kutoka {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor}amesasisha{event}katika{calendar}", 8 | "Busy" : "Bize", 9 | "Personal" : "Binafsi", 10 | "Notifications for calendar event updates" : "Arifa za masasisho ya matukio ya kalenda", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Pokea arifa wakati tukio katika kalenda iliyoshirikiwa liliongezwa, kurekebishwa au kufutwa." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | # just sane ignores 5 | .*.sw[po] 6 | *.bak 7 | *.BAK 8 | *~ 9 | *.orig 10 | *.class 11 | .cvsignore 12 | Thumbs.db 13 | *.py[co] 14 | _darcs/* 15 | CVS/* 16 | .svn/* 17 | RCS/* 18 | *.backup* 19 | 20 | # kdevelop 21 | .kdev 22 | *.kdev4 23 | *.kate-swp 24 | 25 | # Lokalize 26 | *lokalize* 27 | 28 | # eclipse 29 | .project 30 | .settings 31 | 32 | # netbeans 33 | nbproject 34 | 35 | # phpStorm 36 | .idea 37 | *.iml 38 | 39 | # geany 40 | *.geany 41 | 42 | # Cloud9IDE 43 | .settings.xml 44 | .c9revisions 45 | 46 | # vim ex mode 47 | .vimrc 48 | 49 | # Mac OS 50 | .DS_Store 51 | 52 | # WebFinger 53 | .well-known 54 | /.buildpath 55 | 56 | # Nextcloud 57 | /build 58 | /vendor 59 | /.php-cs-fixer.cache 60 | -------------------------------------------------------------------------------- /l10n/ug.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "كالېندار پائالىيىتى يېڭىلاش ئۇقتۇرۇشى", 5 | "{actor} created {event} in {calendar}" : "{actor} كالېندار {calendar}دا {event} قۇردى", 6 | "{actor} deleted {event} from {calendar}" : "{actor} ئۆچۈرۈلگەن {event} {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} يېڭىلانغان {event} {calendar}", 8 | "Busy" : "ئالدىراش", 9 | "Personal" : "شەخسىي", 10 | "Notifications for calendar event updates" : "كالېندار ھادىسىسىنى يېڭىلاش ھەققىدىكى ئۇقتۇرۇش", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "ئورتاق كالېنداردىكى ھادىسە قوشۇلغان ، ئۆزگەرتىلگەن ياكى ئۆچۈرۈلگەندە ئۇقتۇرۇش تاپشۇرۇۋېلىڭ." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Tilkynningar um uppfærslu á atburðum í dagatali", 5 | "{actor} created {event} in {calendar}" : "{actor} bjó til {event} í {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} eyddi {event} úr {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} uppfærði {event} í {calendar}", 8 | "Busy" : "Upptekinn", 9 | "Personal" : "Einka", 10 | "Notifications for calendar event updates" : "Tilkynningar um uppfærslu á atburðum í dagatali", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Fáðu tilkynningu þegar atburðum í dagatali er breytt, bætt við eða þeim eytt." 12 | }, 13 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 14 | -------------------------------------------------------------------------------- /l10n/ar.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "إشعارات عن تحديث في أحداث التقويم", 5 | "{actor} created {event} in {calendar}" : "{actor} أنشأ {event} في {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} حذف {event} من {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} عدّل {event} في {calendar}", 8 | "Busy" : "مشغول", 9 | "Personal" : "شخصي", 10 | "Notifications for calendar event updates" : "إشعارات عن تحديث في أحداث التقويم", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "سستقبل إشعاراً عن إضافة أو تعديل أو حذف حدث في تقويم مشترك." 12 | }, 13 | "nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); 14 | -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Sciigoj pri kalendara ĝisdatigo", 5 | "{actor} created {event} in {calendar}" : "{actor} kreis okazaĵon „{event}“ en {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} forigis okazaĵon „{event}“ el {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} ĝisdatigis okazaĵon „{event}“ en {calendar}", 8 | "Busy" : "Okupita", 9 | "Personal" : "Persona", 10 | "Notifications for calendar event updates" : "Sciigoj dum ĝisdatigo de kalendaraj okazaĵoj", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ricevi sciigon kiam okazaĵo en kunhavigita kalendaro aldoniĝis, modifiĝis aŭ foriĝis." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/fa.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "اعلان‌های به‌روزرسانی رویداد تقویم", 5 | "{actor} created {event} in {calendar}" : "{actor} رویداد {event} را در {calendar} ایجاد کرد", 6 | "{actor} deleted {event} from {calendar}" : "{actor} رویداد {event} را از {calendar} حذف کرد", 7 | "{actor} updated {event} in {calendar}" : "{actor} رویداد {event} را از {calendar} به‌روزرسانی کرد", 8 | "Busy" : "مشغول", 9 | "Personal" : "شخصی", 10 | "Notifications for calendar event updates" : "اعلان‌ها برای به‌روزرسانی رویدادهای تقویم", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "هنگامی که یک رویداد در یک تقویم مشترک اضافه، تغییر یا حذف شده است، اعلان دریافت کنید." 12 | }, 13 | "nplurals=2; plural=(n > 1);"); 14 | -------------------------------------------------------------------------------- /l10n/ga.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Fógraí nuashonraithe imeacht féilire", 3 | "{actor} created {event} in {calendar}" : "Chruthaigh {actor} {event} i {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "Scrios {actor} {event} ó {calendar}", 5 | "{actor} updated {event} in {calendar}" : "Nuashonraigh {actor} {event} i {calendar}", 6 | "Busy" : "Gnóthach", 7 | "Personal" : "Pearsanta", 8 | "Notifications for calendar event updates" : "Fógraí le haghaidh nuashonruithe imeachtaí féilire", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Faigh fógra nuair a cuireadh imeacht i bhféilire roinnte leis, nuair a athraíodh nó nuair a scriosadh é." 10 | },"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" 11 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Известувања за настани во календар", 5 | "{actor} created {event} in {calendar}" : "{actor} креираше {event} во {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} избриша {event} од {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} ажурираше {event} во {calendar}", 8 | "Busy" : "Зафатен", 9 | "Personal" : "Лично", 10 | "Notifications for calendar event updates" : "Известувања за настаните во календаот", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Добивајте известување кога некој настан од споделен календар е додаден, изменет или избришан." 12 | }, 13 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 14 | -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Aviseringar om uppdatering av kalenderhändelser", 5 | "{actor} created {event} in {calendar}" : "{actor} skapade {event} i {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} tog bort {event} från {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} uppdaterade {event} i {calendar}", 8 | "Busy" : "Upptagen", 9 | "Personal" : "Privat", 10 | "Notifications for calendar event updates" : "Aviseringar för uppdateringar av kalenderhändelser", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Få avisering när en händelse i en delad kalender har lagts till, ändrats eller tagits bort." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Taqvim voqealarini yangilash bildirishnomalari", 5 | "{actor} created {event} in {calendar}" : "{actor} {event} da {calendar} yaratdi", 6 | "{actor} deleted {event} from {calendar}" : "{actor} {event} {calendar}ni oʻchirib tashladi", 7 | "{actor} updated {event} in {calendar}" : "{actor} {event} da {calendar}ni yangiladi", 8 | "Busy" : "Band", 9 | "Personal" : "Shaxsiy", 10 | "Notifications for calendar event updates" : "Taqvim voqealari yangilanishi uchun bildirishnomalar", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Umumiy taqvimdagi voqea qoʻshilgan, oʻzgartirilgan yoki oʻchirilganda bildirishnoma oling." 12 | }, 13 | "nplurals=1; plural=0;"); 14 | -------------------------------------------------------------------------------- /l10n/de.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Benachrichtigung für Kalender-Terminänderungen", 3 | "{actor} created {event} in {calendar}" : "{actor} hat {event} in {calendar} erstellt", 4 | "{actor} deleted {event} from {calendar}" : "{actor} hat {event} aus {calendar} gelöscht", 5 | "{actor} updated {event} in {calendar}" : "{actor} hat {event} in {calendar} aktualisiert", 6 | "Busy" : "Beschäftigt", 7 | "Personal" : "Persönlich", 8 | "Notifications for calendar event updates" : "Benachrichtigungen für Aktualisierungen von Kalenderterminen", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Benachrichtigung erhalten wenn ein Termin in einem geteilten Kalender hinzugefügt, geändert oder gelöscht wird." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Paziņojumi par kalendāra notikumu atjaunināšanu", 3 | "{actor} created {event} in {calendar}" : "{actor} izveidoja {event} iekš {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} izdzēsta {event} no {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} atjaunoja {event} iekš {calendar}", 6 | "Busy" : "Aizņemts", 7 | "Personal" : "Personīgs", 8 | "Notifications for calendar event updates" : "Paziņojumi par kalendāra notikumu atjauninājumiem", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Saņem paziņojumu kad kalendāra notikums koplietotā kalendārā tiek pievienots, mainīts vai izdzēsts." 10 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 11 | } -------------------------------------------------------------------------------- /l10n/nl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Kalender aanpassing melding", 5 | "{actor} created {event} in {calendar}" : "{actor} heeft {event} in {calendar} gemaakt", 6 | "{actor} deleted {event} from {calendar}" : "{actor} heeft {event} uit {calendar} verwijderd", 7 | "{actor} updated {event} in {calendar}" : "{actor} heeft {event} in {calendar} aangepast", 8 | "Busy" : "Bezig", 9 | "Personal" : "Persoonlijke", 10 | "Notifications for calendar event updates" : "Meldingen voor aanpassingen van agenda-afspraken", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ontvang een melding als er een gebeurtenis in een gedeelde agenda is toegevoegd, aangepast of verwijderd." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/de_DE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Benachrichtigung für Kalender-Terminänderungen", 3 | "{actor} created {event} in {calendar}" : "{actor} hat {event} in {calendar} erstellt", 4 | "{actor} deleted {event} from {calendar}" : "{actor} hat {event} aus {calendar} gelöscht", 5 | "{actor} updated {event} in {calendar}" : "{actor} hat {event} in {calendar} aktualisiert", 6 | "Busy" : "Beschäftigt", 7 | "Personal" : "Persönlich", 8 | "Notifications for calendar event updates" : "Benachrichtigungen für Aktualisierungen von Kalendererterminen", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Benachrichtigung erhalten wenn ein Termin in einem geteilten Kalender hinzugefügt, geändert oder gelöscht wird." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/sc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notìficas de agiornamentu de is eventos de su calendàriu", 3 | "{actor} created {event} in {calendar}" : "{actor} at creadu {event} in su {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} at cantzelladu {event} dae su {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} at agiornadu {event} in su {calendar}", 6 | "Busy" : "Faghende cosa", 7 | "Personal" : "Personale", 8 | "Notifications for calendar event updates" : "Notìficas pro agiornamentos a un'eventu de su calendàriu", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Retzi una notìfica cando s'agiunghet, simodìficat o si cantzellat un'eventu in unu calendàriu cumpartzidu." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/es.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificaciones de actualizaciones en eventos del calendario", 3 | "{actor} created {event} in {calendar}" : "{actor} creó {event} en {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} borró {event} en {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} actualizó {event} en {calendar}", 6 | "Busy" : "Ocupado", 7 | "Personal" : "Personal", 8 | "Notifications for calendar event updates" : "Notificaciones para actualizaciones de eventos del calendario", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibe una notificación cuando se añade, modifica o elimina un evento en un calendario compartido." 10 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/fi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Kalenteritapahtumien päivitysilmoitukset", 3 | "{actor} created {event} in {calendar}" : "{actor} loi tapahtuman {event} kalenteriin {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} poisti tapahtuman {event} kalenterista {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} päivitti tapahtumaa {event} kalenterissa {calendar}", 6 | "Busy" : "Varattu", 7 | "Personal" : "Henkilökohtainen", 8 | "Notifications for calendar event updates" : "Ilmoitukset kalenteripäivityksistä", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Vastaanota ilmoitus, kun jaettuun kalenteriin lisätään tapahtuma, tapahtumaa muokataan tai tapahtuma poistetaan." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/fr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notifications de mise à jour de l'agenda", 3 | "{actor} created {event} in {calendar}" : "{actor} a créé {event} dans {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} a supprimé {event} de {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} a modifié {event} dans {calendar}", 6 | "Busy" : "Occupé", 7 | "Personal" : "Personnel", 8 | "Notifications for calendar event updates" : "Notifications lors des mises à jour d'évènements dans l'agenda", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Soyez notifiés lorsqu'un évènement est ajouté, modifié ou supprimé dans un agenda partagé." 10 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/gl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificacións de actualizacións do calendario", 3 | "{actor} created {event} in {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", 6 | "Busy" : "Ocupado", 7 | "Personal" : "Persoal", 8 | "Notifications for calendar event updates" : "Notificacións para as actualizacións do calendario", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibir unha notificación cando se engada, borre ou modifique un evento dun calendario compartido." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Obavijesti o ažuriranju kalendarskog događaja", 3 | "{actor} created {event} in {calendar}" : "{actor} je stvorio {event} u {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} je izbrisao {event} iz {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} je ažurirao {event} u {calendar}", 6 | "Busy" : "Zauzeto", 7 | "Personal" : "Osobno", 8 | "Notifications for calendar event updates" : "Obavijesti za ažuriranja kalendarskog događaja", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Primite obavijesti o dodavanju, mijenjanju ili brisanju događaja iz dijeljenog kalendara." 10 | },"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;" 11 | } -------------------------------------------------------------------------------- /l10n/es_EC.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificaciones de actualización de eventos del calendario", 3 | "{actor} created {event} in {calendar}" : "{actor} creó {event} en {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} eliminó {event} de {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} actualizó {event} en {calendar}", 6 | "Busy" : "Ocupado", 7 | "Personal" : "Personal", 8 | "Notifications for calendar event updates" : "Notificaciones para actualizaciones de eventos del calendario", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibir una notificación cuando se agregue, modifique o elimine un evento en un calendario compartido." 10 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Kalendrisündmuste uuenduste teavitaja", 3 | "{actor} created {event} in {calendar}" : "„{actor}“ vormistas „{event}“ sündmuse „{calendar}“ kalendris", 4 | "{actor} deleted {event} from {calendar}" : "„{actor}“ kustutas „{event}“ sündmuse „{calendar}“ kalendris", 5 | "{actor} updated {event} in {calendar}" : "„{actor}“ uuendas „{event}“ sündmust „{calendar}“ kalendris", 6 | "Busy" : "Hõivatud", 7 | "Personal" : "Isiklik", 8 | "Notifications for calendar event updates" : "Teavitused kalendrisündmuste uuenduste puhul", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Sa saad teavituse, kui jagatud kalendrisse lisandub uus sündmus või olemasolevat muudetakse või kustutatakse." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/pt_BR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificações de atualização do calendário de evento", 3 | "{actor} created {event} in {calendar}" : "{actor} criou {event} no {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} excluiu {event} no {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} atualizou {event} no {calendar}", 6 | "Busy" : "Ocupado", 7 | "Personal" : "Pessoal", 8 | "Notifications for calendar event updates" : "Notificações para atualizações no calendário de eventos", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receba uma notificação quando um evento em um calendário compartilhado for adicionado, modificado ou apagado." 10 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/sl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Obvestila o posodobitvah koledarja", 3 | "{actor} created {event} in {calendar}" : "{actor} ustvari dogodek {event} v koledarju {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} izbriše dogodek {event} iz koledarja {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} posodobi dogodek {event} v koledarju {calendar}", 6 | "Busy" : "Zasedeno", 7 | "Personal" : "Osebno", 8 | "Notifications for calendar event updates" : "Obvestila za posodobitve dogodkov koledarja", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Prejmite obvestilo, ko je v koledar dodan dogodek oziroma je ta spremenjen ali izbrisan." 10 | },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" 11 | } -------------------------------------------------------------------------------- /l10n/tr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Takvim etkinliği güncelleme bildirimleri", 3 | "{actor} created {event} in {calendar}" : "{actor}, {calendar} takvimine {event} etkinliğini ekledi", 4 | "{actor} deleted {event} from {calendar}" : "{actor}, {calendar} takviminden {event} etkinliğini sildi", 5 | "{actor} updated {event} in {calendar}" : "{actor}, {calendar} takvimindeki {event} etkinliğini güncelledi", 6 | "Busy" : "Meşgul", 7 | "Personal" : "Kişisel", 8 | "Notifications for calendar event updates" : "Takvim etkinliği güncelleme bildirimleri", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Bu seçenek açıksa, bir etkinlik paylaşılmış bir takvime eklendiğinde, düzenlendiğinde ya da silindiğinde bildirim gönderilir." 10 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 11 | } -------------------------------------------------------------------------------- /l10n/eu.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Egutegiko hitzordu eguneraketen jakinarazpenak", 3 | "{actor} created {event} in {calendar}" : "{actor} erabiltzaileak {event} sortu du {calendar} egutegian", 4 | "{actor} deleted {event} from {calendar}" : "{actor} erabiltzaileak {event} ezabatu du {calendar} egutegitik", 5 | "{actor} updated {event} in {calendar}" : "{actor} erabiltzaileak {event} eguneratu du {calendar} egutegian", 6 | "Busy" : "Lanpetua", 7 | "Personal" : "Pertsonala", 8 | "Notifications for calendar event updates" : "Egutegiko gertaera eguneraketen jakinarazpenak", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Jakinarazpen bat jaso hitzordu bat partekatutako egutegi baten gehitu, aldatu edo ezabatzen denean." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/ga.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Fógraí nuashonraithe imeacht féilire", 5 | "{actor} created {event} in {calendar}" : "Chruthaigh {actor} {event} i {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "Scrios {actor} {event} ó {calendar}", 7 | "{actor} updated {event} in {calendar}" : "Nuashonraigh {actor} {event} i {calendar}", 8 | "Busy" : "Gnóthach", 9 | "Personal" : "Pearsanta", 10 | "Notifications for calendar event updates" : "Fógraí le haghaidh nuashonruithe imeachtaí féilire", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Faigh fógra nuair a cuireadh imeacht i bhféilire roinnte leis, nuair a athraíodh nó nuair a scriosadh é." 12 | }, 13 | "nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); 14 | -------------------------------------------------------------------------------- /l10n/hu.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Naptáresemény-értesítések", 3 | "{actor} created {event} in {calendar}" : "{actor} létrehozta ezt az eseményt: {event}, ebben a naptárban: {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} törölte ezt az eseményt: {event}, ebből a naptárból: {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} frissítette ezt az eseményt: {event}, ebben a naptárban: {calendar}", 6 | "Busy" : "Foglalt", 7 | "Personal" : "Személyes", 8 | "Notifications for calendar event updates" : "Értesítések a naptáreseményekről", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Értesítés fogadása, ha egy megosztott naptárban lévő esemény hozzáadásra, módosításra vagy törlésre kerül." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/it.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notifiche di aggiornamento degli eventi di calendario", 3 | "{actor} created {event} in {calendar}" : "{actor} ha creato {event} nel in {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} ha eliminato {event} da {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} ha aggiornato {event} in {calendar}", 6 | "Busy" : "Occupato", 7 | "Personal" : "Personale", 8 | "Notifications for calendar event updates" : "Notifiche per gli aggiornamenti degli eventi di calendario", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ricevi una notifica quando un evento in un calendario condiviso è stato aggiunto, modificato o eliminato." 10 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificações de atualização do evento do calendário", 3 | "{actor} created {event} in {calendar}" : "{actor} criado {event} no {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} eliminado {event} do {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} atualizado {event} no {calendar}", 6 | "Busy" : "Ocupado", 7 | "Personal" : "Pessoal", 8 | "Notifications for calendar event updates" : "Notificações para atualizações dos eventos do calendário", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receba uma notificação quando um evento num calendário partilhado foi adicionado, modificado ou eliminado." 10 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 11 | } -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificări de actualizare a evenimentelor din calendar", 3 | "{actor} created {event} in {calendar}" : "{actor} a creat {event} în {calendar}", 4 | "{actor} deleted {event} from {calendar}" : " {actor} a șters {event} din {calendar}.", 5 | "{actor} updated {event} in {calendar}" : " {actor} a actualizat {event} în {calendar}", 6 | "Busy" : "Ocupat", 7 | "Personal" : "Personal", 8 | "Notifications for calendar event updates" : "Notificări pentru actualizările evenimentelor din calendar", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Primiți o notificare atunci când un eveniment dintr-un calendar partajat a fost adăugat, modificat sau șters." 10 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 11 | } -------------------------------------------------------------------------------- /l10n/sk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Upozornenia na aktualizáciu udalosti v kalendári", 3 | "{actor} created {event} in {calendar}" : "{actor} vytvoril {event} v {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} zmazal {event} z {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} aktualizoval {event} v {calendar}", 6 | "Busy" : "Zaneprázdnený", 7 | "Personal" : "Osobné", 8 | "Notifications for calendar event updates" : "Upozornenia na aktualizácie udalosti v kalendári", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Dostanete upozornenie, keď bola udalosť v zdieľanom kalendári pridaná, upravená alebo zmazaná." 10 | },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" 11 | } -------------------------------------------------------------------------------- /.github/workflows/reuse.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. 7 | # 8 | # SPDX-License-Identifier: CC0-1.0 9 | 10 | name: REUSE Compliance Check 11 | 12 | on: [pull_request] 13 | 14 | permissions: 15 | contents: read 16 | 17 | jobs: 18 | reuse-compliance-check: 19 | runs-on: ubuntu-latest-low 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 23 | with: 24 | persist-credentials: false 25 | 26 | - name: REUSE Compliance Check 27 | uses: fsfe/reuse-action@bb774aa972c2a89ff34781233d275075cbddf542 # v5.0.0 28 | -------------------------------------------------------------------------------- /l10n/ca.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Notificacions d'actualitzacions d'esdeveniments del calendari", 3 | "{actor} created {event} in {calendar}" : "{actor} ha creat {event} en el calendari {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} ha suprimit {event} del calendari {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} ha actualitzat {event} en el calendari {calendar}", 6 | "Busy" : "Ocupat", 7 | "Personal" : "Personal", 8 | "Notifications for calendar event updates" : "Notificacions d'actualitzacions d'esdeveniments del calendari", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Rebeu una notificació quan s'afegeixi, es modifiqui o se suprimeixi un esdeveniment d'un calendari compartit." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Paziņojumi par kalendāra notikumu atjaunināšanu", 5 | "{actor} created {event} in {calendar}" : "{actor} izveidoja {event} iekš {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} izdzēsta {event} no {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} atjaunoja {event} iekš {calendar}", 8 | "Busy" : "Aizņemts", 9 | "Personal" : "Personīgs", 10 | "Notifications for calendar event updates" : "Paziņojumi par kalendāra notikumu atjauninājumiem", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Saņem paziņojumu kad kalendāra notikums koplietotā kalendārā tiek pievienots, mainīts vai izdzēsts." 12 | }, 13 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 14 | -------------------------------------------------------------------------------- /l10n/de.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Benachrichtigung für Kalender-Terminänderungen", 5 | "{actor} created {event} in {calendar}" : "{actor} hat {event} in {calendar} erstellt", 6 | "{actor} deleted {event} from {calendar}" : "{actor} hat {event} aus {calendar} gelöscht", 7 | "{actor} updated {event} in {calendar}" : "{actor} hat {event} in {calendar} aktualisiert", 8 | "Busy" : "Beschäftigt", 9 | "Personal" : "Persönlich", 10 | "Notifications for calendar event updates" : "Benachrichtigungen für Aktualisierungen von Kalenderterminen", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Benachrichtigung erhalten wenn ein Termin in einem geteilten Kalender hinzugefügt, geändert oder gelöscht wird." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/cs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Upozorňování na aktualizace událostí v kalendáři", 3 | "{actor} created {event} in {calendar}" : "{actor} vytvořil(a) {event} v {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} vymazal(a) {event} z {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} aktualizoval(a) {event} v {calendar}", 6 | "Busy" : "Zaneprázdněn(a)", 7 | "Personal" : "Osobní", 8 | "Notifications for calendar event updates" : "Upozorňování na aktualizace událostí v kalendáři", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Dostávejte upozornění když je ve sdíleném kalendáři přidána, upravena nebo smazána událost." 10 | },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" 11 | } -------------------------------------------------------------------------------- /l10n/de_DE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Benachrichtigung für Kalender-Terminänderungen", 5 | "{actor} created {event} in {calendar}" : "{actor} hat {event} in {calendar} erstellt", 6 | "{actor} deleted {event} from {calendar}" : "{actor} hat {event} aus {calendar} gelöscht", 7 | "{actor} updated {event} in {calendar}" : "{actor} hat {event} in {calendar} aktualisiert", 8 | "Busy" : "Beschäftigt", 9 | "Personal" : "Persönlich", 10 | "Notifications for calendar event updates" : "Benachrichtigungen für Aktualisierungen von Kalendererterminen", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Benachrichtigung erhalten wenn ein Termin in einem geteilten Kalender hinzugefügt, geändert oder gelöscht wird." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/fr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notifications de mise à jour de l'agenda", 5 | "{actor} created {event} in {calendar}" : "{actor} a créé {event} dans {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} a supprimé {event} de {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} a modifié {event} dans {calendar}", 8 | "Busy" : "Occupé", 9 | "Personal" : "Personnel", 10 | "Notifications for calendar event updates" : "Notifications lors des mises à jour d'évènements dans l'agenda", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Soyez notifiés lorsqu'un évènement est ajouté, modifié ou supprimé dans un agenda partagé." 12 | }, 13 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/sc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notìficas de agiornamentu de is eventos de su calendàriu", 5 | "{actor} created {event} in {calendar}" : "{actor} at creadu {event} in su {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} at cantzelladu {event} dae su {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} at agiornadu {event} in su {calendar}", 8 | "Busy" : "Faghende cosa", 9 | "Personal" : "Personale", 10 | "Notifications for calendar event updates" : "Notìficas pro agiornamentos a un'eventu de su calendàriu", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Retzi una notìfica cando s'agiunghet, simodìficat o si cantzellat un'eventu in unu calendàriu cumpartzidu." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/sr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Обавештења за ажурирања догађаја у календару", 3 | "{actor} created {event} in {calendar}" : "{actor} направи догађај {event} у календару {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} обриса догађај {event} из календара {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} измени догађај {event} у календару {calendar}", 6 | "Busy" : "Заузет", 7 | "Personal" : "Лично", 8 | "Notifications for calendar event updates" : "Обавештења за ажурирања догађаја у календару", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Примајте обавештења када се догађај у дељеном календару дода, измени или обрише." 10 | },"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);" 11 | } -------------------------------------------------------------------------------- /l10n/el.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Ειδοποιήσεις ενημερώσεων συμβάντων ημερολογίου", 3 | "{actor} created {event} in {calendar}" : "Ο {actor} δημιούργησε το γεγονός {event} στο ημερολόγιο {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "Ο {actor} διέγραψε το γεγονός {event} από το ημερολόγιο {calendar}", 5 | "{actor} updated {event} in {calendar}" : "Ο {actor} ενημέρωσε το γεγονός {event} στο ημερολόγιο {calendar}", 6 | "Busy" : "Απασχολημένος", 7 | "Personal" : "Προσωπικά", 8 | "Notifications for calendar event updates" : "Ειδοποιήσεις για τις ενημερώσεις συμβάντων ημερολογίου", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Λήψη ειδοποίησης όταν προστέθηκε, τροποποιήθηκε ή διαγράφηκε ένα συμβάν σε κοινόχρηστο ημερολόγιο." 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/es.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificaciones de actualizaciones en eventos del calendario", 5 | "{actor} created {event} in {calendar}" : "{actor} creó {event} en {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} borró {event} en {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} actualizó {event} en {calendar}", 8 | "Busy" : "Ocupado", 9 | "Personal" : "Personal", 10 | "Notifications for calendar event updates" : "Notificaciones para actualizaciones de eventos del calendario", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibe una notificación cuando se añade, modifica o elimina un evento en un calendario compartido." 12 | }, 13 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/fi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Kalenteritapahtumien päivitysilmoitukset", 5 | "{actor} created {event} in {calendar}" : "{actor} loi tapahtuman {event} kalenteriin {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} poisti tapahtuman {event} kalenterista {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} päivitti tapahtumaa {event} kalenterissa {calendar}", 8 | "Busy" : "Varattu", 9 | "Personal" : "Henkilökohtainen", 10 | "Notifications for calendar event updates" : "Ilmoitukset kalenteripäivityksistä", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Vastaanota ilmoitus, kun jaettuun kalenteriin lisätään tapahtuma, tapahtumaa muokataan tai tapahtuma poistetaan." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/gl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificacións de actualizacións do calendario", 5 | "{actor} created {event} in {calendar}" : "{actor} creou o evento {event} no calendario {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} eliminou o evento {event} do calendario {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} actualizou o evento {event} no calendario {calendar}", 8 | "Busy" : "Ocupado", 9 | "Personal" : "Persoal", 10 | "Notifications for calendar event updates" : "Notificacións para as actualizacións do calendario", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibir unha notificación cando se engada, borre ou modifique un evento dun calendario compartido." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/es_EC.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificaciones de actualización de eventos del calendario", 5 | "{actor} created {event} in {calendar}" : "{actor} creó {event} en {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} eliminó {event} de {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} actualizó {event} en {calendar}", 8 | "Busy" : "Ocupado", 9 | "Personal" : "Personal", 10 | "Notifications for calendar event updates" : "Notificaciones para actualizaciones de eventos del calendario", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recibir una notificación cuando se agregue, modifique o elimine un evento en un calendario compartido." 12 | }, 13 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Obavijesti o ažuriranju kalendarskog događaja", 5 | "{actor} created {event} in {calendar}" : "{actor} je stvorio {event} u {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} je izbrisao {event} iz {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} je ažurirao {event} u {calendar}", 8 | "Busy" : "Zauzeto", 9 | "Personal" : "Osobno", 10 | "Notifications for calendar event updates" : "Obavijesti za ažuriranja kalendarskog događaja", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Primite obavijesti o dodavanju, mijenjanju ili brisanju događaja iz dijeljenog kalendara." 12 | }, 13 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Kalendrisündmuste uuenduste teavitaja", 5 | "{actor} created {event} in {calendar}" : "„{actor}“ vormistas „{event}“ sündmuse „{calendar}“ kalendris", 6 | "{actor} deleted {event} from {calendar}" : "„{actor}“ kustutas „{event}“ sündmuse „{calendar}“ kalendris", 7 | "{actor} updated {event} in {calendar}" : "„{actor}“ uuendas „{event}“ sündmust „{calendar}“ kalendris", 8 | "Busy" : "Hõivatud", 9 | "Personal" : "Isiklik", 10 | "Notifications for calendar event updates" : "Teavitused kalendrisündmuste uuenduste puhul", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Sa saad teavituse, kui jagatud kalendrisse lisandub uus sündmus või olemasolevat muudetakse või kustutatakse." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/eu.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Egutegiko hitzordu eguneraketen jakinarazpenak", 5 | "{actor} created {event} in {calendar}" : "{actor} erabiltzaileak {event} sortu du {calendar} egutegian", 6 | "{actor} deleted {event} from {calendar}" : "{actor} erabiltzaileak {event} ezabatu du {calendar} egutegitik", 7 | "{actor} updated {event} in {calendar}" : "{actor} erabiltzaileak {event} eguneratu du {calendar} egutegian", 8 | "Busy" : "Lanpetua", 9 | "Personal" : "Pertsonala", 10 | "Notifications for calendar event updates" : "Egutegiko gertaera eguneraketen jakinarazpenak", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Jakinarazpen bat jaso hitzordu bat partekatutako egutegi baten gehitu, aldatu edo ezabatzen denean." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/pt_BR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificações de atualização do calendário de evento", 5 | "{actor} created {event} in {calendar}" : "{actor} criou {event} no {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} excluiu {event} no {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} atualizou {event} no {calendar}", 8 | "Busy" : "Ocupado", 9 | "Personal" : "Pessoal", 10 | "Notifications for calendar event updates" : "Notificações para atualizações no calendário de eventos", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receba uma notificação quando um evento em um calendário compartilhado for adicionado, modificado ou apagado." 12 | }, 13 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificações de atualização do evento do calendário", 5 | "{actor} created {event} in {calendar}" : "{actor} criado {event} no {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} eliminado {event} do {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} atualizado {event} no {calendar}", 8 | "Busy" : "Ocupado", 9 | "Personal" : "Pessoal", 10 | "Notifications for calendar event updates" : "Notificações para atualizações dos eventos do calendário", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Receba uma notificação quando um evento num calendário partilhado foi adicionado, modificado ou eliminado." 12 | }, 13 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificări de actualizare a evenimentelor din calendar", 5 | "{actor} created {event} in {calendar}" : "{actor} a creat {event} în {calendar}", 6 | "{actor} deleted {event} from {calendar}" : " {actor} a șters {event} din {calendar}.", 7 | "{actor} updated {event} in {calendar}" : " {actor} a actualizat {event} în {calendar}", 8 | "Busy" : "Ocupat", 9 | "Personal" : "Personal", 10 | "Notifications for calendar event updates" : "Notificări pentru actualizările evenimentelor din calendar", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Primiți o notificare atunci când un eveniment dintr-un calendar partajat a fost adăugat, modificat sau șters." 12 | }, 13 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 14 | -------------------------------------------------------------------------------- /l10n/sk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Upozornenia na aktualizáciu udalosti v kalendári", 5 | "{actor} created {event} in {calendar}" : "{actor} vytvoril {event} v {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} zmazal {event} z {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} aktualizoval {event} v {calendar}", 8 | "Busy" : "Zaneprázdnený", 9 | "Personal" : "Osobné", 10 | "Notifications for calendar event updates" : "Upozornenia na aktualizácie udalosti v kalendári", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Dostanete upozornenie, keď bola udalosť v zdieľanom kalendári pridaná, upravená alebo zmazaná." 12 | }, 13 | "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); 14 | -------------------------------------------------------------------------------- /l10n/sl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Obvestila o posodobitvah koledarja", 5 | "{actor} created {event} in {calendar}" : "{actor} ustvari dogodek {event} v koledarju {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} izbriše dogodek {event} iz koledarja {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} posodobi dogodek {event} v koledarju {calendar}", 8 | "Busy" : "Zasedeno", 9 | "Personal" : "Osebno", 10 | "Notifications for calendar event updates" : "Obvestila za posodobitve dogodkov koledarja", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Prejmite obvestilo, ko je v koledar dodan dogodek oziroma je ta spremenjen ali izbrisan." 12 | }, 13 | "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); 14 | -------------------------------------------------------------------------------- /l10n/tr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Takvim etkinliği güncelleme bildirimleri", 5 | "{actor} created {event} in {calendar}" : "{actor}, {calendar} takvimine {event} etkinliğini ekledi", 6 | "{actor} deleted {event} from {calendar}" : "{actor}, {calendar} takviminden {event} etkinliğini sildi", 7 | "{actor} updated {event} in {calendar}" : "{actor}, {calendar} takvimindeki {event} etkinliğini güncelledi", 8 | "Busy" : "Meşgul", 9 | "Personal" : "Kişisel", 10 | "Notifications for calendar event updates" : "Takvim etkinliği güncelleme bildirimleri", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Bu seçenek açıksa, bir etkinlik paylaşılmış bir takvime eklendiğinde, düzenlendiğinde ya da silindiğinde bildirim gönderilir." 12 | }, 13 | "nplurals=2; plural=(n > 1);"); 14 | -------------------------------------------------------------------------------- /l10n/hu.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Naptáresemény-értesítések", 5 | "{actor} created {event} in {calendar}" : "{actor} létrehozta ezt az eseményt: {event}, ebben a naptárban: {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} törölte ezt az eseményt: {event}, ebből a naptárból: {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} frissítette ezt az eseményt: {event}, ebben a naptárban: {calendar}", 8 | "Busy" : "Foglalt", 9 | "Personal" : "Személyes", 10 | "Notifications for calendar event updates" : "Értesítések a naptáreseményekről", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Értesítés fogadása, ha egy megosztott naptárban lévő esemény hozzáadásra, módosításra vagy törlésre kerül." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/it.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notifiche di aggiornamento degli eventi di calendario", 5 | "{actor} created {event} in {calendar}" : "{actor} ha creato {event} nel in {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} ha eliminato {event} da {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} ha aggiornato {event} in {calendar}", 8 | "Busy" : "Occupato", 9 | "Personal" : "Personale", 10 | "Notifications for calendar event updates" : "Notifiche per gli aggiornamenti degli eventi di calendario", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Ricevi una notifica quando un evento in un calendario condiviso è stato aggiunto, modificato o eliminato." 12 | }, 13 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 14 | -------------------------------------------------------------------------------- /l10n/ca.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Notificacions d'actualitzacions d'esdeveniments del calendari", 5 | "{actor} created {event} in {calendar}" : "{actor} ha creat {event} en el calendari {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} ha suprimit {event} del calendari {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} ha actualitzat {event} en el calendari {calendar}", 8 | "Busy" : "Ocupat", 9 | "Personal" : "Personal", 10 | "Notifications for calendar event updates" : "Notificacions d'actualitzacions d'esdeveniments del calendari", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Rebeu una notificació quan s'afegeixi, es modifiqui o se suprimeixi un esdeveniment d'un calendari compartit." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/cs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Upozorňování na aktualizace událostí v kalendáři", 5 | "{actor} created {event} in {calendar}" : "{actor} vytvořil(a) {event} v {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} vymazal(a) {event} z {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} aktualizoval(a) {event} v {calendar}", 8 | "Busy" : "Zaneprázdněn(a)", 9 | "Personal" : "Osobní", 10 | "Notifications for calendar event updates" : "Upozorňování na aktualizace událostí v kalendáři", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Dostávejte upozornění když je ve sdíleném kalendáři přidána, upravena nebo smazána událost." 12 | }, 13 | "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); 14 | -------------------------------------------------------------------------------- /l10n/el.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Ειδοποιήσεις ενημερώσεων συμβάντων ημερολογίου", 5 | "{actor} created {event} in {calendar}" : "Ο {actor} δημιούργησε το γεγονός {event} στο ημερολόγιο {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "Ο {actor} διέγραψε το γεγονός {event} από το ημερολόγιο {calendar}", 7 | "{actor} updated {event} in {calendar}" : "Ο {actor} ενημέρωσε το γεγονός {event} στο ημερολόγιο {calendar}", 8 | "Busy" : "Απασχολημένος", 9 | "Personal" : "Προσωπικά", 10 | "Notifications for calendar event updates" : "Ειδοποιήσεις για τις ενημερώσεις συμβάντων ημερολογίου", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Λήψη ειδοποίησης όταν προστέθηκε, τροποποιήθηκε ή διαγράφηκε ένα συμβάν σε κοινόχρηστο ημερολόγιο." 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/sr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Обавештења за ажурирања догађаја у календару", 5 | "{actor} created {event} in {calendar}" : "{actor} направи догађај {event} у календару {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} обриса догађај {event} из календара {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} измени догађај {event} у календару {calendar}", 8 | "Busy" : "Заузет", 9 | "Personal" : "Лично", 10 | "Notifications for calendar event updates" : "Обавештења за ажурирања догађаја у календару", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Примајте обавештења када се догађај у дељеном календару дода, измени или обрише." 12 | }, 13 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 14 | -------------------------------------------------------------------------------- /REUSE.toml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | version = 1 4 | SPDX-PackageName = "event_update_notification" 5 | SPDX-PackageSupplier = "Nextcloud " 6 | SPDX-PackageDownloadLocation = "https://github.com/nextcloud/event_update_notification/" 7 | 8 | [[annotations]] 9 | path = ["l10n/**.js", "l10n/**.json", ".tx/config"] 10 | precedence = "aggregate" 11 | SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors" 12 | SPDX-License-Identifier = "AGPL-3.0-or-later" 13 | 14 | [[annotations]] 15 | path = [".github/CODEOWNERS", ".github/dependabot.yml"] 16 | precedence = "aggregate" 17 | SPDX-FileCopyrightText = "none" 18 | SPDX-License-Identifier = "CC0-1.0" 19 | 20 | [[annotations]] 21 | path = ["composer.json", "composer.lock"] 22 | precedence = "aggregate" 23 | SPDX-FileCopyrightText = "none" 24 | SPDX-License-Identifier = "CC0-1.0" 25 | -------------------------------------------------------------------------------- /l10n/ru.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Уведомления об обновлениях календаря", 3 | "{actor} created {event} in {calendar}" : "{actor} создал(а) событие «{event}» в календаре «{calendar}»", 4 | "{actor} deleted {event} from {calendar}" : "{actor} удалил(а) событие «{event}» из календаря «{calendar}»", 5 | "{actor} updated {event} in {calendar}" : "{actor} обновил(а) событие «{event}» в календаре «{calendar}»", 6 | "Busy" : "Занят", 7 | "Personal" : "Личное", 8 | "Notifications for calendar event updates" : "Уведомления об изменениях событий", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Уведомления о добавлении, изменении и удалении событий в общих календарях." 10 | },"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);" 11 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoload": { 3 | "psr-4": { 4 | "OCA\\EventUpdateNotification\\": "lib/" 5 | } 6 | }, 7 | "name": "nextcloud/event_update_notification", 8 | "description": "event update notification", 9 | "license": "AGPL", 10 | "config": { 11 | "classmap-authoritative": true, 12 | "optimize-autoloader": true, 13 | "platform": { 14 | "php": "8.1.32" 15 | }, 16 | "sort-packages": true 17 | }, 18 | "scripts": { 19 | "lint": "find . -name \\*.php -not -path './vendor/*' -not -path './build/*' -print0 | xargs -0 -n1 php -l", 20 | "cs:check": "php-cs-fixer fix --dry-run --diff", 21 | "cs:fix": "php-cs-fixer fix", 22 | "psalm": "psalm.phar --no-cache --threads=$(nproc)", 23 | "psalm:update-baseline": "psalm.phar --threads=1 --update-baseline --set-baseline=tests/psalm-baseline.xml" 24 | }, 25 | "require-dev": { 26 | "nextcloud/coding-standard": "^1.4", 27 | "nextcloud/ocp": "dev-stable31", 28 | "psalm/phar": "^6.8" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Kalendoriaus įvykių atnaujinimo pranešimai", 3 | "{actor} created {event} in {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} kalendoriuje {calendar} ištrynė įvykį {event}", 5 | "{actor} updated {event} in {calendar}" : "{actor} kalendoriuje {calendar} atnaujino įvykį {event}", 6 | "Busy" : "Užimtas laikas", 7 | "Personal" : "Asmeniniai", 8 | "Notifications for calendar event updates" : "Pranešimai apie kalendoriaus įvykių atnaujinimus", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Gauti pranešimą, kai bendrinamame kalendoriuje buvo pridėtas, modifikuotas ar ištrintas įvykis." 10 | },"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);" 11 | } -------------------------------------------------------------------------------- /l10n/ru.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Уведомления об обновлениях календаря", 5 | "{actor} created {event} in {calendar}" : "{actor} создал(а) событие «{event}» в календаре «{calendar}»", 6 | "{actor} deleted {event} from {calendar}" : "{actor} удалил(а) событие «{event}» из календаря «{calendar}»", 7 | "{actor} updated {event} in {calendar}" : "{actor} обновил(а) событие «{event}» в календаре «{calendar}»", 8 | "Busy" : "Занят", 9 | "Personal" : "Личное", 10 | "Notifications for calendar event updates" : "Уведомления об изменениях событий", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Уведомления о добавлении, изменении и удалении событий в общих календарях." 12 | }, 13 | "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);"); 14 | -------------------------------------------------------------------------------- /l10n/uk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Сповіщення про оновлення події в календарі", 3 | "{actor} created {event} in {calendar}" : "{actor} створив(-ла) {event} в {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} вилучив {event} в {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} оновив(-ла) {event} в {calendar}", 6 | "Busy" : "Зайнято", 7 | "Personal" : "Особисте", 8 | "Notifications for calendar event updates" : "Сповіщення про оновлення подій в календарі", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Отримувати сповіщення про додавання, зміну або вилучення події у спільному календарі" 10 | },"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);" 11 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Kalendoriaus įvykių atnaujinimo pranešimai", 5 | "{actor} created {event} in {calendar}" : "{actor} kalendoriuje {calendar} sukūrė įvykį {event}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} kalendoriuje {calendar} ištrynė įvykį {event}", 7 | "{actor} updated {event} in {calendar}" : "{actor} kalendoriuje {calendar} atnaujino įvykį {event}", 8 | "Busy" : "Užimtas laikas", 9 | "Personal" : "Asmeniniai", 10 | "Notifications for calendar event updates" : "Pranešimai apie kalendoriaus įvykių atnaujinimus", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Gauti pranešimą, kai bendrinamame kalendoriuje buvo pridėtas, modifikuotas ar ištrintas įvykis." 12 | }, 13 | "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);"); 14 | -------------------------------------------------------------------------------- /l10n/pl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Powiadomienia o aktualizacji wydarzeń w kalendarzu", 3 | "{actor} created {event} in {calendar}" : "{actor} utworzył wydarzenie {event} z kalendarza {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} usunął wydarzenie {event} z kalendarza {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} zaktualizował wydarzenie {event} w kalendarzu {calendar}", 6 | "Busy" : "Pracuje", 7 | "Personal" : "Osobiste", 8 | "Notifications for calendar event updates" : "Powiadomienia dla aktualizacji wydarzeń w kalendarzu", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Odbieraj powiadomienie kiedy wydarzenie w udostępnionym kalendarzu zostało dodane, zmodyfikowane lub usunięte." 10 | },"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);" 11 | } -------------------------------------------------------------------------------- /l10n/uk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Сповіщення про оновлення події в календарі", 5 | "{actor} created {event} in {calendar}" : "{actor} створив(-ла) {event} в {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} вилучив {event} в {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} оновив(-ла) {event} в {calendar}", 8 | "Busy" : "Зайнято", 9 | "Personal" : "Особисте", 10 | "Notifications for calendar event updates" : "Сповіщення про оновлення подій в календарі", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Отримувати сповіщення про додавання, зміну або вилучення події у спільному календарі" 12 | }, 13 | "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);"); 14 | -------------------------------------------------------------------------------- /l10n/pl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Powiadomienia o aktualizacji wydarzeń w kalendarzu", 5 | "{actor} created {event} in {calendar}" : "{actor} utworzył wydarzenie {event} z kalendarza {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} usunął wydarzenie {event} z kalendarza {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} zaktualizował wydarzenie {event} w kalendarzu {calendar}", 8 | "Busy" : "Pracuje", 9 | "Personal" : "Osobiste", 10 | "Notifications for calendar event updates" : "Powiadomienia dla aktualizacji wydarzeń w kalendarzu", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Odbieraj powiadomienie kiedy wydarzenie w udostępnionym kalendarzu zostało dodane, zmodyfikowane lub usunięte." 12 | }, 13 | "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);"); 14 | -------------------------------------------------------------------------------- /LICENSES/MIT.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /l10n/br.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Calendar event update notifications" : "Kemenadenn nevezadenn un darviout war an deizataer", 3 | "{actor} created {event} in {calendar}" : "{actor} en deus krouet {event} war {calendar}", 4 | "{actor} deleted {event} from {calendar}" : "{actor} en deus lamet {event} war {calendar}", 5 | "{actor} updated {event} in {calendar}" : "{actor} en deus adnevezaet {event} war {calendar}", 6 | "Busy" : "O labourat", 7 | "Personal" : "Personel", 8 | "Notifications for calendar event updates" : "Kemenadenn evit adnevezadennoù an deizataer", 9 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recevit un adnevesadenn pa vez ouzhpennet, cheñchet pe lemmet un darvout e barzh an deizataer rannet." 10 | },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" 11 | } -------------------------------------------------------------------------------- /l10n/br.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "event_update_notification", 3 | { 4 | "Calendar event update notifications" : "Kemenadenn nevezadenn un darviout war an deizataer", 5 | "{actor} created {event} in {calendar}" : "{actor} en deus krouet {event} war {calendar}", 6 | "{actor} deleted {event} from {calendar}" : "{actor} en deus lamet {event} war {calendar}", 7 | "{actor} updated {event} in {calendar}" : "{actor} en deus adnevezaet {event} war {calendar}", 8 | "Busy" : "O labourat", 9 | "Personal" : "Personel", 10 | "Notifications for calendar event updates" : "Kemenadenn evit adnevezadennoù an deizataer", 11 | "Receive a notification when an event in a shared calendar was added, modified or deleted." : "Recevit un adnevesadenn pa vez ouzhpennet, cheñchet pe lemmet un darvout e barzh an deizataer rannet." 12 | }, 13 | "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); 14 | -------------------------------------------------------------------------------- /tests/psalm-baseline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /.github/workflows/lint-info-xml.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint info.xml 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-info-xml-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | xml-linters: 22 | runs-on: ubuntu-latest-low 23 | 24 | name: info.xml lint 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 28 | with: 29 | persist-credentials: false 30 | 31 | - name: Download schema 32 | run: wget https://raw.githubusercontent.com/nextcloud/appstore/master/nextcloudappstore/api/v1/release/info.xsd 33 | 34 | - name: Lint info.xml 35 | uses: ChristophWurst/xmllint-action@36f2a302f84f8c83fceea0b9c59e1eb4a616d3c1 # v1.2 36 | with: 37 | xml-file: ./appinfo/info.xml 38 | xml-schema-file: ./info.xsd 39 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 8 | event_update_notification 9 | Notifications for calendar event updates 10 | Receive a notification when an event in a shared calendar was added, modified or deleted. 11 | 12 | 13 | 2.7.0 14 | agpl 15 | Joas Schilling 16 | 17 | EventUpdateNotification 18 | 19 | 20 | 21 | 22 | 23 | 24 | office 25 | organization 26 | 27 | https://github.com/nickv-nextcloud/event_update_notification 28 | https://github.com/nickv-nextcloud/event_update_notification/issues 29 | https://github.com/nickv-nextcloud/event_update_notification.git 30 | 31 | https://github.com/nickv-nextcloud/event_update_notification/raw/main/docs/demo.png 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /lib/AppInfo/Application.php: -------------------------------------------------------------------------------- 1 | registerEventListener(CalendarObjectCreatedEvent::class, EventListener::class); 31 | $context->registerEventListener(CalendarObjectUpdatedEvent::class, EventListener::class); 32 | $context->registerEventListener(CalendarObjectDeletedEvent::class, EventListener::class); 33 | $context->registerEventListener(CalendarObjectMovedToTrashEvent::class, EventListener::class); 34 | } 35 | 36 | #[\Override] 37 | public function boot(IBootContext $context): void { 38 | $context->getServerContainer()->get(IManager::class)->registerNotifierService(Notifier::class); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: CC0-1.0 3 | 4 | # Makefile for building the project 5 | 6 | app_name=event_update_notification 7 | 8 | project_dir=$(CURDIR)/../$(app_name) 9 | build_dir=$(CURDIR)/build/artifacts 10 | appstore_dir=$(build_dir)/appstore 11 | source_dir=$(build_dir)/source 12 | sign_dir=$(build_dir)/sign 13 | package_name=$(app_name) 14 | cert_dir=$(HOME)/.nextcloud/certificates 15 | version+=main 16 | 17 | all: appstore 18 | 19 | release: appstore create-tag 20 | 21 | create-tag: 22 | git tag -s -a v$(version) -m "Tagging the $(version) release." 23 | git push origin v$(version) 24 | 25 | clean: 26 | rm -rf $(build_dir) 27 | rm -rf node_modules 28 | 29 | appstore: clean 30 | mkdir -p $(sign_dir) 31 | rsync -a \ 32 | --exclude=/build \ 33 | --exclude=/docs \ 34 | --exclude=/translationfiles \ 35 | --exclude=/.tx \ 36 | --exclude=/tests \ 37 | --exclude=/vendor \ 38 | --exclude=/.git \ 39 | --exclude=/screenshots \ 40 | --exclude=/.github \ 41 | --exclude=/l10n/l10n.pl \ 42 | --exclude=/CONTRIBUTING.md \ 43 | --exclude=/issue_template.md \ 44 | --exclude=/README.md \ 45 | --exclude=/.gitattributes \ 46 | --exclude=/.gitignore \ 47 | --exclude=/.php-cs-fixer.cache \ 48 | --exclude=/.php-cs-fixer.dist.php \ 49 | --exclude=/composer.json \ 50 | --exclude=/composer.lock \ 51 | --exclude=/Makefile \ 52 | --exclude=/psalm.xml \ 53 | $(project_dir)/ $(sign_dir)/$(app_name) 54 | tar -czf $(build_dir)/$(app_name).tar.gz \ 55 | -C $(sign_dir) $(app_name) 56 | @if [ -f $(cert_dir)/$(app_name).key ]; then \ 57 | echo "Signing package…"; \ 58 | openssl dgst -sha512 -sign $(cert_dir)/$(app_name).key $(build_dir)/$(app_name).tar.gz | openssl base64; \ 59 | fi 60 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-approve-merge.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Dependabot 10 | 11 | on: 12 | pull_request_target: # zizmor: ignore[dangerous-triggers] 13 | branches: 14 | - main 15 | - master 16 | - stable* 17 | 18 | permissions: 19 | contents: read 20 | 21 | concurrency: 22 | group: dependabot-approve-merge-${{ github.head_ref || github.run_id }} 23 | cancel-in-progress: true 24 | 25 | jobs: 26 | auto-approve-merge: 27 | if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'renovate[bot]' 28 | runs-on: ubuntu-latest-low 29 | permissions: 30 | # for hmarr/auto-approve-action to approve PRs 31 | pull-requests: write 32 | 33 | steps: 34 | - name: Disabled on forks 35 | if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} 36 | run: | 37 | echo 'Can not approve PRs from forks' 38 | exit 1 39 | 40 | # GitHub actions bot approve 41 | - uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2 42 | with: 43 | github-token: ${{ secrets.GITHUB_TOKEN }} 44 | 45 | # Nextcloud bot approve and merge request 46 | - uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a # v2 47 | with: 48 | target: minor 49 | github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }} 50 | -------------------------------------------------------------------------------- /.github/workflows/lint-php-cs.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint php-cs 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-php-cs-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | lint: 22 | runs-on: ubuntu-latest 23 | 24 | name: php-cs 25 | 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 29 | with: 30 | persist-credentials: false 31 | 32 | - name: Get php version 33 | id: versions 34 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 35 | 36 | - name: Set up php${{ steps.versions.outputs.php-min }} 37 | uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1 38 | with: 39 | php-version: ${{ steps.versions.outputs.php-min }} 40 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 41 | coverage: none 42 | ini-file: development 43 | env: 44 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 45 | 46 | - name: Install dependencies 47 | run: | 48 | composer remove nextcloud/ocp --dev --no-scripts 49 | composer i 50 | 51 | - name: Lint 52 | run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 ) 53 | -------------------------------------------------------------------------------- /.github/workflows/update-nextcloud-ocp-approve-merge.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Auto approve nextcloud/ocp 10 | 11 | on: 12 | pull_request_target: # zizmor: ignore[dangerous-triggers] 13 | branches: 14 | - main 15 | - master 16 | - stable* 17 | 18 | permissions: 19 | contents: read 20 | 21 | concurrency: 22 | group: update-nextcloud-ocp-approve-merge-${{ github.head_ref || github.run_id }} 23 | cancel-in-progress: true 24 | 25 | jobs: 26 | auto-approve-merge: 27 | if: github.actor == 'nextcloud-command' 28 | runs-on: ubuntu-latest-low 29 | permissions: 30 | # for hmarr/auto-approve-action to approve PRs 31 | pull-requests: write 32 | # for alexwilson/enable-github-automerge-action to approve PRs 33 | contents: write 34 | 35 | steps: 36 | - name: Disabled on forks 37 | if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} 38 | run: | 39 | echo 'Can not approve PRs from forks' 40 | exit 1 41 | 42 | - uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0 43 | id: branchname 44 | with: 45 | repo-token: ${{ secrets.GITHUB_TOKEN }} 46 | 47 | # GitHub actions bot approve 48 | - uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2 49 | if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp') 50 | with: 51 | github-token: ${{ secrets.GITHUB_TOKEN }} 52 | 53 | # Enable GitHub auto merge 54 | - name: Auto merge 55 | uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0 56 | if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp') 57 | with: 58 | github-token: ${{ secrets.GITHUB_TOKEN }} 59 | -------------------------------------------------------------------------------- /.github/workflows/lint-php.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint php 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-php-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | matrix: 22 | runs-on: ubuntu-latest-low 23 | outputs: 24 | php-versions: ${{ steps.versions.outputs.php-versions }} 25 | steps: 26 | - name: Checkout app 27 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 28 | with: 29 | persist-credentials: false 30 | 31 | - name: Get version matrix 32 | id: versions 33 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0 34 | 35 | php-lint: 36 | runs-on: ubuntu-latest 37 | needs: matrix 38 | strategy: 39 | matrix: 40 | php-versions: ${{fromJson(needs.matrix.outputs.php-versions)}} 41 | 42 | name: php-lint 43 | 44 | steps: 45 | - name: Checkout 46 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 47 | with: 48 | persist-credentials: false 49 | 50 | - name: Set up php ${{ matrix.php-versions }} 51 | uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1 52 | with: 53 | php-version: ${{ matrix.php-versions }} 54 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 55 | coverage: none 56 | ini-file: development 57 | env: 58 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 59 | 60 | - name: Lint 61 | run: composer run lint 62 | 63 | summary: 64 | permissions: 65 | contents: none 66 | runs-on: ubuntu-latest-low 67 | needs: php-lint 68 | 69 | if: always() 70 | 71 | name: php-lint-summary 72 | 73 | steps: 74 | - name: Summary status 75 | run: if ${{ needs.php-lint.result != 'success' && needs.php-lint.result != 'skipped' }}; then exit 1; fi 76 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | # Changelog 7 | All notable changes to this project will be documented in this file. 8 | 9 | ## 2.7.0 – 2025-09-26 10 | ### Added 11 | - ✨ Add support for Nextcloud 32 12 | - 🏚️ Drop support for Nextcloud 30 13 | 14 | ## 2.6.1 – 2025-02-19 15 | ### Fixed 16 | - 🌐 Fix timezone in notification reminder email 17 | 18 | ## 2.6.0 – 2025-02-15 19 | ### Added 20 | - ✨ Add support for Nextcloud 31 21 | 22 | ## 2.5.0 – 2024-08-27 23 | ### Added 24 | - ✨ Add support for Nextcloud 30 25 | - 🏚️ Drop support for Nextcloud 27, 28 and 29 26 | 27 | ## 2.4.0 – 2024-04-19 28 | ### Added 29 | - ✨ Add support for Nextcloud 29 30 | - 🏚️ Drop support for Nextcloud 26 31 | 32 | ## 2.3.0 – 2023-12-01 33 | ### Added 34 | - ✨ Add support for Nextcloud 28 35 | - 🏚️ Drop support for Nextcloud 25 36 | 37 | ## 2.2.0 – 2023-05-15 38 | ### Added 39 | - ✨ Add support for Nextcloud 27 40 | - 🏚️ Drop support for Nextcloud 24 41 | 42 | ## 2.1.0 – 2023-03-27 43 | ### Added 44 | - ✨ Add support for Nextcloud 26 45 | - 🏚️ Drop support for Nextcloud 23 46 | 47 | ## 2.0.0 – 2022-10-13 48 | ### Added 49 | - 🌏 Make events clickable if calendar is installed 50 | 51 | ### Changed 52 | - ✨ Add support for Nextcloud 25 53 | - 🏚️ Drop support for Nextcloud 22 54 | 55 | ## 1.5.0 – 2022-04-08 56 | ### Changed 57 | - Support for Nextcloud 24 58 | 59 | ## 1.4.0 – 2021-07-06 60 | ### Changed 61 | - Support for Nextcloud 23 62 | 63 | ## 1.3.0 – 2021-07-06 64 | ### Changed 65 | - Support for Nextcloud 22 with calendar trashbin 66 | 67 | ## 1.2.0 – 2021-01-08 68 | ### Changed 69 | - Support for Nextcloud 21 70 | 71 | ## 1.1.0 – 2020-08-28 72 | ### Changed 73 | - Support for Nextcloud 20 74 | 75 | ## 1.0.2 – 2020-06-03 76 | ### Changed 77 | - Support for Nextcloud 19 78 | 79 | ## 1.0.1 – 2020-01-15 80 | ### Changed 81 | - Support for Nextcloud 18 82 | 83 | ## 1.0.0 – 2019-09-04 84 | ### Changed 85 | - Support for Nextcloud 17 86 | 87 | ## 0.3.4 – 2019-03-29 88 | ### Changed 89 | - Support for Nextcloud 16 90 | 91 | ## 0.3.3 – 2019-02-28 92 | ### Fixed 93 | - Automatically remove notifications when the event is in the past 94 | 95 | ## 0.3.2 – 2019-01-09 96 | ### Fixed 97 | - Private events no longer trigger notifications for sharees 98 | 99 | ## 0.3.1 – 2018-12-01 100 | ### Changed 101 | - Support for Nextcloud 15 102 | 103 | ### Fixed 104 | - No notifications for events in the past 105 | 106 | ## 0.3.0 – 2018-08-27 107 | ### Fixed 108 | - Fix calendar icon to black in Nextcloud 14 109 | -------------------------------------------------------------------------------- /.github/workflows/psalm-matrix.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Static analysis 10 | 11 | on: pull_request 12 | 13 | concurrency: 14 | group: psalm-${{ github.head_ref || github.run_id }} 15 | cancel-in-progress: true 16 | 17 | permissions: 18 | contents: read 19 | 20 | jobs: 21 | matrix: 22 | runs-on: ubuntu-latest-low 23 | outputs: 24 | ocp-matrix: ${{ steps.versions.outputs.ocp-matrix }} 25 | steps: 26 | - name: Checkout app 27 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 28 | with: 29 | persist-credentials: false 30 | 31 | - name: Get version matrix 32 | id: versions 33 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 34 | 35 | - name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml 36 | run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml 37 | 38 | static-analysis: 39 | runs-on: ubuntu-latest 40 | needs: matrix 41 | strategy: 42 | # do not stop on another job's failure 43 | fail-fast: false 44 | matrix: ${{ fromJson(needs.matrix.outputs.ocp-matrix) }} 45 | 46 | name: static-psalm-analysis ${{ matrix.ocp-version }} 47 | steps: 48 | - name: Checkout 49 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 50 | with: 51 | persist-credentials: false 52 | 53 | - name: Set up php${{ matrix.php-min }} 54 | uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1 55 | with: 56 | php-version: ${{ matrix.php-min }} 57 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 58 | coverage: none 59 | ini-file: development 60 | # Temporary workaround for missing pcntl_* in PHP 8.3 61 | ini-values: disable_functions= 62 | env: 63 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 64 | 65 | - name: Install dependencies 66 | run: | 67 | composer remove nextcloud/ocp --dev --no-scripts 68 | composer i 69 | 70 | 71 | - name: Install dependencies # zizmor: ignore[template-injection] 72 | run: composer require --dev 'nextcloud/ocp:${{ matrix.ocp-version }}' --ignore-platform-reqs --with-dependencies 73 | 74 | - name: Run coding standards check 75 | run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github 76 | 77 | summary: 78 | runs-on: ubuntu-latest-low 79 | needs: static-analysis 80 | 81 | if: always() 82 | 83 | name: static-psalm-analysis-summary 84 | 85 | steps: 86 | - name: Summary status 87 | run: if ${{ needs.static-analysis.result != 'success' }}; then exit 1; fi 88 | -------------------------------------------------------------------------------- /.github/workflows/update-nextcloud-ocp-matrix.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Update nextcloud/ocp 10 | 11 | on: 12 | workflow_dispatch: 13 | schedule: 14 | - cron: '5 2 * * 0' 15 | 16 | permissions: 17 | contents: read 18 | issues: write 19 | 20 | jobs: 21 | update-nextcloud-ocp: 22 | runs-on: ubuntu-latest 23 | 24 | strategy: 25 | fail-fast: false 26 | matrix: 27 | branches: 28 | - ${{ github.event.repository.default_branch }} 29 | 30 | name: update-nextcloud-ocp-${{ matrix.branches }} 31 | 32 | steps: 33 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 34 | with: 35 | persist-credentials: false 36 | ref: ${{ matrix.branches }} 37 | submodules: true 38 | 39 | - name: Get version matrix 40 | id: versions 41 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 42 | 43 | - name: Set up php8.2 44 | uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1 45 | with: 46 | php-version: 8.2 47 | # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation 48 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 49 | coverage: none 50 | env: 51 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 52 | 53 | - name: Read codeowners 54 | id: codeowners 55 | run: | 56 | grep '/appinfo/info.xml' .github/CODEOWNERS | cut -f 2- -d ' ' | xargs | awk '{ print "codeowners="$0 }' >> $GITHUB_OUTPUT 57 | continue-on-error: true 58 | 59 | - name: Composer install 60 | run: composer install 61 | 62 | - name: Composer update nextcloud/ocp 63 | id: update_branch 64 | run: composer require --dev nextcloud/ocp:dev-${{ steps.versions.outputs.branches-min }} 65 | 66 | - name: Raise on issue on failure 67 | uses: dacbd/create-issue-action@cdb57ab6ff8862aa09fee2be6ba77a59581921c2 # v2.0.0 68 | if: ${{ failure() && steps.update_branch.conclusion == 'failure' }} 69 | with: 70 | token: ${{ secrets.GITHUB_TOKEN }} 71 | title: 'Failed to update nextcloud/ocp package' 72 | body: 'Please check the output of the GitHub action and manually resolve the issues
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
${{ steps.codeowners.outputs.codeowners }}' 73 | 74 | - name: Reset checkout 3rdparty 75 | run: | 76 | git clean -f 3rdparty 77 | git checkout 3rdparty 78 | continue-on-error: true 79 | 80 | - name: Reset checkout vendor 81 | run: | 82 | git clean -f vendor 83 | git checkout vendor 84 | continue-on-error: true 85 | 86 | - name: Reset checkout vendor-bin 87 | run: | 88 | git clean -f vendor-bin 89 | git checkout vendor-bin 90 | continue-on-error: true 91 | 92 | - name: Create Pull Request 93 | uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 94 | with: 95 | token: ${{ secrets.COMMAND_BOT_PAT }} 96 | commit-message: 'chore(dev-deps): Bump nextcloud/ocp package' 97 | committer: GitHub 98 | author: nextcloud-command 99 | signoff: true 100 | branch: 'automated/noid/${{ matrix.branches }}-update-nextcloud-ocp' 101 | title: '[${{ matrix.branches }}] Update nextcloud/ocp dependency' 102 | body: | 103 | Auto-generated update of [nextcloud/ocp](https://github.com/nextcloud-deps/ocp/) dependency 104 | labels: | 105 | dependencies 106 | 3. to review 107 | -------------------------------------------------------------------------------- /LICENSES/CC0-1.0.txt: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /lib/Notifier.php: -------------------------------------------------------------------------------- 1 | languageFactory->get('event_update_notification')->t('Calendar event update notifications'); 56 | } 57 | 58 | #[\Override] 59 | public function prepare(INotification $notification, string $languageCode): INotification { 60 | if ($notification->getApp() !== 'event_update_notification') { 61 | throw new UnknownNotificationException('Invalid app'); 62 | } 63 | 64 | $this->l = $this->languageFactory->get('event_update_notification', $languageCode); 65 | 66 | $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar.svg'))); 67 | 68 | if ($notification->getSubject() === self::SUBJECT_OBJECT_ADD . '_event') { 69 | $subject = $this->l->t('{actor} created {event} in {calendar}'); 70 | } elseif ($notification->getSubject() === self::SUBJECT_OBJECT_DELETE . '_event') { 71 | $subject = $this->l->t('{actor} deleted {event} from {calendar}'); 72 | } elseif ($notification->getSubject() === self::SUBJECT_OBJECT_UPDATE . '_event') { 73 | $subject = $this->l->t('{actor} updated {event} in {calendar}'); 74 | } else { 75 | throw new AlreadyProcessedException(); 76 | } 77 | 78 | $params = $notification->getMessageParameters(); 79 | $start = \DateTime::createFromFormat(\DateTime::ATOM, $params['start']); 80 | 81 | if ($start < $this->timeFactory->getDateTime()) { 82 | throw new AlreadyProcessedException(); 83 | } 84 | 85 | $timeZone = $this->getUserTimezone($notification->getUser()); 86 | if (!empty($params['hasTime'])) { 87 | $notification->setParsedMessage( 88 | $this->dateTimeFormatter->formatDateTime( 89 | $start, 90 | 'long', 'short', $timeZone, 91 | $this->l 92 | ) 93 | ); 94 | } else { 95 | $notification->setParsedMessage( 96 | $this->dateTimeFormatter->formatDate( 97 | $start, 98 | 'long', $timeZone, 99 | $this->l 100 | ) 101 | ); 102 | } 103 | 104 | $parsedParameters = $this->getParameters($notification); 105 | $this->setSubjects($notification, $subject, $parsedParameters); 106 | 107 | return $notification; 108 | } 109 | 110 | public function getUserTimezone(string $userId): \DateTimeZone { 111 | return $this->timeFactory->getTimeZone( 112 | $this->config->getUserValue( 113 | $userId, 114 | 'core', 115 | 'timezone', 116 | $this->config->getSystemValueString('default_timezone', 'UTC') 117 | ) 118 | ); 119 | } 120 | 121 | /** 122 | * @param array $parameters 123 | */ 124 | protected function setSubjects(INotification $notification, string $subject, array $parameters) { 125 | $placeholders = $replacements = []; 126 | foreach ($parameters as $placeholder => $parameter) { 127 | $placeholders[] = '{' . $placeholder . '}'; 128 | $replacements[] = $parameter['name']; 129 | } 130 | 131 | $notification->setParsedSubject(str_replace($placeholders, $replacements, $subject)) 132 | ->setRichSubject($subject, $parameters); 133 | } 134 | 135 | protected function getParameters(INotification $notification): array { 136 | $subject = $notification->getSubject(); 137 | $parameters = $notification->getSubjectParameters(); 138 | 139 | switch ($subject) { 140 | case self::SUBJECT_OBJECT_ADD . '_event': 141 | case self::SUBJECT_OBJECT_DELETE . '_event': 142 | case self::SUBJECT_OBJECT_UPDATE . '_event': 143 | return [ 144 | 'actor' => $this->generateUserParameter($parameters['actor']), 145 | 'calendar' => $this->generateCalendarParameter($parameters['calendar']), 146 | 'event' => $this->generateObjectParameter($parameters['object']), 147 | ]; 148 | } 149 | 150 | throw new UnknownNotificationException('Invalid subject'); 151 | } 152 | 153 | protected function generateObjectParameter(array $eventData): array { 154 | if (!isset($eventData['id'], $eventData['name'])) { 155 | throw new UnknownNotificationException(' Invalid data'); 156 | } 157 | 158 | if (!empty($eventData['classified'])) { 159 | // Busy is stored untranslated in the database, so we translate it here. 160 | $eventData['name'] = $this->l->t('Busy'); 161 | } 162 | 163 | $params = [ 164 | 'type' => 'calendar-event', 165 | 'id' => $eventData['id'], 166 | 'name' => $eventData['name'], 167 | ]; 168 | 169 | if (isset($eventData['link']) && is_array($eventData['link']) && $this->appManager->isEnabledForUser('calendar')) { 170 | try { 171 | // The calendar app needs to be manually loaded for the routes to be loaded 172 | $this->appManager->loadApp('calendar'); 173 | $linkData = $eventData['link']; 174 | $objectId = base64_encode('/remote.php/dav/calendars/' . $linkData['owner'] . '/' . $linkData['calendar_uri'] . '/' . $linkData['object_uri']); 175 | $link = [ 176 | 'view' => 'dayGridMonth', 177 | 'timeRange' => 'now', 178 | 'mode' => 'sidebar', 179 | 'objectId' => $objectId, 180 | 'recurrenceId' => 'next' 181 | ]; 182 | $params['link'] = $this->url->linkToRouteAbsolute('calendar.view.indexview.timerange.edit', $link); 183 | } catch (\Exception) { 184 | // Do nothing 185 | } 186 | } 187 | 188 | return $params; 189 | } 190 | 191 | protected function generateCalendarParameter(array $data): array { 192 | if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI 193 | && $data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) { 194 | return [ 195 | 'type' => 'calendar', 196 | 'id' => (string)$data['id'], 197 | 'name' => $this->l->t('Personal'), 198 | ]; 199 | } 200 | 201 | return [ 202 | 'type' => 'calendar', 203 | 'id' => (string)$data['id'], 204 | 'name' => $data['name'], 205 | ]; 206 | } 207 | 208 | protected function generateUserParameter(string $uid): array { 209 | if (!isset($this->userDisplayNames[$uid])) { 210 | $this->userDisplayNames[$uid] = $this->getUserDisplayName($uid); 211 | } 212 | 213 | return [ 214 | 'type' => 'user', 215 | 'id' => $uid, 216 | 'name' => $this->userDisplayNames[$uid], 217 | ]; 218 | } 219 | 220 | protected function getUserDisplayName(string $uid): string { 221 | $user = $this->userManager->get($uid); 222 | if ($user instanceof IUser) { 223 | return $user->getDisplayName(); 224 | } 225 | return $uid; 226 | } 227 | } 228 | -------------------------------------------------------------------------------- /.github/workflows/appstore-build-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Build and publish app release 10 | 11 | on: 12 | release: 13 | types: [published] 14 | 15 | permissions: 16 | contents: write 17 | 18 | jobs: 19 | build_and_publish: 20 | runs-on: ubuntu-latest 21 | 22 | # Only allowed to be run on nextcloud-releases repositories 23 | if: ${{ github.repository_owner == 'nextcloud-releases' }} 24 | 25 | steps: 26 | - name: Check actor permission 27 | uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0 28 | with: 29 | require: write 30 | 31 | - name: Set app env 32 | run: | 33 | # Split and keep last 34 | echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV 35 | echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV 36 | 37 | - name: Checkout 38 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 39 | with: 40 | persist-credentials: false 41 | path: ${{ env.APP_NAME }} 42 | 43 | - name: Get app version number 44 | id: app-version 45 | uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # master 46 | with: 47 | filename: ${{ env.APP_NAME }}/appinfo/info.xml 48 | expression: "//info//version/text()" 49 | 50 | - name: Validate app version against tag 51 | run: | 52 | [ "${{ env.APP_VERSION }}" = "v${{ fromJSON(steps.app-version.outputs.result).version }}" ] 53 | 54 | - name: Get appinfo data 55 | id: appinfo 56 | uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # master 57 | with: 58 | filename: ${{ env.APP_NAME }}/appinfo/info.xml 59 | expression: "//info//dependencies//nextcloud/@min-version" 60 | 61 | - name: Read package.json node and npm engines version 62 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 63 | id: versions 64 | # Continue if no package.json 65 | continue-on-error: true 66 | with: 67 | path: ${{ env.APP_NAME }} 68 | fallbackNode: '^20' 69 | fallbackNpm: '^10' 70 | 71 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }} 72 | # Skip if no package.json 73 | if: ${{ steps.versions.outputs.nodeVersion }} 74 | uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 75 | with: 76 | node-version: ${{ steps.versions.outputs.nodeVersion }} 77 | 78 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }} 79 | # Skip if no package.json 80 | if: ${{ steps.versions.outputs.npmVersion }} 81 | run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' 82 | 83 | - name: Get php version 84 | id: php-versions 85 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 86 | with: 87 | filename: ${{ env.APP_NAME }}/appinfo/info.xml 88 | 89 | - name: Set up php ${{ steps.php-versions.outputs.php-min }} 90 | uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1 91 | with: 92 | php-version: ${{ steps.php-versions.outputs.php-min }} 93 | coverage: none 94 | env: 95 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 96 | 97 | - name: Check composer.json 98 | id: check_composer 99 | uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 100 | with: 101 | files: "${{ env.APP_NAME }}/composer.json" 102 | 103 | - name: Install composer dependencies 104 | if: steps.check_composer.outputs.files_exists == 'true' 105 | run: | 106 | cd ${{ env.APP_NAME }} 107 | composer install --no-dev 108 | 109 | - name: Build ${{ env.APP_NAME }} 110 | # Skip if no package.json 111 | if: ${{ steps.versions.outputs.nodeVersion }} 112 | env: 113 | CYPRESS_INSTALL_BINARY: 0 114 | run: | 115 | cd ${{ env.APP_NAME }} 116 | npm ci 117 | npm run build --if-present 118 | 119 | - name: Check Krankerl config 120 | id: krankerl 121 | uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 122 | with: 123 | files: ${{ env.APP_NAME }}/krankerl.toml 124 | 125 | - name: Install Krankerl 126 | if: steps.krankerl.outputs.files_exists == 'true' 127 | run: | 128 | wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb 129 | sudo dpkg -i krankerl_0.14.0_amd64.deb 130 | 131 | - name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl 132 | if: steps.krankerl.outputs.files_exists == 'true' 133 | run: | 134 | cd ${{ env.APP_NAME }} 135 | krankerl package 136 | 137 | - name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with makefile 138 | if: steps.krankerl.outputs.files_exists != 'true' 139 | run: | 140 | cd ${{ env.APP_NAME }} 141 | make appstore 142 | 143 | - name: Checkout server ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }} 144 | continue-on-error: true 145 | id: server-checkout 146 | run: | 147 | NCVERSION='${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}' 148 | wget --quiet https://download.nextcloud.com/server/releases/latest-$NCVERSION.zip 149 | unzip latest-$NCVERSION.zip 150 | 151 | - name: Checkout server master fallback 152 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 153 | if: ${{ steps.server-checkout.outcome != 'success' }} 154 | with: 155 | persist-credentials: false 156 | submodules: true 157 | repository: nextcloud/server 158 | path: nextcloud 159 | 160 | - name: Sign app 161 | run: | 162 | # Extracting release 163 | cd ${{ env.APP_NAME }}/build/artifacts 164 | tar -xvf ${{ env.APP_NAME }}.tar.gz 165 | cd ../../../ 166 | # Setting up keys 167 | echo '${{ secrets.APP_PRIVATE_KEY }}' > ${{ env.APP_NAME }}.key 168 | wget --quiet "https://github.com/nextcloud/app-certificate-requests/raw/master/${{ env.APP_NAME }}/${{ env.APP_NAME }}.crt" 169 | # Signing 170 | php nextcloud/occ integrity:sign-app --privateKey=../${{ env.APP_NAME }}.key --certificate=../${{ env.APP_NAME }}.crt --path=../${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }} 171 | # Rebuilding archive 172 | cd ${{ env.APP_NAME }}/build/artifacts 173 | tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }} 174 | 175 | - name: Attach tarball to github release 176 | uses: svenstaro/upload-release-action@ebd922b779f285dafcac6410a0710daee9c12b82 # v2 177 | id: attach_to_release 178 | with: 179 | repo_token: ${{ secrets.GITHUB_TOKEN }} 180 | file: ${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}.tar.gz 181 | asset_name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}.tar.gz 182 | tag: ${{ github.ref }} 183 | overwrite: true 184 | 185 | - name: Upload app to Nextcloud appstore 186 | uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1 187 | with: 188 | app_name: ${{ env.APP_NAME }} 189 | appstore_token: ${{ secrets.APPSTORE_TOKEN }} 190 | download_url: ${{ steps.attach_to_release.outputs.browser_download_url }} 191 | app_private_key: ${{ secrets.APP_PRIVATE_KEY }} 192 | -------------------------------------------------------------------------------- /lib/EventListener.php: -------------------------------------------------------------------------------- 1 | 29 | */ 30 | class EventListener implements IEventListener { 31 | public function __construct( 32 | protected INotificationManager $notificationManager, 33 | protected IGroupManager $groupManager, 34 | protected IUserSession $userSession, 35 | ) { 36 | } 37 | 38 | #[\Override] 39 | public function handle(Event $event): void { 40 | if (!($event instanceof CalendarObjectCreatedEvent) 41 | && !($event instanceof CalendarObjectUpdatedEvent) 42 | && !($event instanceof CalendarObjectDeletedEvent) 43 | && !($event instanceof CalendarObjectMovedToTrashEvent)) { 44 | return; 45 | } 46 | 47 | if ($event instanceof CalendarObjectCreatedEvent) { 48 | $subject = Notifier::SUBJECT_OBJECT_ADD; 49 | } elseif ($event instanceof CalendarObjectUpdatedEvent) { 50 | $subject = Notifier::SUBJECT_OBJECT_UPDATE; 51 | } else { 52 | if ($event instanceof CalendarObjectDeletedEvent 53 | && substr($event->getObjectData()['uri'], -12) === '-deleted.ics') { 54 | return; 55 | } 56 | $subject = Notifier::SUBJECT_OBJECT_DELETE; 57 | } 58 | 59 | $this->onTouchCalendarObject($subject, $event->getCalendarData(), $event->getShares(), $event->getObjectData()); 60 | } 61 | 62 | /** 63 | * Creates activities when a calendar object was created/updated/deleted 64 | * 65 | * @param string $action 66 | * @param array $calendarData 67 | * @param array $shares 68 | * @param array $objectData 69 | * @throws \Sabre\VObject\Recur\MaxInstancesExceededException 70 | * @throws \Sabre\VObject\Recur\NoInstancesException 71 | */ 72 | public function onTouchCalendarObject(string $action, array $calendarData, array $shares, array $objectData): void { 73 | if (!isset($calendarData['principaluri'])) { 74 | return; 75 | } 76 | 77 | $principal = explode('/', $calendarData['principaluri']); 78 | $owner = array_pop($principal); 79 | 80 | $currentUser = $this->userSession->getUser(); 81 | if ($currentUser instanceof IUser) { 82 | $currentUser = $currentUser->getUID(); 83 | } else { 84 | $currentUser = $owner; 85 | } 86 | 87 | $object = $this->getObjectNameAndType($objectData); 88 | if ($object === false || $object['type'] !== 'event') { 89 | // For now we only support events 90 | return; 91 | } 92 | 93 | $classification = $objectData['classification'] ?? CalDavBackend::CLASSIFICATION_PUBLIC; 94 | $action .= '_' . $object['type']; 95 | [$dateTime, $hasTime] = $this->getNearestDateTime($objectData['calendardata']); 96 | $now = new \DateTime(); 97 | 98 | if ($dateTime < $now) { 99 | // Do not notify about past events 100 | return; 101 | } 102 | 103 | $notification = $this->notificationManager->createNotification(); 104 | $notification->setApp('event_update_notification') 105 | ->setObject('calendar', (string)$calendarData['id']) 106 | ->setUser($currentUser) 107 | ->setDateTime($now) 108 | ->setMessage('event_update_notification', [ 109 | 'start' => $dateTime->format(\DateTime::ATOM), 110 | 'hasTime' => $hasTime, 111 | ]); 112 | 113 | $users = $this->getUsersForShares($shares, $owner, $calendarData['id']); 114 | 115 | foreach ($users as $user) { 116 | if ($user === $currentUser) { 117 | continue; 118 | } 119 | 120 | if ($classification === CalDavBackend::CLASSIFICATION_PRIVATE && $user !== $owner) { 121 | // Private events are only available to the owner 122 | continue; 123 | } 124 | 125 | $isClassified = $classification === CalDavBackend::CLASSIFICATION_CONFIDENTIAL && $user !== $owner; 126 | 127 | $notification->setUser($user) 128 | ->setSubject($action, 129 | [ 130 | 'actor' => $currentUser, 131 | 'calendar' => [ 132 | 'id' => (int)$calendarData['id'], 133 | 'uri' => $calendarData['uri'], 134 | 'name' => $calendarData['{DAV:}displayname'], 135 | ], 136 | 'object' => [ 137 | 'id' => $object['id'], 138 | 'name' => $isClassified ? 'Busy' : $object['name'], 139 | 'classified' => $isClassified, 140 | 'link' => [ 141 | 'owner' => $owner, 142 | 'calendar_uri' => $calendarData['uri'], 143 | 'object_uri' => $objectData['uri'], 144 | ], 145 | ], 146 | ] 147 | ); 148 | $this->notificationManager->notify($notification); 149 | } 150 | } 151 | 152 | /** 153 | * @param array $objectData 154 | * @return string[]|bool 155 | */ 156 | protected function getObjectNameAndType(array $objectData) { 157 | $vObject = Reader::read($objectData['calendardata']); 158 | $component = $componentType = null; 159 | foreach ($vObject->getComponents() as $component) { 160 | if (\in_array($component->name, ['VEVENT', 'VTODO'])) { 161 | $componentType = $component->name; 162 | break; 163 | } 164 | } 165 | 166 | if (!$componentType) { 167 | // Calendar objects must have a VEVENT or VTODO component 168 | return false; 169 | } 170 | 171 | if ($componentType === 'VEVENT') { 172 | return ['id' => (string)$component->UID, 'name' => (string)$component->SUMMARY, 'type' => 'event']; 173 | } 174 | return ['id' => (string)$component->UID, 'name' => (string)$component->SUMMARY, 'type' => 'todo', 'status' => (string)$component->STATUS]; 175 | } 176 | 177 | /** 178 | * Get all users that have access to a given calendar 179 | * 180 | * @param array $shares 181 | * @param string $owner 182 | * @return string[] 183 | */ 184 | protected function getUsersForShares(array $shares, string $owner, int $calendarId): array { 185 | $users = [$owner]; 186 | $groups = []; 187 | foreach ($shares as $share) { 188 | $prinical = explode('/', $share['{http://owncloud.org/ns}principal']); 189 | if ($prinical[1] === 'users') { 190 | $users[] = $prinical[2]; 191 | } elseif ($prinical[1] === 'groups') { 192 | $groups[] = $prinical[2]; 193 | } 194 | } 195 | 196 | $groupAddedUsers = false; 197 | if (!empty($groups)) { 198 | foreach ($groups as $gid) { 199 | $group = $this->groupManager->get($gid); 200 | if ($group instanceof IGroup) { 201 | foreach ($group->getUsers() as $user) { 202 | $groupAddedUsers = true; 203 | $users[] = $user->getUID(); 204 | } 205 | } 206 | } 207 | } 208 | 209 | $users = array_unique($users); 210 | 211 | if (!$groupAddedUsers) { 212 | return $users; 213 | } 214 | 215 | /** @var \OCA\DAV\CalDAV\Sharing\Service $service */ 216 | $service = \OCP\Server::get(\OCA\DAV\CalDAV\Sharing\Service::class); 217 | $unshares = $service->getUnshares($calendarId); 218 | $usersToRemove = []; 219 | foreach ($unshares as $unshare) { 220 | 221 | $prinical = explode('/', $unshare['principaluri']); 222 | if ($prinical[1] === 'users') { 223 | $usersToRemove[] = $prinical[2]; 224 | } 225 | } 226 | 227 | $users = array_diff($users, $usersToRemove); 228 | 229 | return $users; 230 | } 231 | 232 | /** 233 | * @param string $data 234 | * @return array 235 | * @throws \Sabre\VObject\Recur\MaxInstancesExceededException 236 | * @throws \Sabre\VObject\Recur\NoInstancesException 237 | */ 238 | protected function getNearestDateTime(string $data): array { 239 | $vObject = \Sabre\VObject\Reader::read($data); 240 | /** @var VEvent $component */ 241 | $component = $vObject->VEVENT; 242 | 243 | if (!isset($component->RRULE)) { 244 | return [$component->DTSTART->getDateTime(), $component->DTSTART->hasTime()]; 245 | } 246 | 247 | $it = new EventIterator($vObject, (string)$component->UID); 248 | $start = $it->getDtStart(); 249 | $today = new \DateTime(); 250 | while ($it->valid() && $start < $today) { 251 | $start = $it->getDtStart(); 252 | $it->next(); 253 | } 254 | 255 | return [$start, $component->DTSTART->hasTime()]; 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "1ba0fac51f175eef9b95ce5fb1678d97", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "kubawerlos/php-cs-fixer-custom-fixers", 12 | "version": "v3.34.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", 16 | "reference": "230dd015f9fa253850430250caf65f5af1cc1e89" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/230dd015f9fa253850430250caf65f5af1cc1e89", 21 | "reference": "230dd015f9fa253850430250caf65f5af1cc1e89", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "ext-filter": "*", 26 | "ext-tokenizer": "*", 27 | "friendsofphp/php-cs-fixer": "^3.87", 28 | "php": "^7.4 || ^8.0" 29 | }, 30 | "require-dev": { 31 | "phpunit/phpunit": "^9.6.24 || ^10.5.51 || ^11.5.32" 32 | }, 33 | "type": "library", 34 | "autoload": { 35 | "psr-4": { 36 | "PhpCsFixerCustomFixers\\": "src" 37 | } 38 | }, 39 | "notification-url": "https://packagist.org/downloads/", 40 | "license": [ 41 | "MIT" 42 | ], 43 | "authors": [ 44 | { 45 | "name": "Kuba Werłos", 46 | "email": "werlos@gmail.com" 47 | } 48 | ], 49 | "description": "A set of custom fixers for PHP CS Fixer", 50 | "support": { 51 | "issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues", 52 | "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.34.0" 53 | }, 54 | "funding": [ 55 | { 56 | "url": "https://github.com/kubawerlos", 57 | "type": "github" 58 | } 59 | ], 60 | "time": "2025-09-21T10:46:10+00:00" 61 | }, 62 | { 63 | "name": "nextcloud/coding-standard", 64 | "version": "v1.4.0", 65 | "source": { 66 | "type": "git", 67 | "url": "https://github.com/nextcloud/coding-standard.git", 68 | "reference": "8e06808c1423e9208d63d1bd205b9a38bd400011" 69 | }, 70 | "dist": { 71 | "type": "zip", 72 | "url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/8e06808c1423e9208d63d1bd205b9a38bd400011", 73 | "reference": "8e06808c1423e9208d63d1bd205b9a38bd400011", 74 | "shasum": "" 75 | }, 76 | "require": { 77 | "kubawerlos/php-cs-fixer-custom-fixers": "^3.22", 78 | "php": "^8.0", 79 | "php-cs-fixer/shim": "^3.17" 80 | }, 81 | "type": "library", 82 | "autoload": { 83 | "psr-4": { 84 | "Nextcloud\\CodingStandard\\": "src" 85 | } 86 | }, 87 | "notification-url": "https://packagist.org/downloads/", 88 | "license": [ 89 | "MIT" 90 | ], 91 | "authors": [ 92 | { 93 | "name": "Christoph Wurst", 94 | "email": "christoph@winzerhof-wurst.at" 95 | } 96 | ], 97 | "description": "Nextcloud coding standards for the php cs fixer", 98 | "keywords": [ 99 | "dev" 100 | ], 101 | "support": { 102 | "issues": "https://github.com/nextcloud/coding-standard/issues", 103 | "source": "https://github.com/nextcloud/coding-standard/tree/v1.4.0" 104 | }, 105 | "time": "2025-06-19T12:27:27+00:00" 106 | }, 107 | { 108 | "name": "nextcloud/ocp", 109 | "version": "dev-stable31", 110 | "source": { 111 | "type": "git", 112 | "url": "https://github.com/nextcloud-deps/ocp.git", 113 | "reference": "6936f710b025679d886371461ef1cfb8026eaf6d" 114 | }, 115 | "dist": { 116 | "type": "zip", 117 | "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/6936f710b025679d886371461ef1cfb8026eaf6d", 118 | "reference": "6936f710b025679d886371461ef1cfb8026eaf6d", 119 | "shasum": "" 120 | }, 121 | "require": { 122 | "php": "~8.1 || ~8.2 || ~8.3 || ~8.4", 123 | "psr/clock": "^1.0", 124 | "psr/container": "^2.0.2", 125 | "psr/event-dispatcher": "^1.0", 126 | "psr/log": "^3.0.2" 127 | }, 128 | "type": "library", 129 | "extra": { 130 | "branch-alias": { 131 | "dev-stable31": "31.0.0-dev" 132 | } 133 | }, 134 | "notification-url": "https://packagist.org/downloads/", 135 | "license": [ 136 | "AGPL-3.0-or-later" 137 | ], 138 | "authors": [ 139 | { 140 | "name": "Christoph Wurst", 141 | "email": "christoph@winzerhof-wurst.at" 142 | }, 143 | { 144 | "name": "Joas Schilling", 145 | "email": "coding@schilljs.com" 146 | } 147 | ], 148 | "description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API", 149 | "support": { 150 | "issues": "https://github.com/nextcloud-deps/ocp/issues", 151 | "source": "https://github.com/nextcloud-deps/ocp/tree/stable31" 152 | }, 153 | "time": "2025-12-02T00:53:40+00:00" 154 | }, 155 | { 156 | "name": "php-cs-fixer/shim", 157 | "version": "v3.88.0", 158 | "source": { 159 | "type": "git", 160 | "url": "https://github.com/PHP-CS-Fixer/shim.git", 161 | "reference": "f0ac6c4006ed7817cadb251f2741db2c111a009f" 162 | }, 163 | "dist": { 164 | "type": "zip", 165 | "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/f0ac6c4006ed7817cadb251f2741db2c111a009f", 166 | "reference": "f0ac6c4006ed7817cadb251f2741db2c111a009f", 167 | "shasum": "" 168 | }, 169 | "require": { 170 | "ext-json": "*", 171 | "ext-tokenizer": "*", 172 | "php": "^7.4 || ^8.0" 173 | }, 174 | "replace": { 175 | "friendsofphp/php-cs-fixer": "self.version" 176 | }, 177 | "suggest": { 178 | "ext-dom": "For handling output formats in XML", 179 | "ext-mbstring": "For handling non-UTF8 characters." 180 | }, 181 | "bin": [ 182 | "php-cs-fixer", 183 | "php-cs-fixer.phar" 184 | ], 185 | "type": "application", 186 | "notification-url": "https://packagist.org/downloads/", 187 | "license": [ 188 | "MIT" 189 | ], 190 | "authors": [ 191 | { 192 | "name": "Fabien Potencier", 193 | "email": "fabien@symfony.com" 194 | }, 195 | { 196 | "name": "Dariusz Rumiński", 197 | "email": "dariusz.ruminski@gmail.com" 198 | } 199 | ], 200 | "description": "A tool to automatically fix PHP code style", 201 | "support": { 202 | "issues": "https://github.com/PHP-CS-Fixer/shim/issues", 203 | "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.88.0" 204 | }, 205 | "time": "2025-09-24T21:32:19+00:00" 206 | }, 207 | { 208 | "name": "psalm/phar", 209 | "version": "6.8.2", 210 | "source": { 211 | "type": "git", 212 | "url": "https://github.com/psalm/phar.git", 213 | "reference": "333a7a0d7805b699860262e1b4ea8cf14e1cd118" 214 | }, 215 | "dist": { 216 | "type": "zip", 217 | "url": "https://api.github.com/repos/psalm/phar/zipball/333a7a0d7805b699860262e1b4ea8cf14e1cd118", 218 | "reference": "333a7a0d7805b699860262e1b4ea8cf14e1cd118", 219 | "shasum": "" 220 | }, 221 | "require": { 222 | "php": "^7.1 || ^8.0" 223 | }, 224 | "conflict": { 225 | "vimeo/psalm": "*" 226 | }, 227 | "bin": [ 228 | "psalm.phar" 229 | ], 230 | "type": "library", 231 | "notification-url": "https://packagist.org/downloads/", 232 | "license": [ 233 | "MIT" 234 | ], 235 | "description": "Composer-based Psalm Phar", 236 | "support": { 237 | "issues": "https://github.com/psalm/phar/issues", 238 | "source": "https://github.com/psalm/phar/tree/6.8.2" 239 | }, 240 | "time": "2025-02-20T08:23:26+00:00" 241 | }, 242 | { 243 | "name": "psr/clock", 244 | "version": "1.0.0", 245 | "source": { 246 | "type": "git", 247 | "url": "https://github.com/php-fig/clock.git", 248 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" 249 | }, 250 | "dist": { 251 | "type": "zip", 252 | "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", 253 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", 254 | "shasum": "" 255 | }, 256 | "require": { 257 | "php": "^7.0 || ^8.0" 258 | }, 259 | "type": "library", 260 | "autoload": { 261 | "psr-4": { 262 | "Psr\\Clock\\": "src/" 263 | } 264 | }, 265 | "notification-url": "https://packagist.org/downloads/", 266 | "license": [ 267 | "MIT" 268 | ], 269 | "authors": [ 270 | { 271 | "name": "PHP-FIG", 272 | "homepage": "https://www.php-fig.org/" 273 | } 274 | ], 275 | "description": "Common interface for reading the clock.", 276 | "homepage": "https://github.com/php-fig/clock", 277 | "keywords": [ 278 | "clock", 279 | "now", 280 | "psr", 281 | "psr-20", 282 | "time" 283 | ], 284 | "support": { 285 | "issues": "https://github.com/php-fig/clock/issues", 286 | "source": "https://github.com/php-fig/clock/tree/1.0.0" 287 | }, 288 | "time": "2022-11-25T14:36:26+00:00" 289 | }, 290 | { 291 | "name": "psr/container", 292 | "version": "2.0.2", 293 | "source": { 294 | "type": "git", 295 | "url": "https://github.com/php-fig/container.git", 296 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 297 | }, 298 | "dist": { 299 | "type": "zip", 300 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 301 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 302 | "shasum": "" 303 | }, 304 | "require": { 305 | "php": ">=7.4.0" 306 | }, 307 | "type": "library", 308 | "extra": { 309 | "branch-alias": { 310 | "dev-master": "2.0.x-dev" 311 | } 312 | }, 313 | "autoload": { 314 | "psr-4": { 315 | "Psr\\Container\\": "src/" 316 | } 317 | }, 318 | "notification-url": "https://packagist.org/downloads/", 319 | "license": [ 320 | "MIT" 321 | ], 322 | "authors": [ 323 | { 324 | "name": "PHP-FIG", 325 | "homepage": "https://www.php-fig.org/" 326 | } 327 | ], 328 | "description": "Common Container Interface (PHP FIG PSR-11)", 329 | "homepage": "https://github.com/php-fig/container", 330 | "keywords": [ 331 | "PSR-11", 332 | "container", 333 | "container-interface", 334 | "container-interop", 335 | "psr" 336 | ], 337 | "support": { 338 | "issues": "https://github.com/php-fig/container/issues", 339 | "source": "https://github.com/php-fig/container/tree/2.0.2" 340 | }, 341 | "time": "2021-11-05T16:47:00+00:00" 342 | }, 343 | { 344 | "name": "psr/event-dispatcher", 345 | "version": "1.0.0", 346 | "source": { 347 | "type": "git", 348 | "url": "https://github.com/php-fig/event-dispatcher.git", 349 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 350 | }, 351 | "dist": { 352 | "type": "zip", 353 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 354 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 355 | "shasum": "" 356 | }, 357 | "require": { 358 | "php": ">=7.2.0" 359 | }, 360 | "type": "library", 361 | "extra": { 362 | "branch-alias": { 363 | "dev-master": "1.0.x-dev" 364 | } 365 | }, 366 | "autoload": { 367 | "psr-4": { 368 | "Psr\\EventDispatcher\\": "src/" 369 | } 370 | }, 371 | "notification-url": "https://packagist.org/downloads/", 372 | "license": [ 373 | "MIT" 374 | ], 375 | "authors": [ 376 | { 377 | "name": "PHP-FIG", 378 | "homepage": "http://www.php-fig.org/" 379 | } 380 | ], 381 | "description": "Standard interfaces for event handling.", 382 | "keywords": [ 383 | "events", 384 | "psr", 385 | "psr-14" 386 | ], 387 | "support": { 388 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 389 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 390 | }, 391 | "time": "2019-01-08T18:20:26+00:00" 392 | }, 393 | { 394 | "name": "psr/log", 395 | "version": "3.0.2", 396 | "source": { 397 | "type": "git", 398 | "url": "https://github.com/php-fig/log.git", 399 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" 400 | }, 401 | "dist": { 402 | "type": "zip", 403 | "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 404 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 405 | "shasum": "" 406 | }, 407 | "require": { 408 | "php": ">=8.0.0" 409 | }, 410 | "type": "library", 411 | "extra": { 412 | "branch-alias": { 413 | "dev-master": "3.x-dev" 414 | } 415 | }, 416 | "autoload": { 417 | "psr-4": { 418 | "Psr\\Log\\": "src" 419 | } 420 | }, 421 | "notification-url": "https://packagist.org/downloads/", 422 | "license": [ 423 | "MIT" 424 | ], 425 | "authors": [ 426 | { 427 | "name": "PHP-FIG", 428 | "homepage": "https://www.php-fig.org/" 429 | } 430 | ], 431 | "description": "Common interface for logging libraries", 432 | "homepage": "https://github.com/php-fig/log", 433 | "keywords": [ 434 | "log", 435 | "psr", 436 | "psr-3" 437 | ], 438 | "support": { 439 | "source": "https://github.com/php-fig/log/tree/3.0.2" 440 | }, 441 | "time": "2024-09-11T13:17:53+00:00" 442 | } 443 | ], 444 | "aliases": [], 445 | "minimum-stability": "stable", 446 | "stability-flags": { 447 | "nextcloud/ocp": 20 448 | }, 449 | "prefer-stable": false, 450 | "prefer-lowest": false, 451 | "platform": {}, 452 | "platform-dev": {}, 453 | "platform-overrides": { 454 | "php": "8.1.32" 455 | }, 456 | "plugin-api-version": "2.9.0" 457 | } 458 | --------------------------------------------------------------------------------