diff options
author | Jörn Friedrich Dreyer <jfd@butonic.de> | 2012-08-25 00:05:07 +0200 |
---|---|---|
committer | Jörn Friedrich Dreyer <jfd@butonic.de> | 2012-08-25 00:05:07 +0200 |
commit | c8255a170c2d7449b4e7728edd2237eea71dca80 (patch) | |
tree | e5a3854ec472be9700064bc7b689b8adf7c7f692 /apps/calendar | |
parent | 0c0ae928dcd483211a92303eb2b202453d02a86e (diff) | |
parent | 46d6fd15e4cc02d45079ffc688be0684e61f1434 (diff) | |
download | nextcloud-server-c8255a170c2d7449b4e7728edd2237eea71dca80.tar.gz nextcloud-server-c8255a170c2d7449b4e7728edd2237eea71dca80.zip |
Merge branch 'master' of git://gitorious.org/owncloud/owncloud into oracle-support
Conflicts:
3rdparty/Sabre/CardDAV/Plugin.php
3rdparty/smb4php/smb.php
apps/bookmarks/ajax/addBookmark.php
apps/bookmarks/ajax/editBookmark.php
apps/bookmarks/appinfo/migrate.php
apps/calendar/ajax/calendar/edit.form.php
apps/calendar/ajax/changeview.php
apps/calendar/ajax/import/import.php
apps/calendar/ajax/settings/guesstimezone.php
apps/calendar/ajax/settings/setfirstday.php
apps/calendar/ajax/settings/settimeformat.php
apps/calendar/ajax/share/changepermission.php
apps/calendar/ajax/share/share.php
apps/calendar/ajax/share/unshare.php
apps/calendar/appinfo/app.php
apps/calendar/appinfo/remote.php
apps/calendar/appinfo/update.php
apps/calendar/appinfo/version
apps/calendar/js/calendar.js
apps/calendar/l10n/da.php
apps/calendar/l10n/de.php
apps/calendar/l10n/fi_FI.php
apps/calendar/l10n/gl.php
apps/calendar/l10n/he.php
apps/calendar/l10n/hr.php
apps/calendar/l10n/ja_JP.php
apps/calendar/l10n/lb.php
apps/calendar/l10n/lt_LT.php
apps/calendar/l10n/nb_NO.php
apps/calendar/l10n/pl.php
apps/calendar/l10n/pt_PT.php
apps/calendar/l10n/ro.php
apps/calendar/l10n/ru.php
apps/calendar/l10n/sv.php
apps/calendar/l10n/zh_CN.php
apps/calendar/l10n/zh_TW.php
apps/calendar/lib/app.php
apps/calendar/lib/calendar.php
apps/calendar/lib/object.php
apps/calendar/lib/share.php
apps/calendar/templates/part.choosecalendar.rowfields.php
apps/calendar/templates/part.import.php
apps/calendar/templates/settings.php
apps/contacts/ajax/activation.php
apps/contacts/ajax/addressbook/delete.php
apps/contacts/ajax/contact/add.php
apps/contacts/ajax/contact/addproperty.php
apps/contacts/ajax/contact/delete.php
apps/contacts/ajax/contact/deleteproperty.php
apps/contacts/ajax/contact/saveproperty.php
apps/contacts/ajax/createaddressbook.php
apps/contacts/ajax/cropphoto.php
apps/contacts/ajax/currentphoto.php
apps/contacts/ajax/importaddressbook.php
apps/contacts/ajax/oc_photo.php
apps/contacts/ajax/savecrop.php
apps/contacts/ajax/selectaddressbook.php
apps/contacts/ajax/updateaddressbook.php
apps/contacts/ajax/uploadimport.php
apps/contacts/ajax/uploadphoto.php
apps/contacts/appinfo/migrate.php
apps/contacts/appinfo/remote.php
apps/contacts/css/contacts.css
apps/contacts/import.php
apps/contacts/index.php
apps/contacts/js/contacts.js
apps/contacts/l10n/ca.php
apps/contacts/l10n/cs_CZ.php
apps/contacts/l10n/da.php
apps/contacts/l10n/de.php
apps/contacts/l10n/el.php
apps/contacts/l10n/eo.php
apps/contacts/l10n/es.php
apps/contacts/l10n/et_EE.php
apps/contacts/l10n/eu.php
apps/contacts/l10n/fa.php
apps/contacts/l10n/fi_FI.php
apps/contacts/l10n/fr.php
apps/contacts/l10n/he.php
apps/contacts/l10n/hr.php
apps/contacts/l10n/hu_HU.php
apps/contacts/l10n/ia.php
apps/contacts/l10n/it.php
apps/contacts/l10n/ja_JP.php
apps/contacts/l10n/ko.php
apps/contacts/l10n/lb.php
apps/contacts/l10n/mk.php
apps/contacts/l10n/nb_NO.php
apps/contacts/l10n/nl.php
apps/contacts/l10n/pl.php
apps/contacts/l10n/pt_BR.php
apps/contacts/l10n/pt_PT.php
apps/contacts/l10n/ro.php
apps/contacts/l10n/ru.php
apps/contacts/l10n/sk_SK.php
apps/contacts/l10n/sl.php
apps/contacts/l10n/sv.php
apps/contacts/l10n/th_TH.php
apps/contacts/l10n/tr.php
apps/contacts/l10n/zh_CN.php
apps/contacts/l10n/zh_TW.php
apps/contacts/lib/addressbook.php
apps/contacts/lib/hooks.php
apps/contacts/lib/vcard.php
apps/contacts/photo.php
apps/contacts/templates/part.contact.php
apps/contacts/templates/part.contacts.php
apps/contacts/templates/part.cropphoto.php
apps/contacts/templates/part.importaddressbook.php
apps/contacts/templates/part.selectaddressbook.php
apps/contacts/thumbnail.php
apps/files/ajax/download.php
apps/files/ajax/newfile.php
apps/files/ajax/timezone.php
apps/files/appinfo/update.php
apps/files/appinfo/version
apps/files/index.php
apps/files/js/fileactions.js
apps/files/js/filelist.js
apps/files/js/files.js
apps/files/l10n/ar.php
apps/files/l10n/bg_BG.php
apps/files/l10n/ca.php
apps/files/l10n/cs_CZ.php
apps/files/l10n/da.php
apps/files/l10n/de.php
apps/files/l10n/el.php
apps/files/l10n/eo.php
apps/files/l10n/es.php
apps/files/l10n/et_EE.php
apps/files/l10n/eu.php
apps/files/l10n/fa.php
apps/files/l10n/fi_FI.php
apps/files/l10n/fr.php
apps/files/l10n/gl.php
apps/files/l10n/he.php
apps/files/l10n/hr.php
apps/files/l10n/hu_HU.php
apps/files/l10n/ia.php
apps/files/l10n/id.php
apps/files/l10n/it.php
apps/files/l10n/ja_JP.php
apps/files/l10n/ko.php
apps/files/l10n/lb.php
apps/files/l10n/lt_LT.php
apps/files/l10n/mk.php
apps/files/l10n/ms_MY.php
apps/files/l10n/nb_NO.php
apps/files/l10n/nl.php
apps/files/l10n/nn_NO.php
apps/files/l10n/pl.php
apps/files/l10n/pt_BR.php
apps/files/l10n/pt_PT.php
apps/files/l10n/ro.php
apps/files/l10n/ru.php
apps/files/l10n/sk_SK.php
apps/files/l10n/sl.php
apps/files/l10n/sr.php
apps/files/l10n/sr@latin.php
apps/files/l10n/sv.php
apps/files/l10n/th_TH.php
apps/files/l10n/tr.php
apps/files/l10n/uk.php
apps/files/l10n/zh_CN.php
apps/files/l10n/zh_TW.php
apps/files_archive/js/archive.js
apps/files_encryption/lib/cryptstream.php
apps/files_encryption/lib/proxy.php
apps/files_encryption/tests/proxy.php
apps/files_external/appinfo/app.php
apps/files_external/lib/smb.php
apps/files_external/lib/streamwrapper.php
apps/files_external/tests/config.php
apps/files_external/tests/smb.php
apps/files_sharing/ajax/email.php
apps/files_sharing/ajax/getitem.php
apps/files_sharing/ajax/setpermissions.php
apps/files_sharing/ajax/share.php
apps/files_sharing/ajax/toggleresharing.php
apps/files_sharing/ajax/unshare.php
apps/files_sharing/ajax/userautocomplete.php
apps/files_sharing/js/settings.js
apps/files_sharing/js/share.js
apps/files_sharing/lib_share.php
apps/files_sharing/settings.php
apps/files_sharing/sharedstorage.php
apps/files_sharing/templates/settings.php
apps/files_versions/ajax/rollbackVersion.php
apps/files_versions/versions.php
apps/gallery/ajax/thumbnail.php
apps/gallery/appinfo/app.php
apps/gallery/appinfo/update.php
apps/gallery/appinfo/version
apps/gallery/css/styles.css
apps/gallery/index.php
apps/gallery/js/pictures.js
apps/gallery/l10n/ca.php
apps/gallery/l10n/cs_CZ.php
apps/gallery/l10n/de.php
apps/gallery/l10n/el.php
apps/gallery/l10n/es.php
apps/gallery/l10n/fi_FI.php
apps/gallery/l10n/fr.php
apps/gallery/l10n/it.php
apps/gallery/l10n/pl.php
apps/gallery/l10n/pt_PT.php
apps/gallery/l10n/ru.php
apps/gallery/l10n/sl.php
apps/gallery/l10n/sv.php
apps/gallery/l10n/th_TH.php
apps/gallery/l10n/tr.php
apps/gallery/l10n/zh_CN.php
apps/gallery/lib/album.php
apps/gallery/lib/hooks_handlers.php
apps/gallery/lib/managers.php
apps/gallery/lib/photo.php
apps/gallery/lib/tiles.php
apps/gallery/lib/tiles_test.php
apps/gallery/templates/index.php
apps/media/lib_ampache.php
apps/media/lib_collection.php
apps/media/lib_media.php
apps/remoteStorage/lib_remoteStorage.php
apps/tasks/ajax/addtaskform.php
apps/tasks/ajax/edittask.php
apps/user_ldap/appinfo/update.php
apps/user_ldap/group_ldap.php
apps/user_ldap/lib_ldap.php
apps/user_ldap/settings.php
apps/user_ldap/templates/settings.php
apps/user_ldap/user_ldap.php
apps/user_migrate/appinfo/app.php
apps/user_migrate/templates/settings.php
apps/user_webfinger/host-meta.php
config/config.sample.php
core/js/js.js
core/l10n/da.php
core/l10n/de.php
core/l10n/fi_FI.php
core/l10n/gl.php
core/l10n/he.php
core/l10n/hr.php
core/l10n/id.php
core/l10n/ja_JP.php
core/l10n/lb.php
core/l10n/lt_LT.php
core/l10n/nb_NO.php
core/l10n/pl.php
core/l10n/pt_PT.php
core/l10n/ro.php
core/l10n/ru.php
core/l10n/sv.php
core/lostpassword/index.php
core/templates/layout.user.php
core/templates/login.php
db_structure.xml
index.php
l10n/af/calendar.po
l10n/af/contacts.po
l10n/af/core.po
l10n/af/files.po
l10n/af/settings.po
l10n/ar/calendar.po
l10n/ar/contacts.po
l10n/ar/core.po
l10n/ar/files.po
l10n/ar/media.po
l10n/ar/settings.po
l10n/bg_BG/calendar.po
l10n/bg_BG/contacts.po
l10n/bg_BG/core.po
l10n/bg_BG/files.po
l10n/bg_BG/media.po
l10n/bg_BG/settings.po
l10n/ca/calendar.po
l10n/ca/contacts.po
l10n/ca/core.po
l10n/ca/files.po
l10n/ca/gallery.po
l10n/ca/settings.po
l10n/cs_CZ/calendar.po
l10n/cs_CZ/contacts.po
l10n/cs_CZ/core.po
l10n/cs_CZ/files.po
l10n/cs_CZ/gallery.po
l10n/cs_CZ/settings.po
l10n/da/calendar.po
l10n/da/contacts.po
l10n/da/core.po
l10n/da/files.po
l10n/da/settings.po
l10n/de/calendar.po
l10n/de/contacts.po
l10n/de/core.po
l10n/de/files.po
l10n/de/gallery.po
l10n/de/settings.po
l10n/el/calendar.po
l10n/el/contacts.po
l10n/el/core.po
l10n/el/files.po
l10n/el/gallery.po
l10n/el/settings.po
l10n/eo/calendar.po
l10n/eo/contacts.po
l10n/eo/core.po
l10n/eo/files.po
l10n/eo/media.po
l10n/eo/settings.po
l10n/es/calendar.po
l10n/es/contacts.po
l10n/es/core.po
l10n/es/files.po
l10n/es/gallery.po
l10n/es/settings.po
l10n/et_EE/calendar.po
l10n/et_EE/contacts.po
l10n/et_EE/core.po
l10n/et_EE/files.po
l10n/et_EE/settings.po
l10n/eu/calendar.po
l10n/eu/contacts.po
l10n/eu/core.po
l10n/eu/files.po
l10n/eu/settings.po
l10n/fa/calendar.po
l10n/fa/contacts.po
l10n/fa/core.po
l10n/fa/files.po
l10n/fa/settings.po
l10n/fi_FI/calendar.po
l10n/fi_FI/contacts.po
l10n/fi_FI/core.po
l10n/fi_FI/files.po
l10n/fi_FI/gallery.po
l10n/fi_FI/settings.po
l10n/fr/calendar.po
l10n/fr/contacts.po
l10n/fr/core.po
l10n/fr/files.po
l10n/fr/gallery.po
l10n/fr/media.po
l10n/fr/settings.po
l10n/gl/calendar.po
l10n/gl/contacts.po
l10n/gl/core.po
l10n/gl/files.po
l10n/gl/settings.po
l10n/he/calendar.po
l10n/he/contacts.po
l10n/he/core.po
l10n/he/files.po
l10n/he/settings.po
l10n/hr/calendar.po
l10n/hr/contacts.po
l10n/hr/core.po
l10n/hr/files.po
l10n/hr/settings.po
l10n/hu_HU/calendar.po
l10n/hu_HU/contacts.po
l10n/hu_HU/core.po
l10n/hu_HU/files.po
l10n/hu_HU/settings.po
l10n/hy/calendar.po
l10n/hy/contacts.po
l10n/hy/core.po
l10n/hy/files.po
l10n/hy/settings.po
l10n/ia/calendar.po
l10n/ia/contacts.po
l10n/ia/core.po
l10n/ia/files.po
l10n/ia/settings.po
l10n/id/calendar.po
l10n/id/contacts.po
l10n/id/core.po
l10n/id/files.po
l10n/id/settings.po
l10n/it/calendar.po
l10n/it/contacts.po
l10n/it/core.po
l10n/it/files.po
l10n/it/gallery.po
l10n/it/settings.po
l10n/ja_JP/calendar.po
l10n/ja_JP/contacts.po
l10n/ja_JP/core.po
l10n/ja_JP/files.po
l10n/ja_JP/settings.po
l10n/ko/calendar.po
l10n/ko/contacts.po
l10n/ko/core.po
l10n/ko/files.po
l10n/ko/settings.po
l10n/lb/calendar.po
l10n/lb/contacts.po
l10n/lb/core.po
l10n/lb/files.po
l10n/lb/settings.po
l10n/lt_LT/calendar.po
l10n/lt_LT/contacts.po
l10n/lt_LT/core.po
l10n/lt_LT/files.po
l10n/lt_LT/settings.po
l10n/mk/calendar.po
l10n/mk/contacts.po
l10n/mk/core.po
l10n/mk/files.po
l10n/mk/settings.po
l10n/ms_MY/calendar.po
l10n/ms_MY/contacts.po
l10n/ms_MY/core.po
l10n/ms_MY/files.po
l10n/ms_MY/settings.po
l10n/nb_NO/calendar.po
l10n/nb_NO/contacts.po
l10n/nb_NO/core.po
l10n/nb_NO/files.po
l10n/nb_NO/settings.po
l10n/nl/calendar.po
l10n/nl/contacts.po
l10n/nl/core.po
l10n/nl/files.po
l10n/nl/settings.po
l10n/nn_NO/calendar.po
l10n/nn_NO/contacts.po
l10n/nn_NO/core.po
l10n/nn_NO/files.po
l10n/nn_NO/settings.po
l10n/pl/calendar.po
l10n/pl/contacts.po
l10n/pl/core.po
l10n/pl/files.po
l10n/pl/gallery.po
l10n/pl/settings.po
l10n/pt_BR/calendar.po
l10n/pt_BR/contacts.po
l10n/pt_BR/core.po
l10n/pt_BR/files.po
l10n/pt_BR/settings.po
l10n/pt_PT/calendar.po
l10n/pt_PT/contacts.po
l10n/pt_PT/core.po
l10n/pt_PT/files.po
l10n/pt_PT/gallery.po
l10n/pt_PT/settings.po
l10n/ro/calendar.po
l10n/ro/contacts.po
l10n/ro/core.po
l10n/ro/files.po
l10n/ro/settings.po
l10n/ru/calendar.po
l10n/ru/contacts.po
l10n/ru/core.po
l10n/ru/files.po
l10n/ru/gallery.po
l10n/ru/settings.po
l10n/sk_SK/calendar.po
l10n/sk_SK/contacts.po
l10n/sk_SK/core.po
l10n/sk_SK/files.po
l10n/sk_SK/settings.po
l10n/sl/calendar.po
l10n/sl/contacts.po
l10n/sl/core.po
l10n/sl/files.po
l10n/sl/gallery.po
l10n/sl/settings.po
l10n/sr/calendar.po
l10n/sr/contacts.po
l10n/sr/core.po
l10n/sr/files.po
l10n/sr/settings.po
l10n/sr@latin/calendar.po
l10n/sr@latin/contacts.po
l10n/sr@latin/core.po
l10n/sr@latin/files.po
l10n/sr@latin/settings.po
l10n/sv/calendar.po
l10n/sv/contacts.po
l10n/sv/core.po
l10n/sv/files.po
l10n/sv/gallery.po
l10n/sv/media.po
l10n/sv/settings.po
l10n/templates/bookmarks.pot
l10n/templates/calendar.pot
l10n/templates/contacts.pot
l10n/templates/core.pot
l10n/templates/files.pot
l10n/templates/gallery.pot
l10n/templates/media.pot
l10n/templates/settings.pot
l10n/th_TH/calendar.po
l10n/th_TH/contacts.po
l10n/th_TH/core.po
l10n/th_TH/files.po
l10n/th_TH/gallery.po
l10n/th_TH/settings.po
l10n/tr/calendar.po
l10n/tr/contacts.po
l10n/tr/core.po
l10n/tr/files.po
l10n/tr/gallery.po
l10n/tr/settings.po
l10n/uk/calendar.po
l10n/uk/contacts.po
l10n/uk/core.po
l10n/uk/files.po
l10n/uk/media.po
l10n/uk/settings.po
l10n/zh_CN/calendar.po
l10n/zh_CN/contacts.po
l10n/zh_CN/core.po
l10n/zh_CN/files.po
l10n/zh_CN/gallery.po
l10n/zh_CN/settings.po
l10n/zh_TW/calendar.po
l10n/zh_TW/contacts.po
l10n/zh_TW/core.po
l10n/zh_TW/files.po
l10n/zh_TW/settings.po
lib/app.php
lib/base.php
lib/connector/sabre/file.php
lib/connector/sabre/locks.php
lib/connector/sabre/node.php
lib/db.php
lib/filecache.php
lib/fileproxy/quota.php
lib/files.php
lib/filestorage/local.php
lib/filesystemview.php
lib/group/database.php
lib/helper.php
lib/installer.php
lib/json.php
lib/l10n.php
lib/migrate.php
lib/mimetypes.fixlist.php
lib/ocs.php
lib/preferences.php
lib/public/json.php
lib/public/util.php
lib/template.php
lib/user.php
lib/user/database.php
lib/util.php
lib/vcategories.php
ocs/providers.php
settings/admin.php
settings/ajax/lostpassword.php
settings/ajax/removeuser.php
settings/ajax/setbackgroundjobsmode.php
settings/ajax/setlanguage.php
settings/ajax/setquota.php
settings/ajax/togglegroups.php
settings/apps.php
settings/css/settings.css
settings/js/apps.js
settings/js/users.js
settings/l10n/bg_BG.php
settings/l10n/ca.php
settings/l10n/cs_CZ.php
settings/l10n/da.php
settings/l10n/de.php
settings/l10n/el.php
settings/l10n/eo.php
settings/l10n/es.php
settings/l10n/et_EE.php
settings/l10n/eu.php
settings/l10n/fa.php
settings/l10n/fi_FI.php
settings/l10n/fr.php
settings/l10n/gl.php
settings/l10n/he.php
settings/l10n/hr.php
settings/l10n/hu_HU.php
settings/l10n/it.php
settings/l10n/ja_JP.php
settings/l10n/ko.php
settings/l10n/lt_LT.php
settings/l10n/mk.php
settings/l10n/ms_MY.php
settings/l10n/nb_NO.php
settings/l10n/nl.php
settings/l10n/nn_NO.php
settings/l10n/pl.php
settings/l10n/pt_BR.php
settings/l10n/pt_PT.php
settings/l10n/ru.php
settings/l10n/sk_SK.php
settings/l10n/sl.php
settings/l10n/sv.php
settings/l10n/th_TH.php
settings/l10n/tr.php
settings/l10n/zh_CN.php
settings/personal.php
settings/templates/admin.php
settings/templates/users.php
Diffstat (limited to 'apps/calendar')
117 files changed, 3822 insertions, 1126 deletions
diff --git a/apps/calendar/ajax/cache/rescan.php b/apps/calendar/ajax/cache/rescan.php new file mode 100644 index 00000000000..3417f1ae4b4 --- /dev/null +++ b/apps/calendar/ajax/cache/rescan.php @@ -0,0 +1,15 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <georg@ownCloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +OCP\JSON::checkLoggedIn(); +OCP\JSON::checkAppEnabled('calendar'); +$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); +foreach($calendars as $calendar){ + OC_Calendar_Repeat::cleancalendar($calendar['id']); + OC_Calendar_Repeat::generatecalendar($calendar['id']); +} +OCP\JSON::success();
\ No newline at end of file diff --git a/apps/calendar/ajax/cache/status.php b/apps/calendar/ajax/cache/status.php new file mode 100644 index 00000000000..d2806d47895 --- /dev/null +++ b/apps/calendar/ajax/cache/status.php @@ -0,0 +1,22 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <georg@ownCloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +OCP\JSON::checkLoggedIn(); +OCP\JSON::checkAppEnabled('calendar'); +$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); +$allcached = true; +foreach($calendars as $calendar){ + if(!OC_Calendar_Repeat::is_calendar_cached($calendar['id'])){ + $allcached = false; + } +} +$l = new OC_L10N('calendar'); +if(!$allcached){ + OCP\JSON::error(array('message'=>'Not all calendars are completely cached', 'l10n'=>$l->t('Not all calendars are completely cached'))); +}else{ + OCP\JSON::success(array('message'=>'Everything seems to be completely cached', 'l10n'=>$l->t('Everything seems to be completely cached'))); +}
\ No newline at end of file diff --git a/apps/calendar/ajax/calendar/activation.php b/apps/calendar/ajax/calendar/activation.php index e31908beb14..f4aadc5b017 100644 --- a/apps/calendar/ajax/calendar/activation.php +++ b/apps/calendar/ajax/calendar/activation.php @@ -9,6 +9,8 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); +OCP\JSON::callCheck(); + $calendarid = $_POST['calendarid']; $calendar = OC_Calendar_App::getCalendar($calendarid, true); if(!$calendar){ diff --git a/apps/calendar/ajax/calendar/edit.form.php b/apps/calendar/ajax/calendar/edit.form.php index ae056a524bd..3916c527637 100644 --- a/apps/calendar/ajax/calendar/edit.form.php +++ b/apps/calendar/ajax/calendar/edit.form.php @@ -11,9 +11,9 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); $calendarcolor_options = OC_Calendar_Calendar::getCalendarColorOptions(); -$calendar = OC_Calendar_App::getCalendar($_GET['calendarid']); +$calendar = OC_Calendar_App::getCalendar($_POST['calendarid']); $tmpl = new OCP\Template("calendar", "part.editcalendar"); $tmpl->assign('new', false); $tmpl->assign('calendarcolor_options', $calendarcolor_options); $tmpl->assign('calendar', $calendar); -$tmpl->printPage(); +$tmpl->printPage();
\ No newline at end of file diff --git a/apps/calendar/ajax/calendar/new.php b/apps/calendar/ajax/calendar/new.php index 34b056abe8f..67d12822378 100644 --- a/apps/calendar/ajax/calendar/new.php +++ b/apps/calendar/ajax/calendar/new.php @@ -6,8 +6,6 @@ * See the COPYING-README file. */ - - // Check if we are a user OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); @@ -32,7 +30,13 @@ OC_Calendar_Calendar::setCalendarActive($calendarid, 1); $calendar = OC_Calendar_Calendar::find($calendarid); $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields'); $tmpl->assign('calendar', $calendar); +if(OC_Calendar_Share::allUsersSharedwith($calendarid, OC_Calendar_Share::CALENDAR) == array()){ + $shared = false; +}else{ + $shared = true; +} +$tmpl->assign('shared', $shared); OCP\JSON::success(array( 'page' => $tmpl->fetchPage(), 'eventSource' => OC_Calendar_Calendar::getEventSourceInfo($calendar), -));
\ No newline at end of file +)); diff --git a/apps/calendar/ajax/calendar/overview.php b/apps/calendar/ajax/calendar/overview.php index 9d43364ffbf..1d8e49ea5f2 100644 --- a/apps/calendar/ajax/calendar/overview.php +++ b/apps/calendar/ajax/calendar/overview.php @@ -4,9 +4,7 @@ * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. - */ - - + */ $l10n = OC_L10N::get('calendar'); OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); diff --git a/apps/calendar/ajax/calendar/update.php b/apps/calendar/ajax/calendar/update.php index 740094775f5..c09b1008c9c 100644 --- a/apps/calendar/ajax/calendar/update.php +++ b/apps/calendar/ajax/calendar/update.php @@ -37,7 +37,13 @@ OC_Calendar_Calendar::setCalendarActive($calendarid, $_POST['active']); $calendar = OC_Calendar_App::getCalendar($calendarid); $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields'); $tmpl->assign('calendar', $calendar); +if(OC_Calendar_Share::allUsersSharedwith($calendarid, OC_Calendar_Share::CALENDAR) == array()){ + $shared = false; +}else{ + $shared = true; +} +$tmpl->assign('shared', $shared); OCP\JSON::success(array( 'page' => $tmpl->fetchPage(), 'eventSource' => OC_Calendar_Calendar::getEventSourceInfo($calendar), -));
\ No newline at end of file +)); diff --git a/apps/calendar/ajax/categories/rescan.php b/apps/calendar/ajax/categories/rescan.php index f0060cb23b2..08c32865b6f 100644 --- a/apps/calendar/ajax/categories/rescan.php +++ b/apps/calendar/ajax/categories/rescan.php @@ -9,6 +9,7 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); +OCP\JSON::callCheck(); foreach ($_POST as $key=>$element) { debug('_POST: '.$key.'=>'.print_r($element, true)); diff --git a/apps/calendar/ajax/changeview.php b/apps/calendar/ajax/changeview.php index 951f603ce85..819025543a5 100644 --- a/apps/calendar/ajax/changeview.php +++ b/apps/calendar/ajax/changeview.php @@ -7,15 +7,15 @@ */ OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); -$view = $_GET['v']; +$view = $_POST['v']; switch($view){ case 'agendaWeek': case 'month'; case 'list': break; default: - OCP\JSON::error(array('message'=>'unexspected parameter: ' . $view)); + OCP\JSON::error(array('message'=>'unexpected parameter: ' . $view)); exit; } OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'currentview', $view); -OCP\JSON::success(); +OCP\JSON::success();
\ No newline at end of file diff --git a/apps/calendar/ajax/event/edit.form.php b/apps/calendar/ajax/event/edit.form.php index e5cf573c718..27512481538 100644 --- a/apps/calendar/ajax/event/edit.form.php +++ b/apps/calendar/ajax/event/edit.form.php @@ -13,7 +13,7 @@ if(!OCP\User::isLoggedIn()) { } OCP\JSON::checkAppEnabled('calendar'); -$id = $_GET['id']; +$id = $_POST['id']; $data = OC_Calendar_App::getEventObject($id, true, true); if(!$data){ diff --git a/apps/calendar/ajax/event/new.form.php b/apps/calendar/ajax/event/new.form.php index 0b19e7e92f9..db04cdf2d49 100644 --- a/apps/calendar/ajax/event/new.form.php +++ b/apps/calendar/ajax/event/new.form.php @@ -27,7 +27,7 @@ if (!$end){ } $start = new DateTime('@'.$start); $end = new DateTime('@'.$end); -$timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get()); +$timezone = OC_Calendar_App::getTimezone(); $start->setTimezone(new DateTimeZone($timezone)); $end->setTimezone(new DateTimeZone($timezone)); diff --git a/apps/calendar/ajax/event/resize.php b/apps/calendar/ajax/event/resize.php index 56b83205e85..15b687b55da 100644 --- a/apps/calendar/ajax/event/resize.php +++ b/apps/calendar/ajax/event/resize.php @@ -7,6 +7,7 @@ */ OCP\JSON::checkLoggedIn(); +OCP\JSON::callCheck(); $id = $_POST['id']; diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php index e00e0cfeb1e..ae55cbc02db 100644 --- a/apps/calendar/ajax/events.php +++ b/apps/calendar/ajax/events.php @@ -5,25 +5,20 @@ * later. * See the COPYING-README file. */ - - -require_once('when/When.php'); - OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); session_write_close(); // Look for the calendar id -$calendar_id = OC_Calendar_App::getCalendar($_GET['calendar_id'], false, false); -if($calendar_id !== false){ - if(! is_numeric($calendar_id['userid']) && $calendar_id['userid'] != OCP\User::getUser()){ - OCP\JSON::error(); - exit; +$calendar_id = null; +if (strval(intval($_GET['calendar_id'])) == strval($_GET['calendar_id'])) { // integer for sure. + $id = intval($_GET['calendar_id']); + $calendarrow = OC_Calendar_App::getCalendar($id, true, false); // Let's at least security check otherwise we might as well use OC_Calendar_Calendar::find() + if($calendarrow !== false && is_int($calendar_id['userid']) && $id == $calendar_id['userid']) { + $calendar_id = $id; } } -else { - $calendar_id = $_GET['calendar_id']; -} +$calendar_id = (is_null($calendar_id)?strip_tags($_GET['calendar_id']):$calendar_id); $start = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['start']):new DateTime('@' . $_GET['start']); $end = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['end']):new DateTime('@' . $_GET['end']); diff --git a/apps/calendar/ajax/import/calendarcheck.php b/apps/calendar/ajax/import/calendarcheck.php new file mode 100644 index 00000000000..a91bab70573 --- /dev/null +++ b/apps/calendar/ajax/import/calendarcheck.php @@ -0,0 +1,18 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +OCP\JSON::checkLoggedIn(); +OCP\App::checkAppEnabled('calendar'); +$calname = strip_tags($_POST['calname']); +$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser()); +foreach($calendars as $calendar){ + if($calendar['displayname'] == $calname){ + OCP\JSON::success(array('message'=>'exists')); + exit; + } +} +OCP\JSON::error();
\ No newline at end of file diff --git a/apps/calendar/ajax/import/dialog.php b/apps/calendar/ajax/import/dialog.php index b99c32278c4..18fe226172c 100644 --- a/apps/calendar/ajax/import/dialog.php +++ b/apps/calendar/ajax/import/dialog.php @@ -5,8 +5,6 @@ * later. * See the COPYING-README file. */ - - OCP\JSON::checkLoggedIn(); OCP\App::checkAppEnabled('calendar'); $tmpl = new OCP\Template('calendar', 'part.import'); diff --git a/apps/calendar/ajax/import/dropimport.php b/apps/calendar/ajax/import/dropimport.php new file mode 100644 index 00000000000..f46e7314098 --- /dev/null +++ b/apps/calendar/ajax/import/dropimport.php @@ -0,0 +1,32 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +$data = $_POST['data']; +$data = explode(',', $data); +$data = end($data); +$data = base64_decode($data); +OCP\JSON::checkLoggedIn(); +OCP\App::checkAppEnabled('calendar'); +$import = new OC_Calendar_Import($data); +$import->setUserID(OCP\User::getUser()); +$import->setTimeZone(OC_Calendar_App::$tz); +$import->disableProgressCache(); +if(!$import->isValid()){ + OCP\JSON::error(); + exit; +} +$newcalendarname = strip_tags($import->createCalendarName()); +$newid = OC_Calendar_Calendar::addCalendar(OCP\User::getUser(),$newcalendarname,'VEVENT,VTODO,VJOURNAL',null,0,$import->createCalendarColor()); +$import->setCalendarID($newid); +$import->import(); +$count = $import->getCount(); +if($count == 0){ + OC_Calendar_Calendar::deleteCalendar($newid); + OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('The file contained either no events or all events are already saved in your calendar.'))); +}else{ + OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in the new calendar') . ' ' . $newcalendarname, 'eventSource'=>OC_Calendar_Calendar::getEventSourceInfo(OC_Calendar_Calendar::find($newid)))); +}
\ No newline at end of file diff --git a/apps/calendar/ajax/import/import.php b/apps/calendar/ajax/import/import.php index c0cd1403763..b1dfc464d00 100644 --- a/apps/calendar/ajax/import/import.php +++ b/apps/calendar/ajax/import/import.php @@ -5,45 +5,77 @@ * later. * See the COPYING-README file. */ -//check for calendar rights or create new one -ob_start(); OCP\JSON::checkLoggedIn(); -OCP\JSON::callCheck(); OCP\App::checkAppEnabled('calendar'); -$nl="\r\n"; -$comps = array('VEVENT'=>true, 'VTODO'=>true, 'VJOURNAL'=>true); -$progressfile = 'import_tmp/' . md5(session_id()) . '.txt'; -if(is_writable('import_tmp/')){ - $progressfopen = fopen($progressfile, 'w'); - fwrite($progressfopen, '10'); - fclose($progressfopen); +OCP\JSON::callCheck(); +session_write_close(); +if (isset($_POST['progresskey']) && isset($_POST['getprogress'])) { + echo OCP\JSON::success(array('percent'=>OC_Cache::get($_POST['progresskey']))); + exit; } $file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']); +if(!$file){ + OCP\JSON::error(array('error'=>'404')); +} +$import = new OC_Calendar_Import($file); +$import->setUserID(OCP\User::getUser()); +$import->setTimeZone(OC_Calendar_App::$tz); +$import->enableProgressCache(); +$import->setProgresskey($_POST['progresskey']); +if(!$import->isValid()){ + OCP\JSON::error(array('error'=>'notvalid')); + exit; +} +$newcal = false; if($_POST['method'] == 'new'){ - $id = OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(), $_POST['calname']); - OC_Calendar_Calendar::setCalendarActive($id, 1); + $calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser()); + foreach($calendars as $calendar){ + if($calendar['displayname'] == $_POST['calname']){ + $id = $calendar['id']; + $newcal = false; + break; + } + $newcal = true; + } + if($newcal){ + $id = OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(), strip_tags($_POST['calname']),'VEVENT,VTODO,VJOURNAL',null,0,strip_tags($_POST['calcolor'])); + OC_Calendar_Calendar::setCalendarActive($id, 1); + } }else{ $calendar = OC_Calendar_App::getCalendar($_POST['id']); if($calendar['userid'] != OCP\USER::getUser()){ - OCP\JSON::error(); + OCP\JSON::error(array('error'=>'missingcalendarrights')); exit(); } $id = $_POST['id']; } -if(is_writable('import_tmp/')){ - $progressfopen = fopen($progressfile, 'w'); - fwrite($progressfopen, '20'); - fclose($progressfopen); +$import->setCalendarID($id); +try{ + $import->import(); +}catch (Exception $e) { + OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('Import failed'), 'debug'=>$e->getMessage())); + //write some log } +$count = $import->getCount(); +if($count == 0){ + if($newcal){ + OC_Calendar_Calendar::deleteCalendar($id); + } + OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('The file contained either no events or all events are already saved in your calendar.'))); +}else{ + if($newcal){ + OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in the new calendar') . ' ' . strip_tags($_POST['calname']))); + }else{ + OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in your calendar'))); + } +} +/* //////////////////////////// Attention: following code is quite painfull !!! /////////////////////// +writeProgress('20'); // normalize the newlines $file = str_replace(array("\r","\n\n"), array("\n","\n"), $file); $lines = explode("\n", $file); unset($file); -if(is_writable('import_tmp/')){ - $progressfopen = fopen($progressfile, 'w'); - fwrite($progressfopen, '30'); - fclose($progressfopen); -} +writeProgress('30'); // analyze the file, group components by uid, and keep refs to originating calendar object // $cals is array calendar objects, keys are 1st line# $cal, ie array( $cal => $caldata ) // $caldata is array( 'first' => 1st component line#, 'last' => last comp line#, 'end' => end line# ) @@ -87,13 +119,8 @@ foreach($lines as $line) { $i++; } // import the calendar -if(is_writable('import_tmp/')){ - $progressfopen = fopen($progressfile, 'w'); - fwrite($progressfopen, '60'); - fclose($progressfopen); -} +writeProgress('60'); foreach($uids as $uid) { - $prefix=$suffix=$content=array(); foreach($uid as $begin=>$details) { @@ -118,13 +145,7 @@ foreach($uids as $uid) { } } // finished import -if(is_writable('import_tmp/')){ - $progressfopen = fopen($progressfile, 'w'); - fwrite($progressfopen, '100'); - fclose($progressfopen); -} +writeProgress('100'); sleep(3); -if(is_writable('import_tmp/')){ - unlink($progressfile); -} -OCP\JSON::success();
\ No newline at end of file +OC_Cache::remove($progresskey); +OCP\JSON::success();*/ diff --git a/apps/calendar/ajax/settings/guesstimezone.php b/apps/calendar/ajax/settings/guesstimezone.php index 11c74631d44..6b6b8bef9c1 100644 --- a/apps/calendar/ajax/settings/guesstimezone.php +++ b/apps/calendar/ajax/settings/guesstimezone.php @@ -12,8 +12,8 @@ OCP\JSON::checkAppEnabled('calendar'); $l = OC_L10N::get('calendar'); -$lat = $_GET['lat']; -$lng = $_GET['long']; +$lat = $_POST['lat']; +$lng = $_POST['lng']; $timezone = OC_Geo::timezone($lat, $lng); @@ -23,4 +23,4 @@ if($timezone == OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timez } OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'timezone', $timezone); $message = array('message'=> $l->t('New Timezone:') . $timezone); -OCP\JSON::success($message); +OCP\JSON::success($message);
\ No newline at end of file diff --git a/apps/calendar/ajax/settings/setfirstday.php b/apps/calendar/ajax/settings/setfirstday.php index 97c24882939..73cf0c19b78 100644 --- a/apps/calendar/ajax/settings/setfirstday.php +++ b/apps/calendar/ajax/settings/setfirstday.php @@ -8,7 +8,6 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); - if(isset($_POST["firstday"])){ OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'firstday', $_POST["firstday"]); OCP\JSON::success(); diff --git a/apps/calendar/ajax/settings/settimeformat.php b/apps/calendar/ajax/settings/settimeformat.php index d09679b9270..6136857e2fe 100644 --- a/apps/calendar/ajax/settings/settimeformat.php +++ b/apps/calendar/ajax/settings/settimeformat.php @@ -8,7 +8,6 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); - if(isset($_POST["timeformat"])){ OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', $_POST["timeformat"]); OCP\JSON::success(); diff --git a/apps/calendar/ajax/settings/settimezone.php b/apps/calendar/ajax/settings/settimezone.php index 6d029a6643a..06db66d578e 100644 --- a/apps/calendar/ajax/settings/settimezone.php +++ b/apps/calendar/ajax/settings/settimezone.php @@ -14,6 +14,7 @@ $l=OC_L10N::get('calendar'); // Check if we are a user OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('calendar'); +OCP\JSON::callCheck(); // Get data if( isset( $_POST['timezone'] ) ){ diff --git a/apps/calendar/ajax/share/activation.php b/apps/calendar/ajax/share/activation.php index 7d6b8fcb16e..bce8693577b 100644 --- a/apps/calendar/ajax/share/activation.php +++ b/apps/calendar/ajax/share/activation.php @@ -5,7 +5,7 @@ * later. * See the COPYING-README file. */ -$id = strip_tags($_GET['id']); -$activation = strip_tags($_GET['activation']); +$id = strip_tags($_POST['id']); +$activation = strip_tags($_POST['activation']); OC_Calendar_Share::set_active(OCP\USER::getUser(), $id, $activation); OCP\JSON::success(); diff --git a/apps/calendar/ajax/share/changepermission.php b/apps/calendar/ajax/share/changepermission.php index f3c628e8477..5aff7666f79 100644 --- a/apps/calendar/ajax/share/changepermission.php +++ b/apps/calendar/ajax/share/changepermission.php @@ -5,11 +5,12 @@ * later. * See the COPYING-README file. */ - OCP\JSON::callCheck(); -$id = strip_tags($_GET['id']); -$idtype = strip_tags($_GET['idtype']); -$permission = (int) strip_tags($_GET['permission']); +OCP\JSON::callCheck(); + +$id = strip_tags($_POST['id']); +$idtype = strip_tags($_POST['idtype']); +$permission = (int) strip_tags($_POST['permission']); switch($idtype){ case 'calendar': case 'event': @@ -26,8 +27,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){ OCP\JSON::error(array('message'=>'permission denied')); exit; } -$sharewith = $_GET['sharewith']; -$sharetype = strip_tags($_GET['sharetype']); +$sharewith = $_POST['sharewith']; +$sharetype = strip_tags($_POST['sharetype']); switch($sharetype){ case 'user': case 'group': diff --git a/apps/calendar/ajax/share/dropdown.php b/apps/calendar/ajax/share/dropdown.php index a3b0faca4bf..86cf4ac090e 100644 --- a/apps/calendar/ajax/share/dropdown.php +++ b/apps/calendar/ajax/share/dropdown.php @@ -7,7 +7,7 @@ */ $user = OCP\USER::getUser(); -$calid = $_GET['calid']; +$calid = $_POST['calid']; $calendar = OC_Calendar_Calendar::find($calid); if($calendar['userid'] != $user){ OCP\JSON::error(); diff --git a/apps/calendar/ajax/share/share.php b/apps/calendar/ajax/share/share.php index babb8ce3f13..77e1ab9d657 100644 --- a/apps/calendar/ajax/share/share.php +++ b/apps/calendar/ajax/share/share.php @@ -5,10 +5,11 @@ * later. * See the COPYING-README file. */ - OCP\JSON::callCheck(); + +OCP\JSON::callCheck(); -$id = strip_tags($_GET['id']); -$idtype = strip_tags($_GET['idtype']); +$id = strip_tags($_POST['id']); +$idtype = strip_tags($_POST['idtype']); switch($idtype){ case 'calendar': case 'event': @@ -25,8 +26,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){ OCP\JSON::error(array('message'=>'permission denied')); exit; } -$sharewith = $_GET['sharewith']; -$sharetype = strip_tags($_GET['sharetype']); +$sharewith = $_POST['sharewith']; +$sharetype = strip_tags($_POST['sharetype']); switch($sharetype){ case 'user': case 'group': diff --git a/apps/calendar/ajax/share/unshare.php b/apps/calendar/ajax/share/unshare.php index 09264070dde..c7c06113189 100644 --- a/apps/calendar/ajax/share/unshare.php +++ b/apps/calendar/ajax/share/unshare.php @@ -5,10 +5,11 @@ * later. * See the COPYING-README file. */ - OCP\JSON::callCheck(); -$id = strip_tags($_GET['id']); -$idtype = strip_tags($_GET['idtype']); +OCP\JSON::callCheck(); + +$id = strip_tags($_POST['id']); +$idtype = strip_tags($_POST['idtype']); switch($idtype){ case 'calendar': case 'event': @@ -25,8 +26,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){ OCP\JSON::error(array('message'=>'permission denied')); exit; } -$sharewith = $_GET['sharewith']; -$sharetype = strip_tags($_GET['sharetype']); +$sharewith = $_POST['sharewith']; +$sharetype = strip_tags($_POST['sharetype']); switch($sharetype){ case 'user': case 'group': diff --git a/apps/calendar/appinfo/app.php b/apps/calendar/appinfo/app.php index 69b556af314..00787055787 100644 --- a/apps/calendar/appinfo/app.php +++ b/apps/calendar/appinfo/app.php @@ -4,29 +4,41 @@ OC::$CLASSPATH['OC_Calendar_App'] = 'apps/calendar/lib/app.php'; OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php'; OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php'; OC::$CLASSPATH['OC_Calendar_Hooks'] = 'apps/calendar/lib/hooks.php'; -OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php'; +OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/sabre/backend.php'; +OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_CalendarRoot'] = 'apps/calendar/lib/sabre/calendarroot.php'; +OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_UserCalendars'] = 'apps/calendar/lib/sabre/usercalendars.php'; +OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_Calendar'] = 'apps/calendar/lib/sabre/calendar.php'; +OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_CalendarObject'] = 'apps/calendar/lib/sabre/object.php'; +OC::$CLASSPATH['OC_Calendar_Repeat'] = 'apps/calendar/lib/repeat.php'; OC::$CLASSPATH['OC_Calendar_Share'] = 'apps/calendar/lib/share.php'; OC::$CLASSPATH['OC_Search_Provider_Calendar'] = 'apps/calendar/lib/search.php'; - +OC::$CLASSPATH['OC_Calendar_Export'] = 'apps/calendar/lib/export.php'; +OC::$CLASSPATH['OC_Calendar_Import'] = 'apps/calendar/lib/import.php'; +OC::$CLASSPATH['OC_Share_Backend_Calendar'] = 'apps/calendar/lib/share/calendar.php'; +OC::$CLASSPATH['OC_Share_Backend_Event'] = 'apps/calendar/lib/share/event.php'; //General Hooks OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Calendar_Hooks', 'createUser'); OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser'); +//Repeating Events Hooks +OCP\Util::connectHook('OC_Calendar', 'addEvent', 'OC_Calendar_Repeat', 'generate'); +OCP\Util::connectHook('OC_Calendar', 'editEvent', 'OC_Calendar_Repeat', 'update'); +OCP\Util::connectHook('OC_Calendar', 'deleteEvent', 'OC_Calendar_Repeat', 'clean'); +OCP\Util::connectHook('OC_Calendar', 'moveEvent', 'OC_Calendar_Repeat', 'update'); +OCP\Util::connectHook('OC_Calendar', 'deleteCalendar', 'OC_Calendar_Repeat', 'cleanCalendar'); //Sharing Hooks OCP\Util::connectHook('OC_Calendar', 'deleteEvent', 'OC_Calendar_Share', 'post_eventdelete'); OCP\Util::connectHook('OC_Calendar', 'deleteCalendar', 'OC_Calendar_Share', 'post_caldelete'); - OCP\Util::addscript('calendar','loader'); OCP\Util::addscript("3rdparty", "chosen/chosen.jquery.min"); OCP\Util::addStyle("3rdparty", "chosen/chosen"); -OCP\App::register( array( - 'order' => 10, - 'id' => 'calendar', - 'name' => 'Calendar' )); +OCP\Util::addStyle('3rdparty/miniColors', 'jquery.miniColors'); +OCP\Util::addscript('3rdparty/miniColors', 'jquery.miniColors.min'); OCP\App::addNavigationEntry( array( 'id' => 'calendar_index', 'order' => 10, 'href' => OCP\Util::linkTo( 'calendar', 'index.php' ), 'icon' => OCP\Util::imagePath( 'calendar', 'icon.svg' ), 'name' => $l->t('Calendar'))); -OCP\App::registerPersonal('calendar', 'settings'); OC_Search::registerProvider('OC_Search_Provider_Calendar'); +OCP\Share::registerBackend('calendar', 'OC_Share_Backend_Calendar'); +OCP\Share::registerBackend('event', 'OC_Share_Backend_Event'); diff --git a/apps/calendar/appinfo/database.xml b/apps/calendar/appinfo/database.xml index f60319ad432..16e10010d5a 100644 --- a/apps/calendar/appinfo/database.xml +++ b/apps/calendar/appinfo/database.xml @@ -290,4 +290,56 @@ </table> + <table> + + <name>*dbprefix*calendar_repeat</name> + + <declaration> + + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>eventid</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>calid</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <unsigned>true</unsigned> + <length>4</length> + </field> + + <field> + <name>startdate</name> + <type>timestamp</type> + <default>0000-00-00 00:00:00</default> + <notnull>false</notnull> + </field> + + <field> + <name>enddate</name> + <type>timestamp</type> + <default>0000-00-00 00:00:00</default> + <notnull>false</notnull> + </field> + + </declaration> + + </table> + </database> diff --git a/apps/calendar/appinfo/remote.php b/apps/calendar/appinfo/remote.php index d500ec1080a..f499d909666 100644 --- a/apps/calendar/appinfo/remote.php +++ b/apps/calendar/appinfo/remote.php @@ -7,8 +7,8 @@ */ OCP\App::checkAppEnabled('calendar'); -if(substr($_SERVER["REQUEST_URI"],0,strlen(OC::$APPSWEBROOT . '/apps/calendar/caldav.php')) == OC::$APPSWEBROOT . '/apps/calendar/caldav.php'){ - $baseuri = OC::$APPSWEBROOT . '/apps/calendar/caldav.php'; +if(substr($_SERVER["REQUEST_URI"],0,strlen(OC_App::getAppWebPath('calendar').'/caldav.php')) == OC_App::getAppWebPath('calendar'). '/caldav.php'){ + $baseuri = OC_App::getAppWebPath('calendar').'/caldav.php'; } // only need authentication apps @@ -21,18 +21,17 @@ $principalBackend = new OC_Connector_Sabre_Principal(); $caldavBackend = new OC_Connector_Sabre_CalDAV(); // Root nodes -$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend); +$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend); $Sabre_CalDAV_Principal_Collection->disableListing = true; // Disable listening -$Sabre_CalDAV_CalendarRootNode = new Sabre_CalDAV_CalendarRootNode($principalBackend, $caldavBackend); -$Sabre_CalDAV_CalendarRootNode->disableListing = true; // Disable listening +$calendarRoot = new OC_Connector_Sabre_CalDAV_CalendarRoot($principalBackend, $caldavBackend); +$calendarRoot->disableListing = true; // Disable listening -$nodes = array( - $Sabre_CalDAV_Principal_Collection, - $Sabre_CalDAV_CalendarRootNode, +$nodes = array( + $Sabre_CalDAV_Principal_Collection, + $calendarRoot, ); - // Fire up server $server = new Sabre_DAV_Server($nodes); $server->setBaseUri($baseuri); @@ -41,6 +40,7 @@ $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud')); $server->addPlugin(new Sabre_CalDAV_Plugin()); $server->addPlugin(new Sabre_DAVACL_Plugin()); $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload +$server->addPlugin(new Sabre_CalDAV_ICSExportPlugin()); // And off we go! $server->exec(); diff --git a/apps/calendar/appinfo/update.php b/apps/calendar/appinfo/update.php index 3b5998d9987..0e11c998841 100644 --- a/apps/calendar/appinfo/update.php +++ b/apps/calendar/appinfo/update.php @@ -15,3 +15,10 @@ if (version_compare($installedVersion, '0.2.1', '<')) { $r = $stmt->execute(array($color,$id)); } } +if (version_compare($installedVersion, '0.5', '<')) { + $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); + foreach($calendars as $calendar){ + OC_Calendar_Repeat::cleanCalendar($calendar['id']); + OC_Calendar_Repeat::generateCalendar($calendar['id']); + } +}
\ No newline at end of file diff --git a/apps/calendar/appinfo/version b/apps/calendar/appinfo/version index 267577d47e4..cb0c939a936 100644 --- a/apps/calendar/appinfo/version +++ b/apps/calendar/appinfo/version @@ -1 +1 @@ -0.4.1 +0.5.2 diff --git a/apps/calendar/calendar.php b/apps/calendar/calendar.php new file mode 100644 index 00000000000..2c0bee9d233 --- /dev/null +++ b/apps/calendar/calendar.php @@ -0,0 +1,12 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownClouddev at georgswebsite.de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +$l10n = OC_L10N::get('calendar'); +OCP\JSON::checkLoggedIn(); +OCP\JSON::checkAppEnabled('calendar'); +$tmpl = new OCP\Template('calendar', 'part.choosecalendar'); +$tmpl->printpage();
\ No newline at end of file diff --git a/apps/calendar/css/import.css b/apps/calendar/css/import.css new file mode 100644 index 00000000000..fd82006072c --- /dev/null +++ b/apps/calendar/css/import.css @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +#calendar_import_newcalform, #calendar_import_mergewarning, #calendar_import_process, #calendar_import_done{display:none;} +#calendar_import_process_message, #calendar_import_status, #calendar_import_form_message, #calendar_import_mergewarning{text-align:center;} +#calendar_import_form_message{font-weight: bold;} +#calendar_import_newcalendar{width:415px;float:right;} +#calendar_import_mergewarning{clear: both;} +#calendar_import_defaultcolors{clear:both;margin: 0 auto;text-align: center;} +.calendar_import_warning{border-color: #fc3333;} +.calendar-colorpicker-color{display:inline-block;width:20px;height:5px;margin: 0 auto;cursor:pointer;border:2px solid transparent;margin-top: 5px;}
\ No newline at end of file diff --git a/apps/calendar/css/style.css b/apps/calendar/css/style.css index 373a4565638..64a779b9a9f 100644 --- a/apps/calendar/css/style.css +++ b/apps/calendar/css/style.css @@ -19,7 +19,7 @@ #loading { display: none;margin: 0;padding:0;margin-top:5px;} -#calendar_holder {position: relative;bottom: 0; right: 0; left: 0; top: 3em;} +#fullcalendar {position: relative;bottom: 0; right: 0; left: 0; top: 3em;} .fc-content{padding:2px 4px;} #listview {margin: 0; padding: 10px; background: #EEEEEE;} #listview #more_before, #listview #more_after {border: 1px solid #1a1a1a; width:25em;padding: 3px;text-align: center;} @@ -40,8 +40,6 @@ .thisday{background: #FFFABC;} .event {position:relative;} .event.colored {border-bottom: 1px solid white;} -.popup {display: none; position: absolute; z-index: 1000; background: #eeeeee; color: #000000; border: 1px solid #1a1a1a; font-size: 90%;} -.event_popup {width: 280px; height: 40px; padding: 10px;} input[type="button"].active {color: #6193CF} #fromtime, #totime { @@ -133,3 +131,12 @@ padding:0 8px 2px; line-height:1.2; margin-bottom:4px; } + +#choosecalendar a.settings{ + margin-top: 25px; + margin-right: 10px; +} + +#fullcalendar{ + overflow: scroll; +}
\ No newline at end of file diff --git a/apps/calendar/export.php b/apps/calendar/export.php index 5780d191a57..1374c49cc0d 100644 --- a/apps/calendar/export.php +++ b/apps/calendar/export.php @@ -5,35 +5,26 @@ * later. * See the COPYING-README file. */ - - OCP\User::checkLoggedIn(); OCP\App::checkAppEnabled('calendar'); $cal = isset($_GET['calid']) ? $_GET['calid'] : NULL; $event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL; -$nl = "\r\n"; if(isset($cal)){ $calendar = OC_Calendar_App::getCalendar($cal, true); if(!$calendar){ header('HTTP/1.0 404 Not Found'); exit; } - $calobjects = OC_Calendar_Object::all($cal); header('Content-Type: text/Calendar'); - header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics'); - foreach($calobjects as $calobject){ - echo $calobject['calendardata'] . $nl; - } + header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $calendar['displayname']) . '.ics'); + echo OC_Calendar_Export::export($cal, OC_Calendar_Export::CALENDAR); }elseif(isset($event)){ $data = OC_Calendar_App::getEventObject($_GET['eventid'], true); if(!$data){ header('HTTP/1.0 404 Not Found'); exit; } - $calendarid = $data['calendarid']; - $calendar = OC_Calendar_App::getCalendar($calendarid); header('Content-Type: text/Calendar'); - header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics'); - echo $data['calendardata']; -} -?> + header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $data['summary']) . '.ics'); + echo OC_Calendar_Export::export($event, OC_Calendar_Export::EVENT); +}
\ No newline at end of file diff --git a/apps/calendar/img/icon.png b/apps/calendar/img/icon.png Binary files differindex eb9e07cbb10..267efd997f3 100644 --- a/apps/calendar/img/icon.png +++ b/apps/calendar/img/icon.png diff --git a/apps/calendar/import_tmp/Info b/apps/calendar/import_tmp/Info deleted file mode 100644 index abafbce435c..00000000000 --- a/apps/calendar/import_tmp/Info +++ /dev/null @@ -1,2 +0,0 @@ -This folder contains static files with the percentage of the import. -Requires write permission diff --git a/apps/calendar/index.php b/apps/calendar/index.php index cf03a7a3cd3..a8ad4ab3356 100644 --- a/apps/calendar/index.php +++ b/apps/calendar/index.php @@ -5,25 +5,34 @@ * later. * See the COPYING-README file. */ - - OCP\User::checkLoggedIn(); OCP\App::checkAppEnabled('calendar'); // Create default calendar ... -$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1); +$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), false); if( count($calendars) == 0){ OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(),'Default calendar'); - $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1); + $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true); } $eventSources = array(); foreach($calendars as $calendar){ - $eventSources[] = OC_Calendar_Calendar::getEventSourceInfo($calendar); + if($calendar['active'] == 1) { + $eventSources[] = OC_Calendar_Calendar::getEventSourceInfo($calendar); + } } -$eventSources[] = array('url' => '?app=calendar&getfile=ajax/events.php?calendar_id=shared_rw', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable'=>'true'); -$eventSources[] = array('url' => '?app=calendar&getfile=ajax/events.php?calendar_id=shared_r', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable' => 'false'); +$events_baseURL = OCP\Util::linkTo('calendar', 'ajax/events.php'); +$eventSources[] = array('url' => $events_baseURL.'?calendar_id=shared_rw', + 'backgroundColor' => '#1D2D44', + 'borderColor' => '#888', + 'textColor' => 'white', + 'editable'=>'true'); +$eventSources[] = array('url' => $events_baseURL.'?calendar_id=shared_r', + 'backgroundColor' => '#1D2D44', + 'borderColor' => '#888', + 'textColor' => 'white', + 'editable' => 'false'); OCP\Util::emitHook('OC_Calendar', 'getSources', array('sources' => &$eventSources)); $categories = OC_Calendar_App::getCategoryOptions(); @@ -54,9 +63,9 @@ OCP\Util::addscript('contacts','jquery.multi-autocomplete'); OCP\Util::addscript('','oc-vcategories'); OCP\App::setActiveNavigationEntry('calendar_index'); $tmpl = new OCP\Template('calendar', 'calendar', 'user'); -$tmpl->assign('eventSources', $eventSources); +$tmpl->assign('eventSources', $eventSources,false); $tmpl->assign('categories', $categories); if(array_key_exists('showevent', $_GET)){ - $tmpl->assign('showevent', $_GET['showevent']); + $tmpl->assign('showevent', $_GET['showevent'], false); } $tmpl->printPage(); diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js index efdff52998c..23846c89b84 100644 --- a/apps/calendar/js/calendar.js +++ b/apps/calendar/js/calendar.js @@ -18,7 +18,7 @@ Calendar={ startEventDialog:function(){ Calendar.UI.loading(false); $('.tipsy').remove(); - $('#calendar_holder').fullCalendar('unselect'); + $('#fullcalendar').fullCalendar('unselect'); Calendar.UI.lockTime(); $( "#from" ).datepicker({ dateFormat : 'dd-mm-yy' @@ -78,7 +78,7 @@ Calendar={ $('#event').dialog('destroy').remove(); }else{ Calendar.UI.loading(true); - $('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'edit.form.php') + '?id=' + id, Calendar.UI.startEventDialog); + $('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'edit.form.php'), {id: id}, Calendar.UI.startEventDialog); } }, submitDeleteEventForm:function(url){ @@ -88,7 +88,7 @@ Calendar={ $.post(url, post, function(data){ Calendar.UI.loading(false); if(data.status == 'success'){ - $('#calendar_holder').fullCalendar('removeEvents', $('#event_form input[name=id]').val()); + $('#fullcalendar').fullCalendar('removeEvents', $('#event_form input[name=id]').val()); $('#event').dialog('destroy').remove(); } else { $('#errorbox').html(t('calendar', 'Deletion failed')); @@ -133,7 +133,7 @@ Calendar={ } else if(data.status == 'success'){ $('#event').dialog('destroy').remove(); - $('#calendar_holder').fullCalendar('refetchEvents'); + $('#fullcalendar').fullCalendar('refetchEvents'); } },"json"); }, @@ -148,7 +148,7 @@ Calendar={ console.log("Event moved successfully"); }else{ revertFunc(); - $('#calendar_holder').fullCalendar('refetchEvents'); + $('#fullcalendar').fullCalendar('refetchEvents'); } }); }, @@ -163,7 +163,7 @@ Calendar={ console.log("Event resized successfully"); }else{ revertFunc(); - $('#calendar_holder').fullCalendar('refetchEvents'); + $('#fullcalendar').fullCalendar('refetchEvents'); } }); }, @@ -207,8 +207,7 @@ Calendar={ } }, showCalDAVUrl:function(username, calname){ - $('#caldav_url').val(totalurl + '/' + username + '/' + calname); - $('#caldav_url').val(encodeURI($('#caldav_url').val())); + $('#caldav_url').val(totalurl + '/' + username + '/' + decodeURIComponent(calname)); $('#caldav_url').show(); $("#caldav_url_close").show(); }, @@ -240,11 +239,11 @@ Calendar={ doc_height = $(document).height(), win_height = $(window).height(); if(direction == 'down' && win_height == (doc_height - scroll)){ - $('#calendar_holder').fullCalendar('next'); + $('#fullcalendar').fullCalendar('next'); $(document).scrollTop(0); event.preventDefault(); }else if (direction == 'top' && scroll == 0) { - $('#calendar_holder').fullCalendar('prev'); + $('#fullcalendar').fullCalendar('prev'); $(document).scrollTop(win_height); event.preventDefault(); } @@ -399,9 +398,9 @@ Calendar={ if (data.status == 'success'){ checkbox.checked = data.active == 1; if (data.active == 1){ - $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); + $('#fullcalendar').fullCalendar('addEventSource', data.eventSource); }else{ - $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); + $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url); } } }); @@ -414,7 +413,7 @@ Calendar={ }, edit:function(object, calendarid){ var tr = $(document.createElement('tr')) - .load(OC.filePath('calendar', 'ajax/calendar', 'edit.form.php') + "?calendarid="+calendarid, + .load(OC.filePath('calendar', 'ajax/calendar', 'edit.form.php'), {calendarid: calendarid}, function(){Calendar.UI.Calendar.colorPicker(this)}); $(object).closest('tr').after(tr).hide(); }, @@ -427,9 +426,10 @@ Calendar={ function(data) { if (data.status == 'success'){ var url = 'ajax/events.php?calendar_id='+calid; - $('#calendar_holder').fullCalendar('removeEventSource', url); + $('#fullcalendar').fullCalendar('removeEventSource', url); $('#choosecalendar_dialog').dialog('destroy').remove(); Calendar.UI.Calendar.overview(); + $('#fullcalendar').fullCalendar('refetchEvents'); } }); } @@ -456,8 +456,8 @@ Calendar={ function(data){ if(data.status == 'success'){ $(button).closest('tr').prev().html(data.page).show().next().remove(); - $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url); - $('#calendar_holder').fullCalendar('addEventSource', data.eventSource); + $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url); + $('#fullcalendar').fullCalendar('addEventSource', data.eventSource); if (calendarid == 'new'){ $('#choosecalendar_dialog > table:first').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>'); } @@ -503,14 +503,14 @@ Calendar={ currentid: 'false', idtype: '', activation:function(object,owner,id){ - $.getJSON(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0}); - $('#calendar_holder').fullCalendar('refetchEvents'); + $.post(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0}); + $('#fullcalendar').fullCalendar('refetchEvents'); }, dropdown:function(userid, calid){ $('.calendar_share_dropdown').remove(); var element = document.getElementById(userid+'_'+calid); $('<div class="calendar_share_dropdown"></div>').appendTo(element); - $.get(OC.filePath('calendar', 'ajax/share', 'dropdown.php') + '?calid=' + calid, function(data){ + $.post(OC.filePath('calendar', 'ajax/share', 'dropdown.php'), {calid: calid}, function(data){ $('.calendar_share_dropdown').html(data); $('.calendar_share_dropdown').show('blind'); $('#share_user').chosen(); @@ -520,7 +520,7 @@ Calendar={ Calendar.UI.Share.idtype = 'calendar'; }, share:function(id, idtype, sharewith, sharetype){ - $.getJSON(OC.filePath('calendar', 'ajax/share', 'share.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(data){ + $.post(OC.filePath('calendar', 'ajax/share', 'share.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(data){ if(sharetype == 'public'){ $('#public_token').val(parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=calendar&t='+data.message); $('#public_token').css('display', 'block'); @@ -528,7 +528,7 @@ Calendar={ }); }, unshare:function(id, idtype, sharewith, sharetype){ - $.getJSON(OC.filePath('calendar', 'ajax/share', 'unshare.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(){ + $.post(OC.filePath('calendar', 'ajax/share', 'unshare.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(){ if(sharetype == 'public'){ $('#public_token').val(''); $('#public_token').css('display', 'none'); @@ -536,7 +536,7 @@ Calendar={ }); }, changepermission:function(id, idtype, sharewith, sharetype, permission){ - $.getJSON(OC.filePath('calendar', 'ajax/share', 'changepermission.php'),{id:id, idtype:idtype, sharewith: sharewith, sharetype:sharetype, permission: (permission?1:0)}); + $.post(OC.filePath('calendar', 'ajax/share', 'changepermission.php'),{id:id, idtype:idtype, sharewith: sharewith, sharetype:sharetype, permission: (permission?1:0)}); }, init:function(){ $('.calendar_share_dropdown').live('mouseleave', function(){ @@ -547,7 +547,7 @@ Calendar={ $('#share_user').live('change', function(){ if($('#sharewithuser_' + $('#share_user option:selected').text()).length == 0){ Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_user option:selected').text(), 'user'); - var newitem = '<li id="sharewithuser_' + $('#share_user option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_user option:selected').text() + '">' + $('#share_user option:selected').text() + '<img src="' + oc_webroot + '/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>'; + var newitem = '<li id="sharewithuser_' + $('#share_user option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_user option:selected').text() + '">' + $('#share_user option:selected').text() + '<img src="' + OC.imagePath('core', 'actions/delete.svg') + '" class="svg action" style="display:none;float:right;"></li>'; $('#sharewithuser_list').append(newitem); $('#sharewithuser_' + $('#share_user option:selected').text() + ' > img').click(function(){ $('#share_user option[value="' + $(this).parent().text() + '"]').removeAttr('disabled'); @@ -562,7 +562,7 @@ Calendar={ $('#share_group').live('change', function(){ if($('#sharewithgroup_' + $('#share_group option:selected').text()).length == 0){ Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_group option:selected').text(), 'group'); - var newitem = '<li id="sharewithgroup_' + $('#share_group option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_group option:selected').text() + '">' + $('#share_group option:selected').text() + '<img src="' + oc_webroot + '/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>'; + var newitem = '<li id="sharewithgroup_' + $('#share_group option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_group option:selected').text() + '">' + $('#share_group option:selected').text() + '<img src="' + OC.imagePath('core', 'actions/delete.svg') + '" class="svg action" style="display:none;float:right;"></li>'; $('#sharewithgroup_list').append(newitem); $('#sharewithgroup_' + $('#share_group option:selected').text() + ' > img').click(function(){ $('#share_group option[value="' + $(this).parent().text() + '"]').removeAttr('disabled'); @@ -605,8 +605,53 @@ Calendar={ }); /*var permissions = (this.checked) ? 1 : 0;*/ } + }, + Drop:{ + init:function(){ + if (typeof window.FileReader === 'undefined') { + console.log('The drop-import feature is not supported in your browser :('); + return false; + } + droparea = document.getElementById('fullcalendar'); + droparea.ondrop = function(e){ + e.preventDefault(); + Calendar.UI.Drop.drop(e); + } + console.log('Drop initialized successfully'); + }, + drop:function(e){ + var files = e.dataTransfer.files; + for(var i = 0;i < files.length;i++){ + var file = files[i]; + reader = new FileReader(); + reader.onload = function(event){ + Calendar.UI.Drop.import(event.target.result); + $('#fullcalendar').fullCalendar('refetchEvents'); + } + reader.readAsDataURL(file); + } + }, + import:function(data){ + $.post(OC.filePath('calendar', 'ajax/import', 'dropimport.php'), {'data':data},function(result) { + if(result.status == 'success'){ + $('#fullcalendar').fullCalendar('addEventSource', result.eventSource); + $('#notification').html(result.message); + $('#notification').slideDown(); + window.setTimeout(function(){$('#notification').slideUp();}, 5000); + return true; + }else{ + $('#notification').html(result.message); + $('#notification').slideDown(); + window.setTimeout(function(){$('#notification').slideUp();}, 5000); + } + }); + } } - } + }, + Settings:{ + // + }, + } $.fullCalendar.views.list = ListView; function ListView(element, calendar) { @@ -774,7 +819,7 @@ function ListView(element, calendar) { } $(document).ready(function(){ Calendar.UI.initScroll(); - $('#calendar_holder').fullCalendar({ + $('#fullcalendar').fullCalendar({ header: false, firstDay: firstDay, editable: true, @@ -803,17 +848,17 @@ $(document).ready(function(){ dayNamesShort: dayNamesShort, allDayText: allDayText, viewDisplay: function(view) { - $('#datecontrol_date').html(view.title); + $('#datecontrol_date').val($('<p>').html(view.title).text()); if (view.name != defaultView) { - $.get(OC.filePath('calendar', 'ajax', 'changeview.php') + "?v="+view.name); + $.post(OC.filePath('calendar', 'ajax', 'changeview.php'), {v:view.name}); defaultView = view.name; } Calendar.UI.setViewActive(view.name); if (view.name == 'agendaWeek') { - $('#calendar_holder').fullCalendar('option', 'aspectRatio', 0.1); + $('#fullcalendar').fullCalendar('option', 'aspectRatio', 0.1); } else { - $('#calendar_holder').fullCalendar('option', 'aspectRatio', 1.35); + $('#fullcalendar').fullCalendar('option', 'aspectRatio', 1.35); } }, columnFormat: { @@ -842,26 +887,49 @@ $(document).ready(function(){ loading: Calendar.UI.loading, eventSources: eventSources }); + $('#datecontrol_date').datepicker({ + changeMonth: true, + changeYear: true, + showButtonPanel: true, + beforeShow: function(input, inst) { + var calendar_holder = $('#fullcalendar'); + var date = calendar_holder.fullCalendar('getDate'); + inst.input.datepicker('setDate', date); + inst.input.val(calendar_holder.fullCalendar('getView').title); + return inst; + }, + onSelect: function(value, inst) { + var date = inst.input.datepicker('getDate'); + $('#fullcalendar').fullCalendar('gotoDate', date); + } + }); fillWindow($('#content')); OCCategories.changed = Calendar.UI.categoriesChanged; OCCategories.app = 'calendar'; $('#oneweekview_radio').click(function(){ - $('#calendar_holder').fullCalendar('changeView', 'agendaWeek'); + $('#fullcalendar').fullCalendar('changeView', 'agendaWeek'); }); $('#onemonthview_radio').click(function(){ - $('#calendar_holder').fullCalendar('changeView', 'month'); + $('#fullcalendar').fullCalendar('changeView', 'month'); }); $('#listview_radio').click(function(){ - $('#calendar_holder').fullCalendar('changeView', 'list'); + $('#fullcalendar').fullCalendar('changeView', 'list'); }); $('#today_input').click(function(){ - $('#calendar_holder').fullCalendar('today'); + $('#fullcalendar').fullCalendar('today'); }); $('#datecontrol_left').click(function(){ - $('#calendar_holder').fullCalendar('prev'); + $('#fullcalendar').fullCalendar('prev'); }); $('#datecontrol_right').click(function(){ - $('#calendar_holder').fullCalendar('next'); + $('#fullcalendar').fullCalendar('next'); }); Calendar.UI.Share.init(); + Calendar.UI.Drop.init(); + $('#choosecalendar .generalsettings').on('click keydown', function() { + OC.appSettings({appid:'calendar', loadJS:true, cache:false}); + }); + $('#choosecalendar .calendarsettings').on('click keydown', function() { + OC.appSettings({appid:'calendar', loadJS:true, cache:false, scriptName:'calendar.php'}); + }); }); diff --git a/apps/calendar/js/geo.js b/apps/calendar/js/geo.js index 092d8547469..99290d940e3 100644 --- a/apps/calendar/js/geo.js +++ b/apps/calendar/js/geo.js @@ -6,7 +6,7 @@ */ if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { - $.getJSON(OC.filePath('calendar', 'ajax/settings', 'guesstimezone.php') + '?lat=' + position.coords.latitude + '&long=' + position.coords.longitude, + $.post(OC.filePath('calendar', 'ajax/settings', 'guesstimezone.php'), {lat: position.coords.latitude, lng: position.coords.longitude}, function(data){ if (data.status == 'success' && typeof(data.message) != 'undefined'){ $('#notification').html(data.message); diff --git a/apps/calendar/js/loader.js b/apps/calendar/js/loader.js index 60d92f448ee..253abafc427 100644 --- a/apps/calendar/js/loader.js +++ b/apps/calendar/js/loader.js @@ -5,77 +5,175 @@ * See the COPYING-README file. */ Calendar_Import={ - importdialog: function(filename){ - var path = $('#dir').val(); - $('body').append('<div id="calendar_import"></div>'); - $('#calendar_import').load(OC.filePath('calendar', 'ajax/import', 'dialog.php'), {filename:filename, path:path}, function(){Calendar_Import.initdialog(filename);}); + Store:{ + file: '', + path: '', + id: 0, + method: '', + calname: '', + calcolor: '', + progresskey: '', + percentage: 0 }, - initdialog: function(filename){ - $('#calendar_import_dialog').dialog({ - width : 500, - close : function() { - $(this).dialog('destroy').remove(); - $('#calendar_import').remove(); + Dialog:{ + open: function(filename){ + OC.addStyle('calendar', 'import'); + Calendar_Import.Store.file = filename; + Calendar_Import.Store.path = $('#dir').val(); + $('body').append('<div id="calendar_import"></div>'); + $('#calendar_import').load(OC.filePath('calendar', 'ajax/import', 'dialog.php'), {filename:Calendar_Import.Store.file, path:Calendar_Import.Store.path},function(){ + Calendar_Import.Dialog.init(); + }); + }, + close: function(){ + Calendar_Import.reset(); + $(this).dialog('destroy').remove(); + $('#calendar_import_dialog').remove(); + }, + init: function(){ + //init dialog + $('#calendar_import_dialog').dialog({ + width : 500, + resizable: false, + close : function() { + Calendar_Import.Dialog.close(); + } + }); + //init buttons + $('#calendar_import_done').click(function(){ + Calendar_Import.Dialog.close(); + }); + $('#calendar_import_submit').click(function(){ + Calendar_Import.Core.process(); + }); + $('#calendar_import_mergewarning').click(function(){ + $('#calendar_import_newcalendar').attr('value', $('#calendar_import_availablename').val()); + Calendar_Import.Dialog.mergewarning($('#calendar_import_newcalendar').val()); + }); + $('#calendar_import_calendar').change(function(){ + if($('#calendar_import_calendar option:selected').val() == 'newcal'){ + $('#calendar_import_newcalform').slideDown('slow'); + Calendar_Import.Dialog.mergewarning($('#calendar_import_newcalendar').val()); + }else{ + $('#calendar_import_newcalform').slideUp('slow'); + $('#calendar_import_mergewarning').slideUp('slow'); + } + }); + $('#calendar_import_newcalendar').keyup(function(){ + Calendar_Import.Dialog.mergewarning($.trim($('#calendar_import_newcalendar').val())); + }); + $('#calendar_import_newcalendar_color').miniColors({ + letterCase: 'uppercase' + }); + $('.calendar-colorpicker-color').click(function(){ + var str = $(this).attr('rel'); + str = str.substr(1); + $('#calendar_import_newcalendar_color').attr('value', str); + $(".color-picker").miniColors('value', '#' + str); + }); + //init progressbar + $('#calendar_import_progressbar').progressbar({value: Calendar_Import.Store.percentage}); + Calendar_Import.Store.progresskey = $('#calendar_import_progresskey').val(); + }, + mergewarning: function(newcalname){ + $.post(OC.filePath('calendar', 'ajax/import', 'calendarcheck.php'), {calname: newcalname}, function(data){ + if(data.message == 'exists'){ + $('#calendar_import_mergewarning').slideDown('slow'); + }else{ + $('#calendar_import_mergewarning').slideUp('slow'); + } + }); + }, + update: function(){ + if(Calendar_Import.Store.percentage == 100){ + return false; } - }); - $('#import_done_button').click(function(){ - $('#calendar_import_dialog').dialog('destroy').remove(); - $('#calendar_import').remove(); - }); - $('#progressbar').progressbar({value: 0}); - $('#startimport').click(function(){ - var filename = $('#filename').val(); - var path = $('#path').val(); - var calid = $('#calendar option:selected').val(); - if($('#calendar option:selected').val() == 'newcal'){ - var method = 'new'; - var calname = $('#newcalendar').val(); - var calname = $.trim(calname); - if(calname == ''){ - $('#newcalendar').css('background-color', '#FF2626'); - $('#newcalendar').focus(function(){ - $('#newcalendar').css('background-color', '#F8F8F8'); - }); - return false; + $.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {progresskey: Calendar_Import.Store.progresskey, getprogress: true}, function(data){ + if(data.status == 'success'){ + if(data.percent == null){ + return false; + } + Calendar_Import.Store.percentage = parseInt(data.percent); + $('#calendar_import_progressbar').progressbar('option', 'value', parseInt(data.percent)); + if(data.percent < 100 ){ + window.setTimeout('Calendar_Import.Dialog.update()', 250); + }else{ + $('#calendar_import_done').css('display', 'block'); + } + }else{ + $('#calendar_import_progressbar').progressbar('option', 'value', 100); + $('#calendar_import_progressbar > div').css('background-color', '#FF2626'); + $('#calendar_import_status').html(data.message); } - }else{ - var method = 'old'; + }); + return 0; + }, + warning: function(selector){ + $(selector).addClass('calendar_import_warning'); + $(selector).focus(function(){ + $(selector).removeClass('calendar_import_warning'); + }); + } + }, + Core:{ + process: function(){ + var validation = Calendar_Import.Core.prepare(); + if(validation){ + $('#calendar_import_form').css('display', 'none'); + $('#calendar_import_process').css('display', 'block'); + $('#calendar_import_newcalendar').attr('readonly', 'readonly'); + $('#calendar_import_calendar').attr('disabled', 'disabled'); + Calendar_Import.Core.send(); + window.setTimeout('Calendar_Import.Dialog.update()', 250); } - $('#newcalendar').attr('readonly', 'readonly'); - $('#calendar').attr('disabled', 'disabled'); - var progressfile = $('#progressfile').val(); - $.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {method: String (method), calname: String (calname), path: String (path), file: String (filename), id: String (calid)}, function(data){ + }, + send: function(){ + $.post(OC.filePath('calendar', 'ajax/import', 'import.php'), + {progresskey: Calendar_Import.Store.progresskey, method: String (Calendar_Import.Store.method), calname: String (Calendar_Import.Store.calname), path: String (Calendar_Import.Store.path), file: String (Calendar_Import.Store.file), id: String (Calendar_Import.Store.id), calcolor: String (Calendar_Import.Store.calcolor)}, function(data){ if(data.status == 'success'){ - $('#progressbar').progressbar('option', 'value', 100); - $('#import_done').css('display', 'block'); + $('#calendar_import_progressbar').progressbar('option', 'value', 100); + Calendar_Import.Store.percentage = 100; + $('#calendar_import_done').css('display', 'block'); + $('#calendar_import_status').html(data.message); + }else{ + $('#calendar_import_progressbar').progressbar('option', 'value', 100); + $('#calendar_import_progressbar > div').css('background-color', '#FF2626'); + $('#calendar_import_status').html(data.message); } }); - $('#form_container').css('display', 'none'); - $('#progressbar_container').css('display', 'block'); - window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500); - }); - $('#calendar').change(function(){ - if($('#calendar option:selected').val() == 'newcal'){ - $('#newcalform').slideDown('slow'); + }, + prepare: function(){ + Calendar_Import.Store.id = $('#calendar_import_calendar option:selected').val(); + if($('#calendar_import_calendar option:selected').val() == 'newcal'){ + Calendar_Import.Store.method = 'new'; + Calendar_Import.Store.calname = $.trim($('#calendar_import_newcalendar').val()); + if(Calendar_Import.Store.calname == ''){ + Calendar_Import.Dialog.warning('#calendar_import_newcalendar'); + return false; + } + Calendar_Import.Store.calcolor = $.trim($('#calendar_import_newcalendar_color').val()); + if(Calendar_Import.Store.calcolor == ''){ + Calendar_Import.Store.calcolor = $('.calendar-colorpicker-color:first').attr('rel'); + } }else{ - $('#newcalform').slideUp('slow'); + Calendar_Import.Store.method = 'old'; } - }); + return true; + } }, - getimportstatus: function(progressfile){ - $.get(OC.filePath('calendar', 'import_tmp', progressfile), function(percent){ - $('#progressbar').progressbar('option', 'value', parseInt(percent)); - if(percent < 100){ - window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500); - }else{ - $('#import_done').css('display', 'block'); - } - }); + reset: function(){ + Calendar_Import.Store.file = ''; + Calendar_Import.Store.path = ''; + Calendar_Import.Store.id = 0; + Calendar_Import.Store.method = ''; + Calendar_Import.Store.calname = ''; + Calendar_Import.Store.progresskey = ''; + Calendar_Import.Store.percentage = 0; } } $(document).ready(function(){ if(typeof FileActions !== 'undefined'){ - FileActions.register('text/calendar','importcal', '', Calendar_Import.importdialog); - FileActions.setDefault('text/calendar','importcal'); + FileActions.register('text/calendar','importCalendar', FileActions.PERMISSION_READ, '', Calendar_Import.Dialog.open); + FileActions.setDefault('text/calendar','importCalendar'); }; }); diff --git a/apps/calendar/js/settings.js b/apps/calendar/js/settings.js index c768a47a797..20753a7b8fe 100644 --- a/apps/calendar/js/settings.js +++ b/apps/calendar/js/settings.js @@ -1,11 +1,7 @@ $(document).ready(function(){ $('#timezone').change( function(){ - OC.msg.startSaving('#calendar .msg') - // Serialize the data var post = $( '#timezone' ).serialize(); - $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){ - //OC.msg.finishedSaving('#calendar .msg', data); - }); + $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){return;}); return false; }); $('#timezone').chosen(); @@ -34,6 +30,7 @@ $(document).ready(function(){ $.getJSON(OC.filePath('calendar', 'ajax/settings', 'timeformat.php'), function(jsondata, status) { $('#' + jsondata.timeformat).attr('selected',true); $('#timeformat').chosen(); + $('#timeformat_chzn').css('width', '100px'); }); $.getJSON(OC.filePath('calendar', 'ajax/settings', 'gettimezonedetection.php'), function(jsondata, status){ if(jsondata.detection == 'true'){ @@ -43,5 +40,27 @@ $(document).ready(function(){ $.getJSON(OC.filePath('calendar', 'ajax/settings', 'getfirstday.php'), function(jsondata, status) { $('#' + jsondata.firstday).attr('selected',true); $('#firstday').chosen(); + $('#firstday_chzn').css('width', '100px'); + }); + $('#cleancalendarcache').click(function(){ + $.getJSON(OC.filePath('calendar', 'ajax/cache', 'rescan.php'), function(){ + calendarcachecheck(); + }); }); + calendarcachecheck(); + }); +function calendarcachecheck(){ + $.getJSON(OC.filePath('calendar', 'ajax/cache', 'status.php'), function(jsondata, status) { + $('#cleancalendarcache').attr('title', jsondata.l10n.text); + if(jsondata.status == 'success'){ + $('#cleancalendarcache').css('background', '#F8F8F8'); + $('#cleancalendarcache').css('color', '#333'); + $('#cleancalendarcache').css('text-shadow', '#fff 0 1px 0'); + }else{ + $('#cleancalendarcache').css('background', '#DC143C'); + $('#cleancalendarcache').css('color', '#FFFFFF'); + $('#cleancalendarcache').css('text-shadow', '0px 0px 0px #fff, 0px 0px #fff'); + } + }); +}
\ No newline at end of file diff --git a/apps/calendar/l10n/ar.php b/apps/calendar/l10n/ar.php index 679f1102853..1ca5e0ead5d 100644 --- a/apps/calendar/l10n/ar.php +++ b/apps/calendar/l10n/ar.php @@ -1,9 +1,19 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "ليس جميع الجداول الزمنيه محفوضه مؤقة", +"Everything seems to be completely cached" => "كل شيء محفوض مؤقة", +"No calendars found." => "لم يتم العثور على جدول الزمني", +"No events found." => "لم يتم العثور على احداث", "Wrong calendar" => "جدول زمني خاطئ", "New Timezone:" => "التوقيت الجديد", "Timezone changed" => "تم تغيير المنطقة الزمنية", "Invalid request" => "طلب غير مفهوم", "Calendar" => "الجدول الزمني", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "ddd M/d", +"MMMM yyyy" => "ddd M/d", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "عيد ميلاد", "Business" => "عمل", "Call" => "إتصال", @@ -19,6 +29,9 @@ "Projects" => "مشاريع", "Questions" => "اسئلة", "Work" => "العمل", +"by" => "من قبل", +"unnamed" => "غير مسمى", +"New Calendar" => "جدول زمني جديد", "Does not repeat" => "لا يعاد", "Daily" => "يومي", "Weekly" => "أسبوعي", @@ -63,8 +76,19 @@ "by day and month" => "حسب اليوم و الشهر", "Date" => "تاريخ", "Cal." => "تقويم", +"Sun." => "أحد", +"Mon." => "أثن.", +"Tue." => "ثلا.", +"Wed." => "أرب.", +"Thu." => "خمي.", +"Fri." => "جمع.", +"Sat." => "سبت", +"Jan." => "ك2", +"Feb." => "شبا.", +"Mar." => "آذا.", +"Apr." => "نيس.", +"May." => "أيا.", "All day" => "كل النهار", -"New Calendar" => "جدول زمني جديد", "Missing fields" => "خانات خالية من المعلومات", "Title" => "عنوان", "From Date" => "من تاريخ", @@ -77,13 +101,15 @@ "Month" => "شهر", "List" => "قائمة", "Today" => "اليوم", -"Calendars" => "الجداول الزمنية", -"There was a fail, while parsing the file." => "لم يتم قراءة الملف بنجاح.", -"Choose active calendars" => "إختر الجدول الزمني الرئيسي", +"Your calendars" => "جداولك الزمنيه", "CalDav Link" => "وصلة CalDav", +"Shared calendars" => "جداول زمنيه مشتركه", +"No shared calendars" => "لا يوجد جداول زمنيه مشتركه", +"Share Calendar" => "شارك الجدول الزمني", "Download" => "تحميل", "Edit" => "تعديل", "Delete" => "حذف", +"shared with you by" => "مشاركه من قبل", "New calendar" => "جدول زمني جديد", "Edit calendar" => "عادل الجدول الزمني", "Displayname" => "الاسم المرئي", @@ -94,8 +120,15 @@ "Cancel" => "إلغاء", "Edit an event" => "عادل حدث", "Export" => "تصدير المعلومات", +"Eventinfo" => "تفاصيل الحدث", +"Repeating" => "يعاد", +"Alarm" => "تنبيه", +"Attendees" => "الحضور", +"Share" => "شارك", "Title of the Event" => "عنوان الحدث", "Category" => "فئة", +"Separate categories with commas" => "افصل الفئات بالفواصل", +"Edit categories" => "عدل الفئات", "All Day Event" => "حدث في يوم كامل", "From" => "من", "To" => "إلى", @@ -116,20 +149,23 @@ "Interval" => "المده الفاصله", "End" => "نهايه", "occurrences" => "الاحداث", -"Import a calendar file" => "أدخل ملف التقويم", -"Please choose the calendar" => "الرجاء إختر الجدول الزمني", "create a new calendar" => "انشاء جدول زمني جديد", +"Import a calendar file" => "أدخل ملف التقويم", "Name of new calendar" => "أسم الجدول الزمني الجديد", "Import" => "إدخال", -"Importing calendar" => "يتم ادخال الجدول الزمني", -"Calendar imported successfully" => "تم ادخال الجدول الزمني بنجاح", "Close Dialog" => "أغلق الحوار", "Create a new event" => "إضافة حدث جديد", -"Select category" => "اختر الفئة", +"View an event" => "شاهد الحدث", +"No categories selected" => "لم يتم اختيار الفئات", +"of" => "من", +"at" => "في", "Timezone" => "المنطقة الزمنية", -"Check always for changes of the timezone" => "راقب دائما تغير التقويم الزمني", -"Timeformat" => "شكل الوقت", "24h" => "24 ساعة", "12h" => "12 ساعة", -"Calendar CalDAV syncing address:" => "عنوان لتحديث ال CalDAV الجدول الزمني" +"Users" => "المستخدمين", +"select users" => "اختر المستخدمين", +"Editable" => "يمكن تعديله", +"Groups" => "مجموعات", +"select groups" => "اختر المجموعات", +"make public" => "حدث عام" ); diff --git a/apps/calendar/l10n/bg_BG.php b/apps/calendar/l10n/bg_BG.php index e4f73d24a9a..fc353ebef95 100644 --- a/apps/calendar/l10n/bg_BG.php +++ b/apps/calendar/l10n/bg_BG.php @@ -1,7 +1,23 @@ <?php $TRANSLATIONS = array( +"No calendars found." => "Не са открити календари.", +"No events found." => "Не са открити събития.", +"Import failed" => "Грешка при внасяне", +"New Timezone:" => "Нов часови пояс:", "Timezone changed" => "Часовата зона е сменена", "Invalid request" => "Невалидна заявка", "Calendar" => "Календар", +"Birthday" => "Роджен ден", +"Clients" => "Клиенти", +"Holidays" => "Празници", +"Ideas" => "Идеи", +"Journey" => "Пътуване", +"Meeting" => "Среща", +"Other" => "Друго", +"Personal" => "Лично", +"Projects" => "Проекти", +"Questions" => "Въпроси", +"Work" => "Работа", +"New Calendar" => "Нов календар", "Does not repeat" => "Не се повтаря", "Daily" => "Дневно", "Weekly" => "Седмично", @@ -9,32 +25,60 @@ "Bi-Weekly" => "Двуседмично", "Monthly" => "Месечно", "Yearly" => "Годишно", +"never" => "никога", +"Monday" => "Понеделник", +"Tuesday" => "Вторник", +"Wednesday" => "Сряда", +"Thursday" => "Четвъртък", +"Friday" => "Петък", +"Saturday" => "Събота", +"Sunday" => "Неделя", "All day" => "Всички дни", +"Missing fields" => "Липсват полета", "Title" => "Заглавие", "Week" => "Седмица", "Month" => "Месец", +"List" => "Списък", "Today" => "Днес", -"Calendars" => "Календари", -"There was a fail, while parsing the file." => "Възникна проблем с разлистването на файла.", -"Choose active calendars" => "Изберете активен календар", +"Your calendars" => "Вашите календари", +"Shared calendars" => "Споделени календари", +"No shared calendars" => "Няма споделени календари", +"Share Calendar" => "Споделяне на календар", "Download" => "Изтегляне", "Edit" => "Промяна", +"Delete" => "Изтриване", +"New calendar" => "Нов календар", "Edit calendar" => "Промени календар", "Displayname" => "Екранно име", "Active" => "Активен", "Calendar color" => "Цвят на календара", +"Save" => "Запис", "Submit" => "Продължи", +"Cancel" => "Отказ", "Edit an event" => "Промяна на събитие", +"Export" => "Изнасяне", +"Share" => "Споделяне", "Title of the Event" => "Наименование", "Category" => "Категория", +"Separate categories with commas" => "Отделете категориите със запетаи", +"Edit categories" => "Редактиране на категориите", "All Day Event" => "Целодневно събитие", "From" => "От", "To" => "До", +"Advanced options" => "Разширени настройки", "Location" => "Локация", "Location of the Event" => "Локация", "Description" => "Описание", "Description of the Event" => "Описание", "Repeat" => "Повтори", +"create a new calendar" => "създаване на нов календар", +"Please choose a calendar" => "Изберете календар", +"Name of new calendar" => "Име на новия календар", +"Import" => "Внасяне", +"Close Dialog" => "Затваряне на прозореца", "Create a new event" => "Ново събитие", -"Timezone" => "Часова зона" +"View an event" => "Преглед на събитие", +"No categories selected" => "Няма избрани категории", +"Timezone" => "Часова зона", +"Groups" => "Групи" ); diff --git a/apps/calendar/l10n/ca.php b/apps/calendar/l10n/ca.php index afb1c799d93..9e267604e62 100644 --- a/apps/calendar/l10n/ca.php +++ b/apps/calendar/l10n/ca.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "No tots els calendaris estan en memòria", +"Everything seems to be completely cached" => "Sembla que tot està en memòria", "No calendars found." => "No s'han trobat calendaris.", "No events found." => "No s'han trobat events.", "Wrong calendar" => "Calendari erroni", +"The file contained either no events or all events are already saved in your calendar." => "El fitxer no contenia esdeveniments o aquests ja estaven desats en el vostre caledari", +"events has been saved in the new calendar" => "els esdeveniments s'han desat en el calendari nou", +"Import failed" => "Ha fallat la importació", +"events has been saved in your calendar" => "els esdveniments s'han desat en el calendari", "New Timezone:" => "Nova zona horària:", "Timezone changed" => "La zona horària ha canviat", "Invalid request" => "Sol.licitud no vàlida", "Calendar" => "Calendari", -"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"ddd" => "ddd", +"ddd M/d" => "ddd d/M", +"dddd M/d" => "dddd d/M", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d [MMM ][yyyy ]{'—' d MMM yyyy}", +"dddd, MMM d, yyyy" => "dddd, d MMM, yyyy", "Birthday" => "Aniversari", "Business" => "Feina", "Call" => "Trucada", @@ -22,7 +33,9 @@ "Projects" => "Projectes", "Questions" => "Preguntes", "Work" => "Feina", +"by" => "per", "unnamed" => "sense nom", +"New Calendar" => "Calendari nou", "Does not repeat" => "No es repeteix", "Daily" => "Diari", "Weekly" => "Mensual", @@ -67,8 +80,26 @@ "by day and month" => "per dia del mes", "Date" => "Data", "Cal." => "Cal.", +"Sun." => "Dg.", +"Mon." => "Dl.", +"Tue." => "Dm.", +"Wed." => "Dc.", +"Thu." => "Dj.", +"Fri." => "Dv.", +"Sat." => "Ds.", +"Jan." => "Gen.", +"Feb." => "Febr.", +"Mar." => "Març", +"Apr." => "Abr.", +"May." => "Maig", +"Jun." => "Juny", +"Jul." => "Jul.", +"Aug." => "Ag.", +"Sep." => "Set.", +"Oct." => "Oct.", +"Nov." => "Nov.", +"Dec." => "Des.", "All day" => "Tot el dia", -"New Calendar" => "Calendari nou", "Missing fields" => "Els camps que falten", "Title" => "Títol", "From Date" => "Des de la data", @@ -81,9 +112,7 @@ "Month" => "Mes", "List" => "Llista", "Today" => "Avui", -"Calendars" => "Calendaris", -"There was a fail, while parsing the file." => "S'ha produït un error en analitzar el fitxer.", -"Choose active calendars" => "Seleccioneu calendaris actius", +"Settings" => "Configuració", "Your calendars" => "Els vostres calendaris", "CalDav Link" => "Enllaç CalDav", "Shared calendars" => "Calendaris compartits", @@ -132,27 +161,34 @@ "Interval" => "Interval", "End" => "Final", "occurrences" => "aparicions", -"Import a calendar file" => "Importa un fitxer de calendari", -"Please choose the calendar" => "Escolliu el calendari", "create a new calendar" => "crea un nou calendari", +"Import a calendar file" => "Importa un fitxer de calendari", +"Please choose a calendar" => "Escolliu un calendari", "Name of new calendar" => "Nom del nou calendari", +"Take an available name!" => "Escolliu un nom disponible!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ja hi ha un calendari amb aquest nom. Si continueu, els calendaris es combinaran.", "Import" => "Importa", -"Importing calendar" => "S'està important el calendari", -"Calendar imported successfully" => "El calendari s'ha importat amb èxit", "Close Dialog" => "Tanca el diàleg", "Create a new event" => "Crea un nou esdeveniment", "View an event" => "Mostra un event", "No categories selected" => "No hi ha categories seleccionades", -"Select category" => "Seleccioneu categoria", "of" => "de", "at" => "a", +"General" => "General", "Timezone" => "Zona horària", -"Check always for changes of the timezone" => "Comprova sempre en els canvis de zona horària", -"Timeformat" => "Format de temps", +"Update timezone automatically" => "Actualitza la zona horària automàticament", +"Time format" => "Format horari", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primer dia de la setmana", -"Calendar CalDAV syncing address:" => "Adreça de sincronització del calendari CalDAV:", +"Start week on" => "Comença la setmana en ", +"Cache" => "Memòria de cau", +"Clear cache for repeating events" => "Neteja la memòria de cau pels esdeveniments amb repetició", +"URLs" => "URLs", +"Calendar CalDAV syncing addresses" => "Adreça de sincronització del calendari CalDAV", +"more info" => "més informació", +"Primary address (Kontact et al)" => "Adreça primària (Kontact et al)", +"iOS/OS X" => "IOS/OS X", +"Read only iCalendar link(s)" => "Enllaç(os) iCalendar només de lectura", "Users" => "Usuaris", "select users" => "seleccioneu usuaris", "Editable" => "Editable", diff --git a/apps/calendar/l10n/cs_CZ.php b/apps/calendar/l10n/cs_CZ.php index 05d286d82c1..ab76cc49d1e 100644 --- a/apps/calendar/l10n/cs_CZ.php +++ b/apps/calendar/l10n/cs_CZ.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "V paměti nejsou uloženy kompletně všechny kalendáře", +"Everything seems to be completely cached" => "Zdá se, že vše je kompletně uloženo v paměti", "No calendars found." => "Žádné kalendáře nenalezeny.", "No events found." => "Žádné události nenalezeny.", "Wrong calendar" => "Nesprávný kalendář", +"The file contained either no events or all events are already saved in your calendar." => "Soubor, obsahující všechny záznamy nebo je prázdný, je již uložen ve Vašem kalendáři.", +"events has been saved in the new calendar" => "Záznam byl uložen v novém kalendáři", +"Import failed" => "Import selhal", +"events has been saved in your calendar" => "záznamů bylo uloženo ve Vašem kalendáři", "New Timezone:" => "Nová časová zóna:", "Timezone changed" => "Časová zóna byla změněna", "Invalid request" => "Chybný požadavek", "Calendar" => "Kalendář", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM rrrr", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d. MMM[ yyyy]{ '—' d.[ MMM] yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr", "Birthday" => "Narozeniny", "Business" => "Obchodní", "Call" => "Hovor", @@ -22,7 +33,9 @@ "Projects" => "Projekty", "Questions" => "Dotazy", "Work" => "Pracovní", +"by" => "od", "unnamed" => "nepojmenováno", +"New Calendar" => "Nový kalendář", "Does not repeat" => "Neopakuje se", "Daily" => "Denně", "Weekly" => "Týdně", @@ -67,8 +80,26 @@ "by day and month" => "podle dne a měsíce", "Date" => "Datum", "Cal." => "Kal.", +"Sun." => "Ne", +"Mon." => "Po", +"Tue." => "Út", +"Wed." => "St", +"Thu." => "Čt", +"Fri." => "Pá", +"Sat." => "So", +"Jan." => "Ne", +"Feb." => "únor", +"Mar." => "březen", +"Apr." => "duben", +"May." => "květen", +"Jun." => "červen", +"Jul." => "červenec", +"Aug." => "srpen", +"Sep." => "září", +"Oct." => "říjen", +"Nov." => "listopad", +"Dec." => "prosinec", "All day" => "Celý den", -"New Calendar" => "Nový kalendář", "Missing fields" => "Chybějící pole", "Title" => "Název", "From Date" => "Od data", @@ -81,9 +112,7 @@ "Month" => "měsíc", "List" => "Seznam", "Today" => "dnes", -"Calendars" => "Kalendáře", -"There was a fail, while parsing the file." => "Chyba při převodu souboru", -"Choose active calendars" => "Vybrat aktivní kalendář", +"Settings" => "Nastavení", "Your calendars" => "Vaše kalendáře", "CalDav Link" => "CalDav odkaz", "Shared calendars" => "Sdílené kalendáře", @@ -132,27 +161,34 @@ "Interval" => "Interval", "End" => "Konec", "occurrences" => "výskyty", -"Import a calendar file" => "Importovat soubor kalendáře", -"Please choose the calendar" => "Zvolte prosím kalendář", "create a new calendar" => "vytvořit nový kalendář", +"Import a calendar file" => "Importovat soubor kalendáře", +"Please choose a calendar" => "Vyberte prosím kalendář", "Name of new calendar" => "Název nového kalendáře", +"Take an available name!" => "Použijte volné jméno!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Kalendář s trímto názvem již existuje. Pokud název použijete, stejnojmenné kalendáře budou sloučeny.", "Import" => "Import", -"Importing calendar" => "Kalendář se importuje", -"Calendar imported successfully" => "Kalendář byl úspěšně importován", "Close Dialog" => "Zavřít dialog", "Create a new event" => "Vytvořit novou událost", "View an event" => "Zobrazit událost", "No categories selected" => "Žádné kategorie nevybrány", -"Select category" => "Vyberte kategorii", "of" => "z", "at" => "v", +"General" => "Hlavní", "Timezone" => "Časové pásmo", -"Check always for changes of the timezone" => "Vždy kontrolavat, zda nedošlo ke změně časového pásma", -"Timeformat" => "Formát času", +"Update timezone automatically" => "Obnovit auronaricky časovou zónu.", +"Time format" => "Formát času", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Týden začína v", -"Calendar CalDAV syncing address:" => "Adresa pro synchronizaci kalendáře pomocí CalDAV:", +"Start week on" => "Týden začína v", +"Cache" => "Paměť", +"Clear cache for repeating events" => "Vymazat paměť pro opakuijísí se záznamy", +"URLs" => "URLs", +"Calendar CalDAV syncing addresses" => "Kalendář CalDAV synchronizuje adresy", +"more info" => "podrobnosti", +"Primary address (Kontact et al)" => "Primární adresa (veřejná)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Odkaz(y) kalendáře pouze pro čtení", "Users" => "Uživatelé", "select users" => "vybrat uživatele", "Editable" => "Upravovatelné", diff --git a/apps/calendar/l10n/da.php b/apps/calendar/l10n/da.php index 36551a2a93a..a193d5e1568 100644 --- a/apps/calendar/l10n/da.php +++ b/apps/calendar/l10n/da.php @@ -1,12 +1,22 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Ikke alle kalendere er fuldstændig cached", "No calendars found." => "Der blev ikke fundet nogen kalendere.", "No events found." => "Der blev ikke fundet nogen begivenheder.", "Wrong calendar" => "Forkert kalender", +"The file contained either no events or all events are already saved in your calendar." => "Filen indeholdt enten ingen begivenheder eller alle begivenheder er allerede gemt i din kalender.", +"events has been saved in the new calendar" => "begivenheder er gemt i den nye kalender", +"Import failed" => "import mislykkedes", +"events has been saved in your calendar" => "begivenheder er gemt i din kalender", "New Timezone:" => "Ny tidszone:", "Timezone changed" => "Tidszone ændret", "Invalid request" => "Ugyldig forespørgsel", "Calendar" => "Kalender", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM åååå", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ åååå]{ '—'[ MMM] d åååå}", +"dddd, MMM d, yyyy" => "dddd, MMM d, åååå", "Birthday" => "Fødselsdag", "Business" => "Forretning", "Call" => "Ring", @@ -22,7 +32,9 @@ "Projects" => "Projekter", "Questions" => "Spørgsmål", "Work" => "Arbejde", +"by" => "af", "unnamed" => "unavngivet", +"New Calendar" => "Ny Kalender", "Does not repeat" => "Gentages ikke", "Daily" => "Daglig", "Weekly" => "Ugentlig", @@ -67,8 +79,26 @@ "by day and month" => "efter dag og måned", "Date" => "Dato", "Cal." => "Kal.", +"Sun." => "Søn.", +"Mon." => "Man.", +"Tue." => "Tir.", +"Wed." => "Ons.", +"Thu." => "Tor.", +"Fri." => "Fre.", +"Sat." => "Lør.", +"Jan." => "Jan.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Maj", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Aug.", +"Sep." => "Sep.", +"Oct." => "Okt.", +"Nov." => "Nov.", +"Dec." => "Dec.", "All day" => "Hele dagen", -"New Calendar" => "Ny Kalender", "Missing fields" => "Manglende felter", "Title" => "Titel", "From Date" => "Fra dato", @@ -81,9 +111,7 @@ "Month" => "Måned", "List" => "Liste", "Today" => "I dag", -"Calendars" => "Kalendere", -"There was a fail, while parsing the file." => "Der opstod en fejl under gennemlæsning af filen.", -"Choose active calendars" => "Vælg aktive kalendere", +"Settings" => "Indstillinger", "Your calendars" => "Dine kalendere", "CalDav Link" => "CalDav-link", "Shared calendars" => "Delte kalendere", @@ -132,10 +160,11 @@ "Interval" => "Interval", "End" => "Afslutning", "occurrences" => "forekomster", -"Import a calendar file" => "Importer en kalenderfil", -"Please choose the calendar" => "Vælg venligst kalender", "create a new calendar" => "opret en ny kalender", +"Import a calendar file" => "Importer en kalenderfil", +"Please choose a calendar" => "Vælg en kalender", "Name of new calendar" => "Navn på ny kalender", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med dette navn findes allerede. Hvis du fortsætter alligevel, vil disse kalendere blive sammenlagt.", "Import" => "Importer", "Importing calendar" => "Importerer kalender", "Calendar imported successfully" => "Kalender importeret korrekt", @@ -143,16 +172,15 @@ "Create a new event" => "Opret en ny begivenhed", "View an event" => "Vis en begivenhed", "No categories selected" => "Ingen categorier valgt", -"Select category" => "Vælg kategori", "of" => "fra", "at" => "kl.", +"General" => "Generel", "Timezone" => "Tidszone", -"Check always for changes of the timezone" => "Check altid efter ændringer i tidszone", -"Timeformat" => "Tidsformat", +"Update timezone automatically" => "Opdater tidszone automatisk", "24h" => "24T", "12h" => "12T", -"First day of the week" => "Ugens første dag", -"Calendar CalDAV syncing address:" => "Synkroniseringsadresse til CalDAV:", +"more info" => "flere oplysninger", +"iOS/OS X" => "iOS/OS X", "Users" => "Brugere", "select users" => "Vælg brugere", "Editable" => "Redigerbar", diff --git a/apps/calendar/l10n/de.php b/apps/calendar/l10n/de.php index f12a18baad0..d91753ff74a 100644 --- a/apps/calendar/l10n/de.php +++ b/apps/calendar/l10n/de.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( -"No calendars found." => "Keine Kalender gefunden", -"No events found." => "Keine Termine gefunden", +"Not all calendars are completely cached" => "Noch sind nicht alle Kalender zwischengespeichert.", +"Everything seems to be completely cached" => "Es sieht so aus, als wäre alles vollständig zwischengespeichert.", +"No calendars found." => "Keine Kalender gefunden.", +"No events found." => "Keine Termine gefunden.", "Wrong calendar" => "Falscher Kalender", +"The file contained either no events or all events are already saved in your calendar." => "Entweder enthielt die Datei keine Termine oder alle Termine waren bereits im Kalender gespeichert.", +"events has been saved in the new calendar" => "Der Termin wurde im neuen Kalender gespeichert.", +"Import failed" => "Import fehlgeschlagen", +"events has been saved in your calendar" => "Der Termin wurde im Kalender gespeichert.", "New Timezone:" => "Neue Zeitzone:", "Timezone changed" => "Zeitzone geändert", "Invalid request" => "Fehlerhafte Anfrage", "Calendar" => "Kalender", -"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}", +"ddd" => "ddd", +"ddd M/d" => "ddd d.M", +"dddd M/d" => "dddd d.M", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, d. MMM yyyy", "Birthday" => "Geburtstag", "Business" => "Geschäftlich", "Call" => "Anruf", @@ -22,7 +33,9 @@ "Projects" => "Projekte", "Questions" => "Fragen", "Work" => "Arbeit", +"by" => "von", "unnamed" => "unbenannt", +"New Calendar" => "Neuer Kalender", "Does not repeat" => "einmalig", "Daily" => "täglich", "Weekly" => "wöchentlich", @@ -67,8 +80,26 @@ "by day and month" => "nach Tag und Monat", "Date" => "Datum", "Cal." => "Kal.", +"Sun." => "So", +"Mon." => "Mo", +"Tue." => "Di", +"Wed." => "Mi", +"Thu." => "Do", +"Fri." => "Fr", +"Sat." => "Sa", +"Jan." => "Jan.", +"Feb." => "Feb.", +"Mar." => "Mär.", +"Apr." => "Apr.", +"May." => "Mai", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Aug.", +"Sep." => "Sep.", +"Oct." => "Okt.", +"Nov." => "Nov.", +"Dec." => "Dez.", "All day" => "Ganztags", -"New Calendar" => "Neuer Kalender", "Missing fields" => "fehlende Felder", "Title" => "Titel", "From Date" => "Startdatum", @@ -81,12 +112,10 @@ "Month" => "Monat", "List" => "Liste", "Today" => "Heute", -"Calendars" => "Kalender", -"There was a fail, while parsing the file." => "Fehler beim Einlesen der Datei.", -"Choose active calendars" => "Aktive Kalender wählen", +"Settings" => "Einstellungen", "Your calendars" => "Deine Kalender", "CalDav Link" => "CalDAV-Link", -"Shared calendars" => "geteilte Kalender", +"Shared calendars" => "Geteilte Kalender", "No shared calendars" => "Keine geteilten Kalender", "Share Calendar" => "Kalender teilen", "Download" => "Herunterladen", @@ -132,10 +161,12 @@ "Interval" => "Intervall", "End" => "Ende", "occurrences" => "Termine", -"Import a calendar file" => "Kalenderdatei Importieren", -"Please choose the calendar" => "Bitte wählen Sie den Kalender.", "create a new calendar" => "Neuen Kalender anlegen", +"Import a calendar file" => "Kalenderdatei importieren", +"Please choose a calendar" => "Wählen Sie bitte einen Kalender.", "Name of new calendar" => "Kalendername", +"Take an available name!" => "Wählen Sie einen verfügbaren Namen.", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ein Kalender mit diesem Namen existiert bereits. Sollten Sie fortfahren, werden die beiden Kalender zusammengeführt.", "Import" => "Importieren", "Importing calendar" => "Kalender wird importiert.", "Calendar imported successfully" => "Kalender erfolgreich importiert", @@ -146,15 +177,23 @@ "Select category" => "Kategorie auswählen", "of" => "von", "at" => "um", +"General" => "Allgemein", "Timezone" => "Zeitzone", -"Check always for changes of the timezone" => "immer die Zeitzone überprüfen", -"Timeformat" => "Zeitformat", -"24h" => "24h", -"12h" => "12h", -"First day of the week" => "erster Wochentag", -"Calendar CalDAV syncing address:" => "Kalender CalDAV Synchronisationsadresse:", -"Users" => "Nutzer", -"select users" => "Nutzer auswählen", +"Update timezone automatically" => "Zeitzone automatisch aktualisieren", +"Time format" => "Zeitformat", +"24h" => "24 Stunden", +"12h" => "12 Stunden", +"Start week on" => "Erster Wochentag", +"Cache" => "Zwischenspeicher", +"Clear cache for repeating events" => "Lösche den Zwischenspeicher für wiederholende Veranstaltungen", +"URLs" => "URLs", +"Calendar CalDAV syncing addresses" => "CalDAV-Kalender gleicht Adressen ab", +"more info" => "weitere Informationen", +"Primary address (Kontact et al)" => "Primäre Adresse (Kontakt u.a.)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Nur lesende(r) iCalender-Link(s)", +"Users" => "Benutzer", +"select users" => "Benutzer auswählen", "Editable" => "editierbar", "Groups" => "Gruppen", "select groups" => "Gruppen auswählen", diff --git a/apps/calendar/l10n/el.php b/apps/calendar/l10n/el.php index 0b289fbcf68..ad07d7b5855 100644 --- a/apps/calendar/l10n/el.php +++ b/apps/calendar/l10n/el.php @@ -1,17 +1,28 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Δεν έχει δημιουργηθεί λανθάνουσα μνήμη για όλα τα ημερολόγια", +"Everything seems to be completely cached" => "Όλα έχουν αποθηκευτεί στη cache", "No calendars found." => "Δε βρέθηκαν ημερολόγια.", "No events found." => "Δε βρέθηκαν γεγονότα.", "Wrong calendar" => "Λάθος ημερολόγιο", +"The file contained either no events or all events are already saved in your calendar." => "Το αρχείο που περιέχει είτε κανένα γεγονός είτε όλα τα γεγονότα έχουν ήδη αποθηκευτεί στο ημερολόγιό σας.", +"events has been saved in the new calendar" => "τα συμβάντα αποθηκεύτηκαν σε ένα νέο ημερολόγιο", +"Import failed" => "Η εισαγωγή απέτυχε", +"events has been saved in your calendar" => "το συμβάν αποθηκεύτηκε στο ημερολογιό σου", "New Timezone:" => "Νέα ζώνη ώρας:", "Timezone changed" => "Η ζώνη ώρας άλλαξε", "Invalid request" => "Μη έγκυρο αίτημα", "Calendar" => "Ημερολόγιο", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Γενέθλια", "Business" => "Επιχείρηση", "Call" => "Κλήση", "Clients" => "Πελάτες", -"Deliverer" => "Παραδώσας", +"Deliverer" => "Προμηθευτής", "Holidays" => "Διακοπές", "Ideas" => "Ιδέες", "Journey" => "Ταξίδι", @@ -22,7 +33,9 @@ "Projects" => "Έργα", "Questions" => "Ερωτήσεις", "Work" => "Εργασία", +"by" => "από", "unnamed" => "ανώνυμο", +"New Calendar" => "Νέα Ημερολόγιο", "Does not repeat" => "Μη επαναλαμβανόμενο", "Daily" => "Καθημερινά", "Weekly" => "Εβδομαδιαία", @@ -67,8 +80,26 @@ "by day and month" => "κατά ημέρα και μήνα", "Date" => "Ημερομηνία", "Cal." => "Ημερ.", +"Sun." => "Κυρ.", +"Mon." => "Δευ.", +"Tue." => "Τρί.", +"Wed." => "Τετ.", +"Thu." => "Πέμ.", +"Fri." => "Παρ.", +"Sat." => "Σάβ.", +"Jan." => "Ιαν.", +"Feb." => "Φεβ.", +"Mar." => "Μάρ.", +"Apr." => "Απρ.", +"May." => "Μαΐ.", +"Jun." => "Ιούν.", +"Jul." => "Ιούλ.", +"Aug." => "Αύγ.", +"Sep." => "Σεπ.", +"Oct." => "Οκτ.", +"Nov." => "Νοέ.", +"Dec." => "Δεκ.", "All day" => "Ολοήμερο", -"New Calendar" => "Νέα Ημερολόγιο", "Missing fields" => "Πεδία που λείπουν", "Title" => "Τίτλος", "From Date" => "Από Ημερομηνία", @@ -81,9 +112,6 @@ "Month" => "Μήνας", "List" => "Λίστα", "Today" => "Σήμερα", -"Calendars" => "Ημερολόγια", -"There was a fail, while parsing the file." => "Υπήρξε μια αποτυχία, κατά την σάρωση του αρχείου.", -"Choose active calendars" => "Επιλέξτε τα ενεργά ημερολόγια", "Your calendars" => "Τα ημερολόγια σου", "CalDav Link" => "Σύνδεση CalDAV", "Shared calendars" => "Κοινόχρηστα ημερολόγια", @@ -132,27 +160,29 @@ "Interval" => "Διάστημα", "End" => "Τέλος", "occurrences" => "περιστατικά", -"Import a calendar file" => "Εισαγωγή αρχείου ημερολογίου", -"Please choose the calendar" => "Παρακαλώ επιλέξτε το ημερολόγιο", "create a new calendar" => "δημιουργία νέου ημερολογίου", +"Import a calendar file" => "Εισαγωγή αρχείου ημερολογίου", +"Please choose a calendar" => "Παρακαλώ επέλεξε ένα ημερολόγιο", "Name of new calendar" => "Όνομα νέου ημερολογίου", +"Take an available name!" => "Επέλεξε ένα διαθέσιμο όνομα!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ένα ημερολόγιο με αυτό το όνομα υπάρχει ήδη. Εάν θέλετε να συνεχίσετε, αυτά τα 2 ημερολόγια θα συγχωνευθούν.", "Import" => "Εισαγωγή", -"Importing calendar" => "Εισαγωγή ημερολογίου", -"Calendar imported successfully" => "Το ημερολόγιο εισήχθει επιτυχώς", "Close Dialog" => "Κλείσιμο Διαλόγου", "Create a new event" => "Δημιουργήστε ένα νέο συμβάν", "View an event" => "Εμφάνισε ένα γεγονός", "No categories selected" => "Δεν επελέγησαν κατηγορίες", -"Select category" => "Επιλέξτε κατηγορία", "of" => "του", "at" => "στο", "Timezone" => "Ζώνη ώρας", -"Check always for changes of the timezone" => "Έλεγχος πάντα για τις αλλαγές της ζώνης ώρας", -"Timeformat" => "Μορφή ώρας", "24h" => "24ω", "12h" => "12ω", -"First day of the week" => "Πρώτη μέρα της εβδομάδας", -"Calendar CalDAV syncing address:" => "Διεύθυνση για το συγχρονισμού του ημερολογίου CalDAV:", +"Cache" => "Cache", +"Clear cache for repeating events" => "Εκκαθάριση λανθάνουσας μνήμης για επανάληψη γεγονότων", +"Calendar CalDAV syncing addresses" => "Διευθύνσεις συγχρονισμού ημερολογίου CalDAV", +"more info" => "περισσότερες πλροφορίες", +"Primary address (Kontact et al)" => "Κύρια Διεύθυνση(Επαφή και άλλα)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => " iCalendar link(s) μόνο για ανάγνωση", "Users" => "Χρήστες", "select users" => "επέλεξε χρήστες", "Editable" => "Επεξεργάσιμο", diff --git a/apps/calendar/l10n/eo.php b/apps/calendar/l10n/eo.php index b1127d59ca9..be3db9bfaeb 100644 --- a/apps/calendar/l10n/eo.php +++ b/apps/calendar/l10n/eo.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Ne ĉiuj kalendaroj estas tute kaŝmemorigitaj", +"Everything seems to be completely cached" => "Ĉio ŝajnas tute kaŝmemorigita", "No calendars found." => "Neniu kalendaro troviĝis.", "No events found." => "Neniu okazaĵo troviĝis.", "Wrong calendar" => "Malĝusta kalendaro", -"New Timezone:" => "Nova horzono:", +"The file contained either no events or all events are already saved in your calendar." => "Aŭ la dosiero enhavas neniun okazaĵon aŭ ĉiuj okazaĵoj jam estas konservitaj en via kalendaro.", +"events has been saved in the new calendar" => "okazaĵoj estas konservitaj en la nova kalendaro", +"Import failed" => "Enporto malsukcesis", +"events has been saved in your calendar" => "okazaĵoj estas konservitaj en via kalendaro", +"New Timezone:" => "Nova horozono:", "Timezone changed" => "La horozono estas ŝanĝita", "Invalid request" => "Nevalida peto", "Calendar" => "Kalendaro", +"ddd" => "ddd", +"ddd M/d" => "ddd d/M", +"dddd M/d" => "dddd d/M", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '—'d[ MMM] yyyy}", +"dddd, MMM d, yyyy" => "dddd, d-a de MMM yyyy", "Birthday" => "Naskiĝotago", "Business" => "Negoco", "Call" => "Voko", @@ -22,7 +33,9 @@ "Projects" => "Projektoj", "Questions" => "Demandoj", "Work" => "Laboro", +"by" => "de", "unnamed" => "nenomita", +"New Calendar" => "Nova kalendaro", "Does not repeat" => "Ĉi tio ne ripetiĝas", "Daily" => "Tage", "Weekly" => "Semajne", @@ -67,8 +80,26 @@ "by day and month" => "laŭ tago kaj monato", "Date" => "Dato", "Cal." => "Kal.", +"Sun." => "dim.", +"Mon." => "lun.", +"Tue." => "mar.", +"Wed." => "mer.", +"Thu." => "ĵaŭ.", +"Fri." => "ven.", +"Sat." => "sab.", +"Jan." => "Jan.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Maj.", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Aŭg.", +"Sep." => "Sep.", +"Oct." => "Okt.", +"Nov." => "Nov.", +"Dec." => "Dec.", "All day" => "La tuta tago", -"New Calendar" => "Nova kalendaro", "Missing fields" => "Mankas iuj kampoj", "Title" => "Titolo", "From Date" => "ekde la dato", @@ -81,9 +112,7 @@ "Month" => "Monato", "List" => "Listo", "Today" => "Hodiaŭ", -"Calendars" => "Kalendaroj", -"There was a fail, while parsing the file." => "Malsukceso okazis dum analizo de la dosiero.", -"Choose active calendars" => "Elektu aktivajn kalendarojn", +"Settings" => "Agordo", "Your calendars" => "Viaj kalendaroj", "CalDav Link" => "CalDav-a ligilo", "Shared calendars" => "Kunhavigitaj kalendaroj", @@ -132,27 +161,34 @@ "Interval" => "Intervalo", "End" => "Fino", "occurrences" => "aperoj", -"Import a calendar file" => "Enporti kalendarodosieron", -"Please choose the calendar" => "Bonvolu elekti kalendaron", "create a new calendar" => "Krei novan kalendaron", +"Import a calendar file" => "Enporti kalendarodosieron", +"Please choose a calendar" => "Bonvolu elekti kalendaron", "Name of new calendar" => "Nomo de la nova kalendaro", +"Take an available name!" => "Prenu haveblan nomon!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Kalendaro kun ĉi tiu nomo jam ekzastas. Se vi malgraŭe daŭros, ĉi tiuj kalendaroj kunfandiĝos.", "Import" => "Enporti", -"Importing calendar" => "Kalendaro estas enportata", -"Calendar imported successfully" => "La kalendaro enportiĝis sukcese", "Close Dialog" => "Fermi la dialogon", "Create a new event" => "Krei okazaĵon", "View an event" => "Vidi okazaĵon", "No categories selected" => "Neniu kategorio elektita", -"Select category" => "Elekti kategorion", "of" => "de", "at" => "ĉe", +"General" => "Ĝenerala", "Timezone" => "Horozono", -"Check always for changes of the timezone" => "Ĉiam kontroli ĉu la horzono ŝanĝiĝis", -"Timeformat" => "Tempoformo", +"Update timezone automatically" => "Aŭtomate ĝisdatigi la horozonon", +"Time format" => "Horoformo", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Unua tago de la semajno", -"Calendar CalDAV syncing address:" => "Adreso de kalendarosinkronigo per CalDAV:", +"Start week on" => "Komenci semajnon je", +"Cache" => "Kaŝmemoro", +"Clear cache for repeating events" => "Forviŝi kaŝmemoron por ripeto de okazaĵoj", +"URLs" => "URL-oj", +"Calendar CalDAV syncing addresses" => "sinkronigaj adresoj por CalDAV-kalendaroj", +"more info" => "pli da informo", +"Primary address (Kontact et al)" => "Ĉefa adreso (Kontact kaj aliaj)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Nurlegebla(j) iCalendar-ligilo(j)", "Users" => "Uzantoj", "select users" => "elekti uzantojn", "Editable" => "Redaktebla", diff --git a/apps/calendar/l10n/es.php b/apps/calendar/l10n/es.php index 4cd9e3202bf..3ebcd2e9430 100644 --- a/apps/calendar/l10n/es.php +++ b/apps/calendar/l10n/es.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Aún no se han guardado en caché todos los calendarios", +"Everything seems to be completely cached" => "Parece que se ha guardado todo en caché", "No calendars found." => "No se encontraron calendarios.", "No events found." => "No se encontraron eventos.", "Wrong calendar" => "Calendario incorrecto", +"The file contained either no events or all events are already saved in your calendar." => "El archivo no contiene eventos o ya existen en tu calendario.", +"events has been saved in the new calendar" => "Los eventos han sido guardados en el nuevo calendario", +"Import failed" => "Fallo en la importación", +"events has been saved in your calendar" => "eventos se han guardado en tu calendario", "New Timezone:" => "Nueva zona horaria:", "Timezone changed" => "Zona horaria cambiada", "Invalid request" => "Petición no válida", "Calendar" => "Calendario", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Cumpleaños", "Business" => "Negocios", "Call" => "Llamada", @@ -22,7 +33,9 @@ "Projects" => "Proyectos", "Questions" => "Preguntas", "Work" => "Trabajo", +"by" => "por", "unnamed" => "Sin nombre", +"New Calendar" => "Nuevo calendario", "Does not repeat" => "No se repite", "Daily" => "Diariamente", "Weekly" => "Semanalmente", @@ -67,8 +80,26 @@ "by day and month" => "por día y mes", "Date" => "Fecha", "Cal." => "Cal.", +"Sun." => "Dom.", +"Mon." => "Lun.", +"Tue." => "Mar.", +"Wed." => "Mier.", +"Thu." => "Jue.", +"Fri." => "Vie.", +"Sat." => "Sab.", +"Jan." => "Ene.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Abr.", +"May." => "May.", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Ago.", +"Sep." => "Sep.", +"Oct." => "Oct.", +"Nov." => "Nov.", +"Dec." => "Dic.", "All day" => "Todo el día", -"New Calendar" => "Nuevo calendario", "Missing fields" => "Los campos que faltan", "Title" => "Título", "From Date" => "Desde la fecha", @@ -81,9 +112,6 @@ "Month" => "Mes", "List" => "Lista", "Today" => "Hoy", -"Calendars" => "Calendarios", -"There was a fail, while parsing the file." => "Se ha producido un fallo al analizar el archivo.", -"Choose active calendars" => "Elige los calendarios activos", "Your calendars" => "Tus calendarios", "CalDav Link" => "Enlace a CalDav", "Shared calendars" => "Calendarios compartidos", @@ -132,27 +160,29 @@ "Interval" => "Intervalo", "End" => "Fin", "occurrences" => "ocurrencias", -"Import a calendar file" => "Importar un archivo de calendario", -"Please choose the calendar" => "Por favor elige el calendario", "create a new calendar" => "Crear un nuevo calendario", +"Import a calendar file" => "Importar un archivo de calendario", +"Please choose a calendar" => "Por favor, escoge un calendario", "Name of new calendar" => "Nombre del nuevo calendario", +"Take an available name!" => "¡Elige un nombre disponible!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ya existe un calendario con este nombre. Si continúas, se combinarán los calendarios.", "Import" => "Importar", -"Importing calendar" => "Importando calendario", -"Calendar imported successfully" => "Calendario importado exitosamente", "Close Dialog" => "Cerrar diálogo", "Create a new event" => "Crear un nuevo evento", "View an event" => "Ver un evento", "No categories selected" => "Ninguna categoría seleccionada", -"Select category" => "Seleccionar categoría", "of" => "de", "at" => "a las", "Timezone" => "Zona horaria", -"Check always for changes of the timezone" => "Comprobar siempre por cambios en la zona horaria", -"Timeformat" => "Formato de hora", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primer día de la semana", -"Calendar CalDAV syncing address:" => "Dirección de sincronización de calendario CalDAV:", +"Cache" => "Caché", +"Clear cache for repeating events" => "Limpiar caché de eventos recurrentes", +"Calendar CalDAV syncing addresses" => "Direcciones de sincronización de calendario CalDAV:", +"more info" => "Más información", +"Primary address (Kontact et al)" => "Dirección principal (Kontact y otros)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Enlace(s) iCalendar de sólo lectura", "Users" => "Usuarios", "select users" => "seleccionar usuarios", "Editable" => "Editable", diff --git a/apps/calendar/l10n/et_EE.php b/apps/calendar/l10n/et_EE.php index 931ca56f5fd..59f494f8ab9 100644 --- a/apps/calendar/l10n/et_EE.php +++ b/apps/calendar/l10n/et_EE.php @@ -6,7 +6,12 @@ "Timezone changed" => "Ajavöönd on muudetud", "Invalid request" => "Vigane päring", "Calendar" => "Kalender", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Sünnipäev", "Business" => "Äri", "Call" => "Helista", @@ -23,6 +28,7 @@ "Questions" => "Küsimused", "Work" => "Töö", "unnamed" => "nimetu", +"New Calendar" => "Uus kalender", "Does not repeat" => "Ei kordu", "Daily" => "Iga päev", "Weekly" => "Iga nädal", @@ -68,7 +74,6 @@ "Date" => "Kuupäev", "Cal." => "Kal.", "All day" => "Kogu päev", -"New Calendar" => "Uus kalender", "Missing fields" => "Puuduvad väljad", "Title" => "Pealkiri", "From Date" => "Alates kuupäevast", @@ -81,9 +86,6 @@ "Month" => "Kuu", "List" => "Nimekiri", "Today" => "Täna", -"Calendars" => "Kalendrid", -"There was a fail, while parsing the file." => "Faili parsimisel tekkis viga.", -"Choose active calendars" => "Vali aktiivsed kalendrid", "Your calendars" => "Sinu kalendrid", "CalDav Link" => "CalDav Link", "Shared calendars" => "Jagatud kalendrid", @@ -132,27 +134,19 @@ "Interval" => "Intervall", "End" => "Lõpp", "occurrences" => "toimumiskordi", -"Import a calendar file" => "Impordi kalendrifail", -"Please choose the calendar" => "Palun vali kalender", "create a new calendar" => "loo uus kalender", +"Import a calendar file" => "Impordi kalendrifail", "Name of new calendar" => "Uue kalendri nimi", "Import" => "Impordi", -"Importing calendar" => "Kalendri importimine", -"Calendar imported successfully" => "Kalender on imporditud", "Close Dialog" => "Sulge dialoogiaken", "Create a new event" => "Loo sündmus", "View an event" => "Vaata üritust", "No categories selected" => "Ühtegi kategooriat pole valitud", -"Select category" => "Salvesta kategooria", "of" => "/", "at" => "kell", "Timezone" => "Ajavöönd", -"Check always for changes of the timezone" => "Kontrolli alati muudatusi ajavööndis", -"Timeformat" => "Aja vorming", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Nädala esimene päev", -"Calendar CalDAV syncing address:" => "Kalendri CalDAV sünkroniseerimise aadress:", "Users" => "Kasutajad", "select users" => "valitud kasutajad", "Editable" => "Muudetav", diff --git a/apps/calendar/l10n/eu.php b/apps/calendar/l10n/eu.php index 9e1300032f8..5ebce09c58b 100644 --- a/apps/calendar/l10n/eu.php +++ b/apps/calendar/l10n/eu.php @@ -1,11 +1,18 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Egutegi guztiak ez daude guztiz cacheatuta", +"Everything seems to be completely cached" => "Dena guztiz cacheatuta dagoela dirudi", "No calendars found." => "Ez da egutegirik aurkitu.", "No events found." => "Ez da gertaerarik aurkitu.", "Wrong calendar" => "Egutegi okerra", +"The file contained either no events or all events are already saved in your calendar." => "Fitxategiak ez zuen gertaerarik edo gertaera guztiak dagoeneko egutegian gordeta zeuden.", +"events has been saved in the new calendar" => "gertaerak egutegi berrian gorde dira", +"Import failed" => "Inportazioak huts egin du", +"events has been saved in your calendar" => "gertaerak zure egutegian gorde dira", "New Timezone:" => "Ordu-zonalde berria", "Timezone changed" => "Ordu-zonaldea aldatuta", "Invalid request" => "Baliogabeko eskaera", "Calendar" => "Egutegia", +"MMMM yyyy" => "yyyy MMMM", "Birthday" => "Jaioteguna", "Business" => "Negozioa", "Call" => "Deia", @@ -22,6 +29,7 @@ "Questions" => "Galderak", "Work" => "Lana", "unnamed" => "izengabea", +"New Calendar" => "Egutegi berria", "Does not repeat" => "Ez da errepikatzen", "Daily" => "Egunero", "Weekly" => "Astero", @@ -66,8 +74,26 @@ "by day and month" => "eguna eta hilabetearen arabera", "Date" => "Data", "Cal." => "Eg.", +"Sun." => "ig.", +"Mon." => "al.", +"Tue." => "ar.", +"Wed." => "az.", +"Thu." => "og.", +"Fri." => "ol.", +"Sat." => "lr.", +"Jan." => "urt.", +"Feb." => "ots.", +"Mar." => "mar.", +"Apr." => "api.", +"May." => "mai.", +"Jun." => "eka.", +"Jul." => "uzt.", +"Aug." => "abu.", +"Sep." => "ira.", +"Oct." => "urr.", +"Nov." => "aza.", +"Dec." => "abe.", "All day" => "Egun guztia", -"New Calendar" => "Egutegi berria", "Missing fields" => "Eremuak faltan", "Title" => "Izenburua", "From Date" => "Hasierako Data", @@ -80,9 +106,6 @@ "Month" => "Hilabetea", "List" => "Zerrenda", "Today" => "Gaur", -"Calendars" => "Egutegiak", -"There was a fail, while parsing the file." => "Huts bat egon da, fitxategia aztertzen zen bitartea.", -"Choose active calendars" => "Aukeratu egutegi aktiboak", "Your calendars" => "Zure egutegiak", "CalDav Link" => "CalDav lotura", "Shared calendars" => "Elkarbanatutako egutegiak", @@ -131,25 +154,26 @@ "Interval" => "Tartea", "End" => "Amaiera", "occurrences" => "errepikapenak", -"Import a calendar file" => "Inportatu egutegi fitxategi bat", -"Please choose the calendar" => "Mesedez aukeratu egutegia", "create a new calendar" => "sortu egutegi berria", +"Import a calendar file" => "Inportatu egutegi fitxategi bat", +"Please choose a calendar" => "Mesedez aukeratu egutegi bat.", "Name of new calendar" => "Egutegi berriaren izena", +"Take an available name!" => "Hartu eskuragarri dagoen izen bat!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Izen hau duen egutegi bat dagoeneko existitzen da. Hala ere jarraitzen baduzu, egutegi hauek elkartuko dira.", "Import" => "Importatu", -"Importing calendar" => "Egutegia inportatzen", -"Calendar imported successfully" => "Egutegia ongi inportatu da", "Close Dialog" => "Itxi lehioa", "Create a new event" => "Sortu gertaera berria", "View an event" => "Ikusi gertaera bat", "No categories selected" => "Ez da kategoriarik hautatu", -"Select category" => "Aukeratu kategoria", "Timezone" => "Ordu-zonaldea", -"Check always for changes of the timezone" => "Egiaztatu beti ordu-zonalde aldaketen bila", -"Timeformat" => "Ordu formatua", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Asteko lehenego eguna", -"Calendar CalDAV syncing address:" => "Egutegiaren CalDAV sinkronizazio helbidea", +"Cache" => "Cache", +"Clear cache for repeating events" => "Ezabatu gertaera errepikakorren cachea", +"Calendar CalDAV syncing addresses" => "Egutegiaren CalDAV sinkronizazio helbideak", +"more info" => "informazio gehiago", +"Primary address (Kontact et al)" => "Helbide nagusia", +"iOS/OS X" => "iOS/OS X", "Users" => "Erabiltzaileak", "select users" => "hautatutako erabiltzaileak", "Editable" => "Editagarria", diff --git a/apps/calendar/l10n/fa.php b/apps/calendar/l10n/fa.php index cd2bb9c2e5a..9235460834b 100644 --- a/apps/calendar/l10n/fa.php +++ b/apps/calendar/l10n/fa.php @@ -6,7 +6,12 @@ "Timezone changed" => "زمان محلی تغییر یافت", "Invalid request" => "درخواست نامعتبر", "Calendar" => "تقویم", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "DDD m[ yyyy]{ '—'[ DDD] m yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "روزتولد", "Business" => "تجارت", "Call" => "تماس گرفتن", @@ -23,6 +28,7 @@ "Questions" => "سوالات", "Work" => "کار", "unnamed" => "نام گذاری نشده", +"New Calendar" => "تقویم جدید", "Does not repeat" => "تکرار نکنید", "Daily" => "روزانه", "Weekly" => "هفتهگی", @@ -68,7 +74,6 @@ "Date" => "تاریخ", "Cal." => "تقویم.", "All day" => "هرروز", -"New Calendar" => "تقویم جدید", "Missing fields" => "فیلد های گم شده", "Title" => "عنوان", "From Date" => "از تاریخ", @@ -81,9 +86,6 @@ "Month" => "ماه", "List" => "فهرست", "Today" => "امروز", -"Calendars" => "تقویم ها", -"There was a fail, while parsing the file." => "ناتوان در تجزیه پرونده", -"Choose active calendars" => "تقویم فعال را انتخاب کنید", "Your calendars" => "تقویم های شما", "CalDav Link" => "CalDav Link", "Shared calendars" => "تقویمهای به اشترک گذاری شده", @@ -132,27 +134,19 @@ "Interval" => "فاصله", "End" => "پایان", "occurrences" => "ظهور", -"Import a calendar file" => "یک پرونده حاوی تقویم وارد کنید", -"Please choose the calendar" => "لطفا تقویم را انتخاب کنید", "create a new calendar" => "یک تقویم جدید ایجاد کنید", +"Import a calendar file" => "یک پرونده حاوی تقویم وارد کنید", "Name of new calendar" => "نام تقویم جدید", "Import" => "ورودی دادن", -"Importing calendar" => "درحال افزودن تقویم", -"Calendar imported successfully" => "افزودن تقویم موفقیت آمیز بود", "Close Dialog" => "بستن دیالوگ", "Create a new event" => "یک رویداد ایجاد کنید", "View an event" => "دیدن یک رویداد", "No categories selected" => "هیچ گروهی انتخاب نشده", -"Select category" => "انتخاب گروه", "of" => "از", "at" => "در", "Timezone" => "زمان محلی", -"Check always for changes of the timezone" => "همیشه بررسی کنید برای تغییر زمان محلی", -"Timeformat" => "نوع زمان", "24h" => "24 ساعت", "12h" => "12 ساعت", -"First day of the week" => "یکمین روز هفته", -"Calendar CalDAV syncing address:" => "Calendar CalDAV syncing address :", "Users" => "کاربرها", "select users" => "انتخاب شناسه ها", "Editable" => "قابل ویرایش", diff --git a/apps/calendar/l10n/fi_FI.php b/apps/calendar/l10n/fi_FI.php index 4de94b7b7b7..c4c9df3588a 100644 --- a/apps/calendar/l10n/fi_FI.php +++ b/apps/calendar/l10n/fi_FI.php @@ -2,6 +2,9 @@ "No calendars found." => "Kalentereita ei löytynyt", "No events found." => "Tapahtumia ei löytynyt.", "Wrong calendar" => "Väärä kalenteri", +"The file contained either no events or all events are already saved in your calendar." => "Tiedosto ei joko sisältänyt tapahtumia tai vaihtoehtoisesti kaikki tapahtumat on jo tallennettu kalenteriisi.", +"Import failed" => "Tuonti epäonnistui", +"events has been saved in your calendar" => "tapahtumaa on tallennettu kalenteriisi", "New Timezone:" => "Uusi aikavyöhyke:", "Timezone changed" => "Aikavyöhyke vaihdettu", "Invalid request" => "Virheellinen pyyntö", @@ -21,6 +24,7 @@ "Questions" => "Kysymykset", "Work" => "Työ", "unnamed" => "nimetön", +"New Calendar" => "Uusi kalenteri", "Does not repeat" => "Ei toistoa", "Daily" => "Päivittäin", "Weekly" => "Viikottain", @@ -55,8 +59,26 @@ "November" => "Marraskuu", "December" => "Joulukuu", "Date" => "Päivämäärä", +"Sun." => "Su", +"Mon." => "Ma", +"Tue." => "Ti", +"Wed." => "Ke", +"Thu." => "To", +"Fri." => "Pe", +"Sat." => "La", +"Jan." => "Tammi", +"Feb." => "Helmi", +"Mar." => "Maalis", +"Apr." => "Huhti", +"May." => "Touko", +"Jun." => "Kesä", +"Jul." => "Heinä", +"Aug." => "Elo", +"Sep." => "Syys", +"Oct." => "Loka", +"Nov." => "Marras", +"Dec." => "Joulu", "All day" => "Koko päivä", -"New Calendar" => "Uusi kalenteri", "Missing fields" => "Puuttuvat kentät", "Title" => "Otsikko", "The event ends before it starts" => "Tapahtuma päättyy ennen alkamistaan", @@ -65,9 +87,7 @@ "Month" => "Kuukausi", "List" => "Lista", "Today" => "Tänään", -"Calendars" => "Kalenterit", -"There was a fail, while parsing the file." => "Tiedostoa jäsennettäessä tapahtui virhe.", -"Choose active calendars" => "Valitse aktiiviset kalenterit", +"Settings" => "Asetukset", "Your calendars" => "Omat kalenterisi", "CalDav Link" => "CalDav-linkki", "Shared calendars" => "Jaetut kalenterit", @@ -110,25 +130,26 @@ "Select months" => "Valitse kuukaudet", "Select weeks" => "Valitse viikot", "Interval" => "Intervalli", -"Import a calendar file" => "Tuo kalenteritiedosto", -"Please choose the calendar" => "Valitse kalenteri", "create a new calendar" => "luo uusi kalenteri", +"Import a calendar file" => "Tuo kalenteritiedosto", +"Please choose a calendar" => "Valitse kalenteri", "Name of new calendar" => "Uuden kalenterin nimi", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Samalla nimellä on jo olemassa kalenteri. Jos jatkat kaikesta huolimatta, kalenterit yhdistetään.", "Import" => "Tuo", -"Importing calendar" => "Tuodaan kalenteria", -"Calendar imported successfully" => "Kalenteri tuotu onnistuneesti", "Close Dialog" => "Sulje ikkuna", "Create a new event" => "Luo uusi tapahtuma", "View an event" => "Avaa tapahtuma", "No categories selected" => "Luokkia ei ole valittu", -"Select category" => "Valitse luokka", +"General" => "Yleiset", "Timezone" => "Aikavyöhyke", -"Check always for changes of the timezone" => "Tarkista aina aikavyöhykkeen muutokset", -"Timeformat" => "Ajan esitysmuoto", +"Update timezone automatically" => "Päivitä aikavyöhykkeet automaattisesti", +"Time format" => "Ajan näyttömuoto", "24h" => "24 tuntia", "12h" => "12 tuntia", -"First day of the week" => "Viikon ensimmäinen päivä", -"Calendar CalDAV syncing address:" => "Kalenterin CalDAV-synkronointiosoite:", +"Start week on" => "Viikon alkamispäivä", +"Calendar CalDAV syncing addresses" => "Kalenterin CalDAV-synkronointiosoitteet", +"Primary address (Kontact et al)" => "Ensisijainen osoite (Kontact ja muut vastaavat)", +"iOS/OS X" => "iOS/OS X", "Users" => "Käyttäjät", "select users" => "valitse käyttäjät", "Editable" => "Muoktattava", diff --git a/apps/calendar/l10n/fr.php b/apps/calendar/l10n/fr.php index 506453af428..90ba903b876 100644 --- a/apps/calendar/l10n/fr.php +++ b/apps/calendar/l10n/fr.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Tous les calendriers ne sont pas mis en cache", +"Everything seems to be completely cached" => "Tout semble être en cache", "No calendars found." => "Aucun calendrier n'a été trouvé.", "No events found." => "Aucun événement n'a été trouvé.", "Wrong calendar" => "Mauvais calendrier", +"The file contained either no events or all events are already saved in your calendar." => "Soit le fichier ne contient aucun événement soit tous les événements sont déjà enregistrés dans votre calendrier.", +"events has been saved in the new calendar" => "Les événements ont été enregistrés dans le nouveau calendrier", +"Import failed" => "Échec de l'import", +"events has been saved in your calendar" => "Les événements ont été enregistrés dans votre calendrier", "New Timezone:" => "Nouveau fuseau horaire :", "Timezone changed" => "Fuseau horaire modifié", "Invalid request" => "Requête invalide", "Calendar" => "Calendrier", +"ddd" => "ddd", +"ddd M/d" => "ddd d/M", +"dddd M/d" => "dddd d/M", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, d MMM, yyyy", "Birthday" => "Anniversaire", "Business" => "Professionnel", "Call" => "Appel", @@ -22,7 +33,9 @@ "Projects" => "Projets", "Questions" => "Questions", "Work" => "Travail", +"by" => "par", "unnamed" => "sans-nom", +"New Calendar" => "Nouveau Calendrier", "Does not repeat" => "Pas de répétition", "Daily" => "Tous les jours", "Weekly" => "Hebdomadaire", @@ -67,8 +80,26 @@ "by day and month" => "par jour et mois", "Date" => "Date", "Cal." => "Cal.", +"Sun." => "Dim.", +"Mon." => "Lun.", +"Tue." => "Mar.", +"Wed." => "Mer.", +"Thu." => "Jeu", +"Fri." => "Ven.", +"Sat." => "Sam.", +"Jan." => "Jan.", +"Feb." => "Fév.", +"Mar." => "Mars", +"Apr." => "Avr.", +"May." => "Mai", +"Jun." => "Juin", +"Jul." => "Juil.", +"Aug." => "Août", +"Sep." => "Sep.", +"Oct." => "Oct.", +"Nov." => "Nov.", +"Dec." => "Déc.", "All day" => "Journée entière", -"New Calendar" => "Nouveau Calendrier", "Missing fields" => "Champs manquants", "Title" => "Titre", "From Date" => "De la date", @@ -81,9 +112,6 @@ "Month" => "Mois", "List" => "Liste", "Today" => "Aujourd'hui", -"Calendars" => "Calendriers", -"There was a fail, while parsing the file." => "Une erreur est survenue pendant la lecture du fichier.", -"Choose active calendars" => "Choix des calendriers actifs", "Your calendars" => "Vos calendriers", "CalDav Link" => "Lien CalDav", "Shared calendars" => "Calendriers partagés", @@ -132,27 +160,29 @@ "Interval" => "Intervalle", "End" => "Fin", "occurrences" => "occurrences", -"Import a calendar file" => "Importer un fichier de calendriers", -"Please choose the calendar" => "Choisissez le calendrier svp", "create a new calendar" => "Créer un nouveau calendrier", +"Import a calendar file" => "Importer un fichier de calendriers", +"Please choose a calendar" => "Veuillez sélectionner un calendrier", "Name of new calendar" => "Nom pour le nouveau calendrier", +"Take an available name!" => "Choisissez un nom disponible !", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendrier de ce nom existe déjà. Si vous choisissez de continuer les calendriers seront fusionnés.", "Import" => "Importer", -"Importing calendar" => "Import du calendrier", -"Calendar imported successfully" => "Calendrier importé avec succès", "Close Dialog" => "Fermer la fenêtre", "Create a new event" => "Créer un nouvel événement", "View an event" => "Voir un événement", "No categories selected" => "Aucune catégorie sélectionnée", -"Select category" => "Sélectionner une catégorie", "of" => "de", "at" => "à", "Timezone" => "Fuseau horaire", -"Check always for changes of the timezone" => "Toujours vérifier d'éventuels changements de fuseau horaire", -"Timeformat" => "Format de l'heure", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Premier jour de la semaine", -"Calendar CalDAV syncing address:" => "Adresse de synchronisation du calendrier CalDAV :", +"Cache" => "Cache", +"Clear cache for repeating events" => "Nettoyer le cache des événements répétitifs", +"Calendar CalDAV syncing addresses" => "Adresses de synchronisation des calendriers CalDAV", +"more info" => "plus d'infos", +"Primary address (Kontact et al)" => "Adresses principales (Kontact et assimilés)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "lien(s) iCalendar en lecture seule", "Users" => "Utilisateurs", "select users" => "sélectionner les utilisateurs", "Editable" => "Modifiable", diff --git a/apps/calendar/l10n/gl.php b/apps/calendar/l10n/gl.php index 3178b1819ec..00a28cc70f4 100644 --- a/apps/calendar/l10n/gl.php +++ b/apps/calendar/l10n/gl.php @@ -6,7 +6,12 @@ "Timezone changed" => "Fuso horario trocado", "Invalid request" => "Petición non válida", "Calendar" => "Calendario", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '—'d [ MMM] yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d,yyyy", "Birthday" => "Aniversario", "Business" => "Traballo", "Call" => "Chamada", @@ -23,6 +28,7 @@ "Questions" => "Preguntas", "Work" => "Traballo", "unnamed" => "sen nome", +"New Calendar" => "Novo calendario", "Does not repeat" => "Non se repite", "Daily" => "A diario", "Weekly" => "Semanalmente", @@ -68,7 +74,6 @@ "Date" => "Data", "Cal." => "Cal.", "All day" => "Todo o dia", -"New Calendar" => "Novo calendario", "Missing fields" => "Faltan campos", "Title" => "Título", "From Date" => "Desde a data", @@ -132,6 +137,7 @@ "Interval" => "Intervalo", "End" => "Fin", "occurrences" => "acontecementos", +"create a new calendar" => "crear un novo calendario", "Import a calendar file" => "Importar un ficheiro de calendario", "Please choose the calendar" => "Por favor, seleccione o calendario", "create a new calendar" => "crear un novo calendario", @@ -143,7 +149,6 @@ "Create a new event" => "Crear un novo evento", "View an event" => "Ver un evento", "No categories selected" => "Non seleccionou as categorías", -"Select category" => "Seleccionar categoría", "of" => "de", "at" => "a", "Timezone" => "Fuso horario", @@ -151,8 +156,6 @@ "Timeformat" => "Formato de hora", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primeiro día da semana", -"Calendar CalDAV syncing address:" => "Enderezo de sincronización do calendario CalDAV:", "Users" => "Usuarios", "select users" => "escoller usuarios", "Editable" => "Editable", diff --git a/apps/calendar/l10n/he.php b/apps/calendar/l10n/he.php index c161d3be2ef..d5c0b2b2e53 100644 --- a/apps/calendar/l10n/he.php +++ b/apps/calendar/l10n/he.php @@ -6,7 +6,12 @@ "Timezone changed" => "אזור זמן השתנה", "Invalid request" => "בקשה לא חוקית", "Calendar" => "ח שנה", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d MMM [ yyyy]{ '—'d[ MMM] yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "יום הולדת", "Business" => "עסקים", "Call" => "שיחה", @@ -23,6 +28,7 @@ "Questions" => "שאלות", "Work" => "עבודה", "unnamed" => "ללא שם", +"New Calendar" => "לוח שנה חדש", "Does not repeat" => "ללא חזרה", "Daily" => "יומי", "Weekly" => "שבועי", @@ -68,7 +74,6 @@ "Date" => "תאריך", "Cal." => "לוח שנה", "All day" => "היום", -"New Calendar" => "לוח שנה חדש", "Missing fields" => "שדות חסרים", "Title" => "כותרת", "From Date" => "מתאריך", @@ -81,9 +86,6 @@ "Month" => "חודש", "List" => "רשימה", "Today" => "היום", -"Calendars" => "לוחות שנה", -"There was a fail, while parsing the file." => "אירעה שגיאה בעת פענוח הקובץ.", -"Choose active calendars" => "בחר לוחות שנה פעילים", "Your calendars" => "לוחות השנה שלך", "CalDav Link" => "קישור CalDav", "Shared calendars" => "לוחות שנה מושתפים", @@ -132,27 +134,19 @@ "Interval" => "משך", "End" => "סיום", "occurrences" => "מופעים", -"Import a calendar file" => "יבוא קובץ לוח שנה", -"Please choose the calendar" => "נא לבחור את לוח השנה", "create a new calendar" => "יצירת לוח שנה חדש", +"Import a calendar file" => "יבוא קובץ לוח שנה", "Name of new calendar" => "שם לוח השנה החדש", "Import" => "יבוא", -"Importing calendar" => "היומן מייובא", -"Calendar imported successfully" => "היומן ייובא בהצלחה", "Close Dialog" => "סגירת הדו־שיח", "Create a new event" => "יצירת אירוע חדש", "View an event" => "צפייה באירוע", "No categories selected" => "לא נבחרו קטגוריות", -"Select category" => "בחר קטגוריה", "of" => "מתוך", "at" => "בשנה", "Timezone" => "אזור זמן", -"Check always for changes of the timezone" => "יש לבדוק תמיד אם יש הבדלים באזורי הזמן", -"Timeformat" => "מבנה התאריך", "24h" => "24 שעות", "12h" => "12 שעות", -"First day of the week" => "היום הראשון בשבוע", -"Calendar CalDAV syncing address:" => "כתובת הסנכרון ללוח שנה מסוג CalDAV:", "Users" => "משתמשים", "select users" => "נא לבחור במשתמשים", "Editable" => "ניתן לעריכה", diff --git a/apps/calendar/l10n/hr.php b/apps/calendar/l10n/hr.php index 551bb4abbcb..07512b96051 100644 --- a/apps/calendar/l10n/hr.php +++ b/apps/calendar/l10n/hr.php @@ -23,6 +23,7 @@ "Questions" => "Pitanja", "Work" => "Posao", "unnamed" => "bezimeno", +"New Calendar" => "Novi kalendar", "Does not repeat" => "Ne ponavlja se", "Daily" => "Dnevno", "Weekly" => "Tjedno", @@ -67,7 +68,6 @@ "Date" => "datum", "Cal." => "Kal.", "All day" => "Cijeli dan", -"New Calendar" => "Novi kalendar", "Missing fields" => "Nedostaju polja", "Title" => "Naslov", "From Date" => "Datum od", @@ -80,9 +80,6 @@ "Month" => "Mjesec", "List" => "Lista", "Today" => "Danas", -"Calendars" => "Kalendari", -"There was a fail, while parsing the file." => "Pogreška pri čitanju datoteke.", -"Choose active calendars" => "Odabir aktivnih kalendara", "Your calendars" => "Vaši kalendari", "CalDav Link" => "CalDav poveznica", "Shared calendars" => "Podijeljeni kalendari", @@ -128,27 +125,20 @@ "Interval" => "Interval", "End" => "Kraj", "occurrences" => "pojave", -"Import a calendar file" => "Uvozite datoteku kalendara", -"Please choose the calendar" => "Odaberi kalendar", "create a new calendar" => "stvori novi kalendar", +"Import a calendar file" => "Uvozite datoteku kalendara", "Name of new calendar" => "Ime novog kalendara", "Import" => "Uvoz", -"Importing calendar" => "Uvoz kalendara", -"Calendar imported successfully" => "Kalendar je uspješno uvezen", "Close Dialog" => "Zatvori dijalog", "Create a new event" => "Unesi novi događaj", "View an event" => "Vidjeti događaj", "No categories selected" => "Nema odabranih kategorija", -"Select category" => "Odabir kategorije", "of" => "od", "at" => "na", "Timezone" => "Vremenska zona", -"Check always for changes of the timezone" => "Provjerite uvijek za promjene vremenske zone", "Timeformat" => "Format vremena", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Prvi dan tjedna", -"Calendar CalDAV syncing address:" => "Adresa za CalDAV sinkronizaciju kalendara:", "Users" => "Korisnici", "select users" => "odaberi korisnike", "Editable" => "Može se uređivati", diff --git a/apps/calendar/l10n/hu_HU.php b/apps/calendar/l10n/hu_HU.php index d97887aac7a..3ef4b9675be 100644 --- a/apps/calendar/l10n/hu_HU.php +++ b/apps/calendar/l10n/hu_HU.php @@ -6,7 +6,12 @@ "Timezone changed" => "Időzóna megváltozott", "Invalid request" => "Érvénytelen kérés", "Calendar" => "Naptár", +"ddd" => "nnn", +"ddd M/d" => "nnn H/n", +"dddd M/d" => "nnnn H/n", +"MMMM yyyy" => "HHHH éééé", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "nnnn, HHH n, éééé", "Birthday" => "Születésap", "Business" => "Üzlet", "Call" => "Hívás", @@ -23,6 +28,7 @@ "Questions" => "Kérdések", "Work" => "Munka", "unnamed" => "névtelen", +"New Calendar" => "Új naptár", "Does not repeat" => "Nem ismétlődik", "Daily" => "Napi", "Weekly" => "Heti", @@ -68,7 +74,6 @@ "Date" => "Dátum", "Cal." => "Naptár", "All day" => "Egész nap", -"New Calendar" => "Új naptár", "Missing fields" => "Hiányzó mezők", "Title" => "Cím", "From Date" => "Napjától", @@ -81,9 +86,6 @@ "Month" => "Hónap", "List" => "Lista", "Today" => "Ma", -"Calendars" => "Naptárak", -"There was a fail, while parsing the file." => "Probléma volt a fájl elemzése közben.", -"Choose active calendars" => "Aktív naptár kiválasztása", "Your calendars" => "Naptárjaid", "CalDav Link" => "CalDAV link", "Shared calendars" => "Megosztott naptárak", @@ -132,27 +134,19 @@ "Interval" => "Időköz", "End" => "Vége", "occurrences" => "előfordulások", -"Import a calendar file" => "Naptár-fájl importálása", -"Please choose the calendar" => "Válassz naptárat", "create a new calendar" => "új naptár létrehozása", +"Import a calendar file" => "Naptár-fájl importálása", "Name of new calendar" => "Új naptár neve", "Import" => "Importálás", -"Importing calendar" => "Naptár importálása", -"Calendar imported successfully" => "Naptár sikeresen importálva", "Close Dialog" => "Párbeszédablak bezárása", "Create a new event" => "Új esemény létrehozása", "View an event" => "Esemény megtekintése", "No categories selected" => "Nincs kiválasztott kategória", -"Select category" => "Kategória kiválasztása", "of" => ", tulaj ", "at" => ", ", "Timezone" => "Időzóna", -"Check always for changes of the timezone" => "Mindig ellenőrizze az időzóna-változásokat", -"Timeformat" => "Időformátum", "24h" => "24h", "12h" => "12h", -"First day of the week" => "A hét első napja", -"Calendar CalDAV syncing address:" => "Naptár CalDAV szinkronizálási cím:", "Users" => "Felhasználók", "select users" => "válassz felhasználókat", "Editable" => "Szerkeszthető", diff --git a/apps/calendar/l10n/ia.php b/apps/calendar/l10n/ia.php index a346e4de5b7..84c36536b95 100644 --- a/apps/calendar/l10n/ia.php +++ b/apps/calendar/l10n/ia.php @@ -16,6 +16,7 @@ "Questions" => "Demandas", "Work" => "Travalio", "unnamed" => "sin nomine", +"New Calendar" => "Nove calendario", "Does not repeat" => "Non repite", "Daily" => "Quotidian", "Weekly" => "Septimanal", @@ -51,7 +52,6 @@ "by day and month" => "per dia e mense", "Date" => "Data", "All day" => "Omne die", -"New Calendar" => "Nove calendario", "Missing fields" => "Campos incomplete", "Title" => "Titulo", "From Date" => "Data de initio", @@ -62,8 +62,6 @@ "Month" => "Mense", "List" => "Lista", "Today" => "Hodie", -"Calendars" => "Calendarios", -"Choose active calendars" => "Selectionar calendarios active", "Your calendars" => "Tu calendarios", "Download" => "Discarga", "Edit" => "Modificar", @@ -96,20 +94,17 @@ "Select weeks" => "Seliger septimanas", "Interval" => "Intervallo", "End" => "Fin", -"Import a calendar file" => "Importar un file de calendario", -"Please choose the calendar" => "Selige el calendario", "create a new calendar" => "crear un nove calendario", +"Import a calendar file" => "Importar un file de calendario", "Name of new calendar" => "Nomine del calendario", "Import" => "Importar", "Close Dialog" => "Clauder dialogo", "Create a new event" => "Crear un nove evento", "View an event" => "Vide un evento", "No categories selected" => "Nulle categorias seligite", -"Select category" => "Selectionar categoria", "of" => "de", "at" => "in", "Timezone" => "Fuso horari", -"First day of the week" => "Prime die del septimana", "Users" => "Usatores", "Groups" => "Gruppos" ); diff --git a/apps/calendar/l10n/id.php b/apps/calendar/l10n/id.php index ac0734abba4..865c2118fac 100644 --- a/apps/calendar/l10n/id.php +++ b/apps/calendar/l10n/id.php @@ -14,9 +14,6 @@ "Week" => "Minggu", "Month" => "Bulan", "Today" => "Hari ini", -"Calendars" => "Kalender", -"There was a fail, while parsing the file." => "Terjadi kesalahan, saat mengurai berkas.", -"Choose active calendars" => "Pilih kalender aktif", "Download" => "Unduh", "Edit" => "Sunting", "Edit calendar" => "Sunting kalender", diff --git a/apps/calendar/l10n/it.php b/apps/calendar/l10n/it.php index cdb2d99c82e..04e10b582bf 100644 --- a/apps/calendar/l10n/it.php +++ b/apps/calendar/l10n/it.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Non tutti i calendari sono mantenuti completamente in cache", +"Everything seems to be completely cached" => "Tutto sembra essere mantenuto completamente in cache", "No calendars found." => "Nessun calendario trovato.", "No events found." => "Nessun evento trovato.", "Wrong calendar" => "Calendario sbagliato", +"The file contained either no events or all events are already saved in your calendar." => "Il file non conteneva alcun evento o tutti gli eventi erano già salvati nel tuo calendario.", +"events has been saved in the new calendar" => "gli eventi sono stati salvati nel nuovo calendario", +"Import failed" => "Importazione non riuscita", +"events has been saved in your calendar" => "gli eventi sono stati salvati nel tuo calendario", "New Timezone:" => "Nuovo fuso orario:", "Timezone changed" => "Fuso orario cambiato", "Invalid request" => "Richiesta non valida", "Calendar" => "Calendario", +"ddd" => "ddd", +"ddd M/d" => "ddd d/M", +"dddd M/d" => "dddd d/M", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, d MMM yyyy", "Birthday" => "Compleanno", "Business" => "Azienda", "Call" => "Chiama", @@ -22,7 +33,9 @@ "Projects" => "Progetti", "Questions" => "Domande", "Work" => "Lavoro", +"by" => "da", "unnamed" => "senza nome", +"New Calendar" => "Nuovo calendario", "Does not repeat" => "Non ripetere", "Daily" => "Giornaliero", "Weekly" => "Settimanale", @@ -67,8 +80,26 @@ "by day and month" => "per giorno e mese", "Date" => "Data", "Cal." => "Cal.", +"Sun." => "Dom.", +"Mon." => "Lun.", +"Tue." => "Mar.", +"Wed." => "Mer.", +"Thu." => "Gio.", +"Fri." => "Ven.", +"Sat." => "Sab.", +"Jan." => "Gen.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Mag.", +"Jun." => "Giu.", +"Jul." => "Lug.", +"Aug." => "Ago.", +"Sep." => "Set.", +"Oct." => "Ott.", +"Nov." => "Nov.", +"Dec." => "Dic.", "All day" => "Tutti il giorno", -"New Calendar" => "Nuovo calendario", "Missing fields" => "Campi mancanti", "Title" => "Titolo", "From Date" => "Dal giorno", @@ -81,9 +112,7 @@ "Month" => "Mese", "List" => "Elenco", "Today" => "Oggi", -"Calendars" => "Calendari", -"There was a fail, while parsing the file." => "Si è verificato un errore durante l'analisi del file.", -"Choose active calendars" => "Scegli i calendari attivi", +"Settings" => "Impostazioni", "Your calendars" => "I tuoi calendari", "CalDav Link" => "Collegamento CalDav", "Shared calendars" => "Calendari condivisi", @@ -110,7 +139,7 @@ "Share" => "Condividi", "Title of the Event" => "Titolo dell'evento", "Category" => "Categoria", -"Separate categories with commas" => "Categorie separate con virgole", +"Separate categories with commas" => "Categorie separate da virgole", "Edit categories" => "Modifica le categorie", "All Day Event" => "Evento che occupa tutta la giornata", "From" => "Da", @@ -132,27 +161,34 @@ "Interval" => "Intervallo", "End" => "Fine", "occurrences" => "occorrenze", -"Import a calendar file" => "Importa un file di calendario", -"Please choose the calendar" => "Scegli il calendario", "create a new calendar" => "Crea un nuovo calendario", +"Import a calendar file" => "Importa un file di calendario", +"Please choose a calendar" => "Scegli un calendario", "Name of new calendar" => "Nome del nuovo calendario", +"Take an available name!" => "Usa un nome disponibile!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendario con questo nome esiste già. Se continui, i due calendari saranno uniti.", "Import" => "Importa", -"Importing calendar" => "Importazione del calendario in corso", -"Calendar imported successfully" => "Calendario importato correttamente", "Close Dialog" => "Chiudi la finestra di dialogo", "Create a new event" => "Crea un nuovo evento", "View an event" => "Visualizza un evento", "No categories selected" => "Nessuna categoria selezionata", -"Select category" => "Seleziona una categoria", "of" => "di", "at" => "alle", +"General" => "Generale", "Timezone" => "Fuso orario", -"Check always for changes of the timezone" => "Controlla sempre i cambiamenti di fuso orario", -"Timeformat" => "Formato orario", +"Update timezone automatically" => "Aggiorna automaticamente il fuso orario", +"Time format" => "Formato orario", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primo giorno della settimana", -"Calendar CalDAV syncing address:" => "Indirizzo sincronizzazione calendario CalDAV:", +"Start week on" => "La settimana inizia il", +"Cache" => "Cache", +"Clear cache for repeating events" => "Cancella gli eventi che si ripetono dalla cache", +"URLs" => "URL", +"Calendar CalDAV syncing addresses" => "Indirizzi di sincronizzazione calendari CalDAV", +"more info" => "ulteriori informazioni", +"Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Collegamento(i) iCalendar sola lettura", "Users" => "Utenti", "select users" => "seleziona utenti", "Editable" => "Modificabile", diff --git a/apps/calendar/l10n/ja_JP.php b/apps/calendar/l10n/ja_JP.php index c533a9bd1a7..e59f186a0b2 100644 --- a/apps/calendar/l10n/ja_JP.php +++ b/apps/calendar/l10n/ja_JP.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "すべてのカレンダーは完全にキャッシュされていません", +"Everything seems to be completely cached" => "すべて完全にキャッシュされていると思われます", "No calendars found." => "カレンダーが見つかりませんでした。", "No events found." => "イベントが見つかりませんでした。", "Wrong calendar" => "誤ったカレンダーです", +"The file contained either no events or all events are already saved in your calendar." => "イベントの無いもしくはすべてのイベントを含むファイルは既にあなたのカレンダーに保存されています。", +"events has been saved in the new calendar" => "イベントは新しいカレンダーに保存されました", +"Import failed" => "インポートに失敗", +"events has been saved in your calendar" => "イベントはあなたのカレンダーに保存されました", "New Timezone:" => "新しいタイムゾーン:", "Timezone changed" => "タイムゾーンが変更されました", "Invalid request" => "無効なリクエストです", "Calendar" => "カレンダー", -"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"ddd" => "dddd", +"ddd M/d" => "M月d日 (dddd)", +"dddd M/d" => "M月d日 (dddd)", +"MMMM yyyy" => "yyyy年M月", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "yyyy年M月d日{ '~' [yyyy年][M月]d日}", +"dddd, MMM d, yyyy" => "yyyy年M月d日 (dddd)", "Birthday" => "誕生日", "Business" => "ビジネス", "Call" => "電話をかける", @@ -22,6 +33,9 @@ "Projects" => "プロジェクト", "Questions" => "質問事項", "Work" => "週の始まり", +"by" => "による", +"unnamed" => "無名", +"New Calendar" => "新しくカレンダーを作成", "Does not repeat" => "繰り返さない", "Daily" => "毎日", "Weekly" => "毎週", @@ -34,13 +48,13 @@ "by date" => "日付で指定", "by monthday" => "日にちで指定", "by weekday" => "曜日で指定", -"Monday" => "月曜", -"Tuesday" => "火曜", -"Wednesday" => "水曜", -"Thursday" => "木曜", -"Friday" => "金曜", -"Saturday" => "土曜", -"Sunday" => "日曜", +"Monday" => "月", +"Tuesday" => "火", +"Wednesday" => "水", +"Thursday" => "木", +"Friday" => "金", +"Saturday" => "土", +"Sunday" => "日", "events week of month" => "予定のある週を指定", "first" => "1週目", "second" => "2週目", @@ -48,26 +62,45 @@ "fourth" => "4週目", "fifth" => "5週目", "last" => "最終週", -"January" => "1月", -"February" => "2月", -"March" => "3月", -"April" => "4月", -"May" => "5月", -"June" => "6月", -"July" => "7月", -"August" => "8月", -"September" => "9月", -"October" => "10月", -"November" => "11月", -"December" => "12月", +"January" => "1月", +"February" => "2月", +"March" => "3月", +"April" => "4月", +"May" => "5月", +"June" => "6月", +"July" => "7月", +"August" => "8月", +"September" => "9月", +"October" => "10月", +"November" => "11月", +"December" => "12月", "by events date" => "日付で指定", "by yearday(s)" => "日番号で指定", "by weeknumber(s)" => "週番号で指定", "by day and month" => "月と日で指定", "Date" => "日付", "Cal." => "カレンダー", +"Sun." => "日", +"Mon." => "月", +"Tue." => "火", +"Wed." => "水", +"Thu." => "木", +"Fri." => "金", +"Sat." => "土", +"Jan." => "1月", +"Feb." => "2月", +"Mar." => "3月", +"Apr." => "4月", +"May." => "5月", +"Jun." => "6月", +"Jul." => "7月", +"Aug." => "8月", +"Sep." => "9月", +"Oct." => "10月", +"Nov." => "11月", +"Dec." => "12月", "All day" => "終日", -"New Calendar" => "新しくカレンダーを作成", +"New Calendar" => "新しくカレンダーを作成する", "Missing fields" => "項目がありません", "Title" => "タイトル", "From Date" => "開始日", @@ -78,11 +111,9 @@ "There was a database fail" => "データベースのエラーがありました", "Week" => "週", "Month" => "月", -"List" => "リスト", +"List" => "予定リスト", "Today" => "今日", -"Calendars" => "カレンダー", -"There was a fail, while parsing the file." => "ファイルの構文解析に失敗しました。", -"Choose active calendars" => "アクティブなカレンダーを選択", +"Settings" => "設定", "Your calendars" => "あなたのカレンダー", "CalDav Link" => "CalDavへのリンク", "Shared calendars" => "共有カレンダー", @@ -91,6 +122,7 @@ "Download" => "ダウンロード", "Edit" => "編集", "Delete" => "削除", +"shared with you by" => "共有者", "New calendar" => "新しいカレンダー", "Edit calendar" => "カレンダーを編集", "Displayname" => "表示名", @@ -130,27 +162,34 @@ "Interval" => "間隔", "End" => "繰り返す期間", "occurrences" => "回繰り返す", -"Import a calendar file" => "カレンダーファイルをインポート", -"Please choose the calendar" => "カレンダーを選択してください", "create a new calendar" => "新規カレンダーの作成", +"Import a calendar file" => "カレンダーファイルをインポート", +"Please choose a calendar" => "カレンダーを選択してください", "Name of new calendar" => "新規カレンダーの名称", +"Take an available name!" => "利用可能な名前を指定してください!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "このカレンダー名はすでに使われています。もし続行する場合は、これらのカレンダーはマージされます。", "Import" => "インポート", -"Importing calendar" => "カレンダーを取り込み中", -"Calendar imported successfully" => "カレンダーの取り込みに成功しました", "Close Dialog" => "ダイアログを閉じる", "Create a new event" => "新しいイベントを作成", "View an event" => "イベントを閲覧", "No categories selected" => "カテゴリが選択されていません", -"Select category" => "カテゴリーを選択してください", "of" => "of", "at" => "at", +"General" => "一般", "Timezone" => "タイムゾーン", -"Check always for changes of the timezone" => "タイムゾーンの変更を常に確認", -"Timeformat" => "時刻のフォーマット", +"Update timezone automatically" => "自動的にタイムゾーンを更新", +"Time format" => "時刻の表示形式", "24h" => "24h", "12h" => "12h", -"First day of the week" => "週の始まり", -"Calendar CalDAV syncing address:" => "CalDAVカレンダーの同期アドレス:", +"Start week on" => "1週間の初めの曜日", +"Cache" => "キャッシュ", +"Clear cache for repeating events" => "繰り返しイベントのキャッシュをクリア", +"URLs" => "URL", +"Calendar CalDAV syncing addresses" => "CalDAVカレンダーの同期用アドレス", +"more info" => "さらに", +"Primary address (Kontact et al)" => "プライマリアドレス(コンタクト等)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "読み取り専用のiCalendarリンク", "Users" => "ユーザ", "select users" => "ユーザを選択", "Editable" => "編集可能", diff --git a/apps/calendar/l10n/ko.php b/apps/calendar/l10n/ko.php index 181bfa4378f..77e421d4aab 100644 --- a/apps/calendar/l10n/ko.php +++ b/apps/calendar/l10n/ko.php @@ -6,6 +6,12 @@ "Timezone changed" => "시간대 변경됨", "Invalid request" => "잘못된 요청", "Calendar" => "달력", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "생일", "Business" => "사업", "Call" => "통화", @@ -22,6 +28,7 @@ "Questions" => "질문", "Work" => "작업", "unnamed" => "익명의", +"New Calendar" => "새로운 달력", "Does not repeat" => "반복 없음", "Daily" => "매일", "Weekly" => "매주", @@ -67,7 +74,6 @@ "Date" => "날짜", "Cal." => "달력", "All day" => "매일", -"New Calendar" => "새로운 달력", "Missing fields" => "기입란이 비어있습니다", "Title" => "제목", "From Date" => "시작날짜", @@ -80,9 +86,6 @@ "Month" => "달", "List" => "목록", "Today" => "오늘", -"Calendars" => "달력", -"There was a fail, while parsing the file." => "파일을 처리하는 중 오류가 발생하였습니다.", -"Choose active calendars" => "활성 달력 선택", "Your calendars" => "내 달력", "CalDav Link" => "CalDav 링크", "Shared calendars" => "공유 달력", @@ -131,27 +134,19 @@ "Interval" => "간격", "End" => "끝", "occurrences" => "번 이후", -"Import a calendar file" => "달력 파일 가져오기", -"Please choose the calendar" => "달력을 선택해 주세요", "create a new calendar" => "새 달력 만들기", +"Import a calendar file" => "달력 파일 가져오기", "Name of new calendar" => "새 달력 이름", "Import" => "입력", -"Importing calendar" => "달력 입력", -"Calendar imported successfully" => "달력 입력을 성공적으로 마쳤습니다.", "Close Dialog" => "대화 마침", "Create a new event" => "새 이벤트 만들기", "View an event" => "일정 보기", "No categories selected" => "선택된 카테고리 없음", -"Select category" => "선택 카테고리", "of" => "의", "at" => "에서", "Timezone" => "시간대", -"Check always for changes of the timezone" => "항상 시간대 변경 확인하기", -"Timeformat" => "시간 형식 설정", "24h" => "24시간", "12h" => "12시간", -"First day of the week" => "그 주의 첫째날", -"Calendar CalDAV syncing address:" => "달력 CalDav 동기화 주소", "Users" => "사용자", "select users" => "사용자 선택", "Editable" => "편집 가능", diff --git a/apps/calendar/l10n/lb.php b/apps/calendar/l10n/lb.php index b40f652cc50..6e96b5df18d 100644 --- a/apps/calendar/l10n/lb.php +++ b/apps/calendar/l10n/lb.php @@ -22,6 +22,7 @@ "Projects" => "Projeten", "Questions" => "Froen", "Work" => "Aarbecht", +"New Calendar" => "Neien Kalenner", "Does not repeat" => "Widderhëlt sech net", "Daily" => "Deeglech", "Weekly" => "All Woch", @@ -62,7 +63,6 @@ "Date" => "Datum", "Cal." => "Cal.", "All day" => "All Dag", -"New Calendar" => "Neien Kalenner", "Missing fields" => "Felder déi feelen", "Title" => "Titel", "From Date" => "Vun Datum", @@ -75,9 +75,6 @@ "Month" => "Mount", "List" => "Lescht", "Today" => "Haut", -"Calendars" => "Kalenneren", -"There was a fail, while parsing the file." => "Feeler beim lueden vum Fichier.", -"Choose active calendars" => "Wiel aktiv Kalenneren aus", "Your calendars" => "Deng Kalenneren", "CalDav Link" => "CalDav Link", "Shared calendars" => "Gedeelte Kalenneren", diff --git a/apps/calendar/l10n/lt_LT.php b/apps/calendar/l10n/lt_LT.php index d7e15fb438f..408718071e2 100644 --- a/apps/calendar/l10n/lt_LT.php +++ b/apps/calendar/l10n/lt_LT.php @@ -23,6 +23,7 @@ "Questions" => "Klausimai", "Work" => "Darbas", "unnamed" => "be pavadinimo", +"New Calendar" => "Naujas kalendorius", "Does not repeat" => "Nekartoti", "Daily" => "Kasdien", "Weekly" => "Kiekvieną savaitę", @@ -56,7 +57,6 @@ "Date" => "Data", "Cal." => "Kal.", "All day" => "Visa diena", -"New Calendar" => "Naujas kalendorius", "Missing fields" => "Trūkstami laukai", "Title" => "Pavadinimas", "From Date" => "Nuo datos", @@ -69,9 +69,6 @@ "Month" => "Mėnuo", "List" => "Sąrašas", "Today" => "Šiandien", -"Calendars" => "Kalendoriai", -"There was a fail, while parsing the file." => "Apdorojant failą įvyko klaida.", -"Choose active calendars" => "Pasirinkite naudojamus kalendorius", "Your calendars" => "Jūsų kalendoriai", "CalDav Link" => "CalDav adresas", "Shared calendars" => "Bendri kalendoriai", @@ -92,6 +89,7 @@ "Export" => "Eksportuoti", "Eventinfo" => "Informacija", "Repeating" => "Pasikartojantis", +"Alarm" => "Priminimas", "Attendees" => "Dalyviai", "Share" => "Dalintis", "Title of the Event" => "Įvykio pavadinimas", @@ -113,6 +111,7 @@ "Select weeks" => "Pasirinkite savaites", "Interval" => "Intervalas", "End" => "Pabaiga", +"create a new calendar" => "sukurti naują kalendorių", "Import a calendar file" => "Importuoti kalendoriaus failą", "Please choose the calendar" => "Pasirinkite kalendorių", "create a new calendar" => "sukurti naują kalendorių", @@ -124,13 +123,11 @@ "Create a new event" => "Sukurti naują įvykį", "View an event" => "Peržiūrėti įvykį", "No categories selected" => "Nepasirinktos jokios katagorijos", -"Select category" => "Pasirinkite kategoriją", "Timezone" => "Laiko juosta", "Check always for changes of the timezone" => "Visada tikrinti laiko zonos pasikeitimus", "Timeformat" => "Laiko formatas", "24h" => "24val", "12h" => "12val", -"Calendar CalDAV syncing address:" => "CalDAV kalendoriaus synchronizavimo adresas:", "Users" => "Vartotojai", "select users" => "pasirinkti vartotojus", "Editable" => "Redaguojamas", diff --git a/apps/calendar/l10n/mk.php b/apps/calendar/l10n/mk.php index 41df376dfa6..1a03101fe51 100644 --- a/apps/calendar/l10n/mk.php +++ b/apps/calendar/l10n/mk.php @@ -6,7 +6,12 @@ "Timezone changed" => "Временската зона е променета", "Invalid request" => "Неправилно барање", "Calendar" => "Календар", +"ddd" => "ддд", +"ddd M/d" => "ддд М/д", +"dddd M/d" => "дддд М/д", +"MMMM yyyy" => "ММММ гггг", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "дддд, МММ д, гггг", "Birthday" => "Роденден", "Business" => "Деловно", "Call" => "Повикај", @@ -23,6 +28,7 @@ "Questions" => "Прашања", "Work" => "Работа", "unnamed" => "неименувано", +"New Calendar" => "Нов календар", "Does not repeat" => "Не се повторува", "Daily" => "Дневно", "Weekly" => "Седмично", @@ -68,7 +74,6 @@ "Date" => "Датум", "Cal." => "Кал.", "All day" => "Цел ден", -"New Calendar" => "Нов календар", "Missing fields" => "Полиња кои недостасуваат", "Title" => "Наслов", "From Date" => "Од датум", @@ -81,9 +86,6 @@ "Month" => "Месец", "List" => "Листа", "Today" => "Денеска", -"Calendars" => "Календари", -"There was a fail, while parsing the file." => "Имаше проблем при парсирање на датотеката.", -"Choose active calendars" => "Избери активни календари", "Your calendars" => "Ваши календари", "CalDav Link" => "Врска за CalDav", "Shared calendars" => "Споделени календари", @@ -132,27 +134,19 @@ "Interval" => "интервал", "End" => "Крај", "occurrences" => "повторувања", -"Import a calendar file" => "Внеси календар од датотека ", -"Please choose the calendar" => "Ве молам изберете го календарот", "create a new calendar" => "создади нов календар", +"Import a calendar file" => "Внеси календар од датотека ", "Name of new calendar" => "Име на новиот календар", "Import" => "Увези", -"Importing calendar" => "Увезување на календар", -"Calendar imported successfully" => "Календарот беше успешно увезен", "Close Dialog" => "Затвори дијалог", "Create a new event" => "Создади нов настан", "View an event" => "Погледај настан", "No categories selected" => "Нема избрано категории", -"Select category" => "Избери категорија", "of" => "од", "at" => "на", "Timezone" => "Временска зона", -"Check always for changes of the timezone" => "Секогаш провери за промени на временската зона", -"Timeformat" => "Формат на времето", "24h" => "24ч", "12h" => "12ч", -"First day of the week" => "Прв ден од седмицата", -"Calendar CalDAV syncing address:" => "CalDAV календар адресата за синхронизација:", "Users" => "Корисници", "select users" => "избери корисници", "Editable" => "Изменливо", diff --git a/apps/calendar/l10n/ms_MY.php b/apps/calendar/l10n/ms_MY.php index 2cb3ac41c30..4be91a40194 100644 --- a/apps/calendar/l10n/ms_MY.php +++ b/apps/calendar/l10n/ms_MY.php @@ -1,9 +1,17 @@ <?php $TRANSLATIONS = array( +"No calendars found." => "Tiada kalendar dijumpai.", +"No events found." => "Tiada agenda dijumpai.", "Wrong calendar" => "Silap kalendar", "New Timezone:" => "Timezone Baru", "Timezone changed" => "Zon waktu diubah", "Invalid request" => "Permintaan tidak sah", "Calendar" => "Kalendar", +"ddd" => "ddd", +"ddd M/d" => "dd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyy", "Birthday" => "Hari lahir", "Business" => "Perniagaan", "Call" => "Panggilan", @@ -19,6 +27,8 @@ "Projects" => "Projek", "Questions" => "Soalan", "Work" => "Kerja", +"unnamed" => "tiada nama", +"New Calendar" => "Kalendar baru", "Does not repeat" => "Tidak berulang", "Daily" => "Harian", "Weekly" => "Mingguan", @@ -64,7 +74,6 @@ "Date" => "Tarikh", "Cal." => "Kalendar", "All day" => "Sepanjang hari", -"New Calendar" => "Kalendar baru", "Missing fields" => "Ruangan tertinggal", "Title" => "Tajuk", "From Date" => "Dari tarikh", @@ -77,13 +86,15 @@ "Month" => "Bulan", "List" => "Senarai", "Today" => "Hari ini", -"Calendars" => "Kalendar", -"There was a fail, while parsing the file." => "Berlaku kegagalan ketika penguraian fail. ", -"Choose active calendars" => "Pilih kalendar yang aktif", +"Your calendars" => "Kalendar anda", "CalDav Link" => "Pautan CalDav", +"Shared calendars" => "Kalendar Kongsian", +"No shared calendars" => "Tiada kalendar kongsian", +"Share Calendar" => "Kongsi Kalendar", "Download" => "Muat turun", "Edit" => "Edit", "Delete" => "Hapus", +"shared with you by" => "dikongsi dengan kamu oleh", "New calendar" => "Kalendar baru", "Edit calendar" => "Edit kalendar", "Displayname" => "Paparan nama", @@ -94,8 +105,15 @@ "Cancel" => "Batal", "Edit an event" => "Edit agenda", "Export" => "Export", +"Eventinfo" => "Maklumat agenda", +"Repeating" => "Pengulangan", +"Alarm" => "Penggera", +"Attendees" => "Jemputan", +"Share" => "Berkongsi", "Title of the Event" => "Tajuk agenda", "Category" => "kategori", +"Separate categories with commas" => "Asingkan kategori dengan koma", +"Edit categories" => "Sunting Kategori", "All Day Event" => "Agenda di sepanjang hari ", "From" => "Dari", "To" => "ke", @@ -116,20 +134,23 @@ "Interval" => "Tempoh", "End" => "Tamat", "occurrences" => "Peristiwa", -"Import a calendar file" => "Import fail kalendar", -"Please choose the calendar" => "Sila pilih kalendar", "create a new calendar" => "Cipta kalendar baru", +"Import a calendar file" => "Import fail kalendar", "Name of new calendar" => "Nama kalendar baru", "Import" => "Import", -"Importing calendar" => "Import kalendar", -"Calendar imported successfully" => "Kalendar berjaya diimport", "Close Dialog" => "Tutup dialog", "Create a new event" => "Buat agenda baru", -"Select category" => "Pilih kategori", +"View an event" => "Papar peristiwa", +"No categories selected" => "Tiada kategori dipilih", +"of" => "dari", +"at" => "di", "Timezone" => "Zon waktu", -"Check always for changes of the timezone" => "Sentiasa mengemaskini perubahan zon masa", -"Timeformat" => "Timeformat", "24h" => "24h", "12h" => "12h", -"Calendar CalDAV syncing address:" => "Kelendar CalDAV mengemaskini alamat:" +"Users" => "Pengguna", +"select users" => "Pilih pengguna", +"Editable" => "Boleh disunting", +"Groups" => "Kumpulan-kumpulan", +"select groups" => "pilih kumpulan-kumpulan", +"make public" => "jadikan tontonan awam" ); diff --git a/apps/calendar/l10n/nb_NO.php b/apps/calendar/l10n/nb_NO.php index 95ba5a9dba2..8f736869de1 100644 --- a/apps/calendar/l10n/nb_NO.php +++ b/apps/calendar/l10n/nb_NO.php @@ -8,6 +8,7 @@ "Calendar" => "Kalender", "Birthday" => "Bursdag", "Business" => "Forretninger", +"Call" => "Ring", "Clients" => "Kunder", "Holidays" => "Ferie", "Ideas" => "Ideér", @@ -20,6 +21,7 @@ "Questions" => "Spørsmål", "Work" => "Arbeid", "unnamed" => "uten navn", +"New Calendar" => "Ny kalender", "Does not repeat" => "Gjentas ikke", "Daily" => "Daglig", "Weekly" => "Ukentlig", @@ -129,6 +131,7 @@ "Interval" => "Intervall", "End" => "Slutt", "occurrences" => "forekomster", +"create a new calendar" => "Lag en ny kalender", "Import a calendar file" => "Importer en kalenderfil", "Please choose the calendar" => "Vennligst velg kalenderen", "create a new calendar" => "Lag en ny kalender", @@ -147,7 +150,7 @@ "24h" => "24 t", "12h" => "12 t", "First day of the week" => "Ukens første dag", -"Calendar CalDAV syncing address:" => "Synkroniseringsadresse fo kalender CalDAV:", +"Calendar CalDAV syncing address:" => "Kalender CalDAV synkroniseringsadresse", "Users" => "Brukere", "select users" => "valgte brukere", "Editable" => "Redigerbar", diff --git a/apps/calendar/l10n/nl.php b/apps/calendar/l10n/nl.php index d141a1cc08c..834c0ad9054 100644 --- a/apps/calendar/l10n/nl.php +++ b/apps/calendar/l10n/nl.php @@ -6,7 +6,12 @@ "Timezone changed" => "Tijdzone is veranderd", "Invalid request" => "Ongeldige aanvraag", "Calendar" => "Kalender", -"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '—' d[ MMM] yyyy}", +"ddd" => "ddd", +"ddd M/d" => "ddd d.M", +"dddd M/d" => "dddd d.M", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d[ MMM][ yyyy]{ '—' d MMM yyyy}", +"dddd, MMM d, yyyy" => "dddd, d. MMM yyyy", "Birthday" => "Verjaardag", "Business" => "Zakelijk", "Call" => "Bellen", @@ -23,6 +28,7 @@ "Questions" => "Vragen", "Work" => "Werk", "unnamed" => "onbekend", +"New Calendar" => "Nieuwe Kalender", "Does not repeat" => "Wordt niet herhaald", "Daily" => "Dagelijks", "Weekly" => "Wekelijks", @@ -68,7 +74,6 @@ "Date" => "Datum", "Cal." => "Cal.", "All day" => "Hele dag", -"New Calendar" => "Nieuwe Kalender", "Missing fields" => "missende velden", "Title" => "Titel", "From Date" => "Begindatum", @@ -81,9 +86,6 @@ "Month" => "Maand", "List" => "Lijst", "Today" => "Vandaag", -"Calendars" => "Kalenders", -"There was a fail, while parsing the file." => "Er is een fout opgetreden bij het verwerken van het bestand.", -"Choose active calendars" => "Kies actieve kalenders", "Your calendars" => "Je kalenders", "CalDav Link" => "CalDav Link", "Shared calendars" => "Gedeelde kalenders", @@ -132,27 +134,19 @@ "Interval" => "Interval", "End" => "Einde", "occurrences" => "gebeurtenissen", -"Import a calendar file" => "Importeer een agenda bestand", -"Please choose the calendar" => "Kies de kalender", "create a new calendar" => "Maak een nieuw agenda", +"Import a calendar file" => "Importeer een agenda bestand", "Name of new calendar" => "Naam van de nieuwe agenda", "Import" => "Importeer", -"Importing calendar" => "Importeer agenda", -"Calendar imported successfully" => "Agenda succesvol geïmporteerd", "Close Dialog" => "Sluit venster", "Create a new event" => "Maak een nieuwe afspraak", "View an event" => "Bekijk een gebeurtenis", "No categories selected" => "Geen categorieën geselecteerd", -"Select category" => "Kies een categorie", "of" => "van", "at" => "op", "Timezone" => "Tijdzone", -"Check always for changes of the timezone" => "Controleer altijd op aanpassingen van de tijdszone", -"Timeformat" => "Tijdformaat", "24h" => "24uur", "12h" => "12uur", -"First day of the week" => "Eerste dag van de week", -"Calendar CalDAV syncing address:" => "CalDAV kalender synchronisatie adres:", "Users" => "Gebruikers", "select users" => "kies gebruikers", "Editable" => "Te wijzigen", diff --git a/apps/calendar/l10n/nn_NO.php b/apps/calendar/l10n/nn_NO.php index 79119e8100b..3330cc562bc 100644 --- a/apps/calendar/l10n/nn_NO.php +++ b/apps/calendar/l10n/nn_NO.php @@ -19,6 +19,7 @@ "Projects" => "Prosjekt", "Questions" => "Spørsmål", "Work" => "Arbeid", +"New Calendar" => "Ny kalender", "Does not repeat" => "Ikkje gjenta", "Daily" => "Kvar dag", "Weekly" => "Kvar veke", @@ -64,7 +65,6 @@ "Date" => "Dato", "Cal." => "Kal.", "All day" => "Heile dagen", -"New Calendar" => "Ny kalender", "Missing fields" => "Manglande felt", "Title" => "Tittel", "From Date" => "Frå dato", @@ -77,9 +77,6 @@ "Month" => "Månad", "List" => "Liste", "Today" => "I dag", -"Calendars" => "Kalendarar", -"There was a fail, while parsing the file." => "Feil ved tolking av fila.", -"Choose active calendars" => "Vel aktive kalendarar", "CalDav Link" => "CalDav-lenkje", "Download" => "Last ned", "Edit" => "Endra", @@ -116,20 +113,13 @@ "Interval" => "Intervall", "End" => "Ende", "occurrences" => "førekomstar", -"Import a calendar file" => "Importer ei kalenderfil", -"Please choose the calendar" => "Venlegast vel kalenderen", "create a new calendar" => "Lag ny kalender", +"Import a calendar file" => "Importer ei kalenderfil", "Name of new calendar" => "Namn for ny kalender", "Import" => "Importer", -"Importing calendar" => "Importerar kalender", -"Calendar imported successfully" => "Kalender importert utan feil", "Close Dialog" => "Steng dialog", "Create a new event" => "Opprett ei ny hending", -"Select category" => "Vel kategori", "Timezone" => "Tidssone", -"Check always for changes of the timezone" => "Sjekk alltid for endringar i tidssona", -"Timeformat" => "Tidsformat", "24h" => "24t", -"12h" => "12t", -"Calendar CalDAV syncing address:" => "Kalender CalDAV synkroniseringsadresse:" +"12h" => "12t" ); diff --git a/apps/calendar/l10n/pl.php b/apps/calendar/l10n/pl.php index e582cdbb9b3..0174bef6fc2 100644 --- a/apps/calendar/l10n/pl.php +++ b/apps/calendar/l10n/pl.php @@ -2,11 +2,18 @@ "No calendars found." => "Brak kalendarzy", "No events found." => "Brak wydzarzeń", "Wrong calendar" => "Nieprawidłowy kalendarz", +"Import failed" => "Import nieudany", +"events has been saved in your calendar" => "zdarzenie zostało zapisane w twoim kalendarzu", "New Timezone:" => "Nowa strefa czasowa:", "Timezone changed" => "Zmieniono strefę czasową", "Invalid request" => "Nieprawidłowe żądanie", "Calendar" => "Kalendarz", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM rrrr", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr", "Birthday" => "Urodziny", "Business" => "Interesy", "Call" => "Rozmowy", @@ -22,7 +29,9 @@ "Projects" => "Projekty", "Questions" => "Pytania", "Work" => "Zawodowe", +"by" => "przez", "unnamed" => "nienazwany", +"New Calendar" => "Nowy kalendarz", "Does not repeat" => "Brak", "Daily" => "Codziennie", "Weekly" => "Tygodniowo", @@ -67,8 +76,26 @@ "by day and month" => "przez dzień i miesiąc", "Date" => "Data", "Cal." => "Kal.", +"Sun." => "N.", +"Mon." => "Pn.", +"Tue." => "Wt.", +"Wed." => "Śr.", +"Thu." => "Cz.", +"Fri." => "Pt.", +"Sat." => "S.", +"Jan." => "Sty.", +"Feb." => "Lut.", +"Mar." => "Mar.", +"Apr." => "Kwi.", +"May." => "Maj.", +"Jun." => "Cze.", +"Jul." => "Lip.", +"Aug." => "Sie.", +"Sep." => "Wrz.", +"Oct." => "Paź.", +"Nov." => "Lis.", +"Dec." => "Gru.", "All day" => "Cały dzień", -"New Calendar" => "Nowy kalendarz", "Missing fields" => "Brakujące pola", "Title" => "Nazwa", "From Date" => "Od daty", @@ -81,9 +108,6 @@ "Month" => "Miesiąc", "List" => "Lista", "Today" => "Dzisiaj", -"Calendars" => "Kalendarze", -"There was a fail, while parsing the file." => "Nie udało się przetworzyć pliku.", -"Choose active calendars" => "Wybór aktywnych kalendarzy", "Your calendars" => "Twoje kalendarze", "CalDav Link" => "Wyświetla odnośnik CalDAV", "Shared calendars" => "Współdzielone kalendarze", @@ -132,9 +156,9 @@ "Interval" => "Interwał", "End" => "Koniec", "occurrences" => "wystąpienia", -"Import a calendar file" => "Zaimportuj plik kalendarza", -"Please choose the calendar" => "Proszę wybrać kalendarz", "create a new calendar" => "stwórz nowy kalendarz", +"Import a calendar file" => "Zaimportuj plik kalendarza", +"Please choose a calendar" => "Proszę wybierz kalendarz", "Name of new calendar" => "Nazwa kalendarza", "Import" => "Import", "Importing calendar" => "Importuje kalendarz", @@ -143,7 +167,6 @@ "Create a new event" => "Tworzenie nowego wydarzenia", "View an event" => "Zobacz wydarzenie", "No categories selected" => "nie zaznaczono kategorii", -"Select category" => "Wybierz kategorię", "of" => "z", "at" => "w", "Timezone" => "Strefa czasowa", @@ -151,8 +174,9 @@ "Timeformat" => "Format czasu", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Pierwszy dzień tygodnia", -"Calendar CalDAV syncing address:" => "Adres synchronizacji kalendarza CalDAV:", +"more info" => "więcej informacji", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Odczytać tylko linki iCalendar", "Users" => "Użytkownicy", "select users" => "wybierz użytkowników", "Editable" => "Edytowalne", diff --git a/apps/calendar/l10n/pt_BR.php b/apps/calendar/l10n/pt_BR.php index 95317eea0f7..b636c19bfe7 100644 --- a/apps/calendar/l10n/pt_BR.php +++ b/apps/calendar/l10n/pt_BR.php @@ -6,7 +6,12 @@ "Timezone changed" => "Fuso horário alterado", "Invalid request" => "Pedido inválido", "Calendar" => "Calendário", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Aniversário", "Business" => "Negócio", "Call" => "Chamada", @@ -23,6 +28,7 @@ "Questions" => "Perguntas", "Work" => "Trabalho", "unnamed" => "sem nome", +"New Calendar" => "Novo Calendário", "Does not repeat" => "Não repetir", "Daily" => "Diariamente", "Weekly" => "Semanal", @@ -68,7 +74,6 @@ "Date" => "Data", "Cal." => "Cal.", "All day" => "Todo o dia", -"New Calendar" => "Novo Calendário", "Missing fields" => "Campos incompletos", "Title" => "Título", "From Date" => "Desde a Data", @@ -81,9 +86,6 @@ "Month" => "Mês", "List" => "Lista", "Today" => "Hoje", -"Calendars" => "Calendários", -"There was a fail, while parsing the file." => "Houve uma falha, ao analisar o arquivo.", -"Choose active calendars" => "Escolha calendários ativos", "Your calendars" => "Meus Calendários", "CalDav Link" => "Link para CalDav", "Shared calendars" => "Calendários Compartilhados", @@ -132,27 +134,19 @@ "Interval" => "Intervalo", "End" => "Final", "occurrences" => "ocorrências", -"Import a calendar file" => "Importar um arquivo de calendário", -"Please choose the calendar" => "Por favor, escolha o calendário", "create a new calendar" => "criar um novo calendário", +"Import a calendar file" => "Importar um arquivo de calendário", "Name of new calendar" => "Nome do novo calendário", "Import" => "Importar", -"Importing calendar" => "Importar calendário", -"Calendar imported successfully" => "Calendário importado com sucesso", "Close Dialog" => "Fechar caixa de diálogo", "Create a new event" => "Criar um novo evento", "View an event" => "Visualizar evento", "No categories selected" => "Nenhuma categoria selecionada", -"Select category" => "Selecionar categoria", "of" => "de", "at" => "para", "Timezone" => "Fuso horário", -"Check always for changes of the timezone" => "Verificar sempre mudanças no fuso horário", -"Timeformat" => "Formato da Hora", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primeiro dia da semana", -"Calendar CalDAV syncing address:" => "Sincronização de endereço do calendário CalDAV :", "Users" => "Usuários", "select users" => "Selecione usuários", "Editable" => "Editável", diff --git a/apps/calendar/l10n/pt_PT.php b/apps/calendar/l10n/pt_PT.php index 33f85569cca..81bab52e593 100644 --- a/apps/calendar/l10n/pt_PT.php +++ b/apps/calendar/l10n/pt_PT.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Nem todos os calendários estão completamente pré-carregados", +"Everything seems to be completely cached" => "Parece que tudo está completamente pré-carregado", "No calendars found." => "Nenhum calendário encontrado.", "No events found." => "Nenhum evento encontrado.", "Wrong calendar" => "Calendário errado", +"The file contained either no events or all events are already saved in your calendar." => "O ficheiro não continha nenhuns eventos ou então todos os eventos já estavam carregados no seu calendário", +"events has been saved in the new calendar" => "Os eventos foram guardados no novo calendário", +"Import failed" => "Falha na importação", +"events has been saved in your calendar" => "Os eventos foram guardados no seu calendário", "New Timezone:" => "Nova zona horária", "Timezone changed" => "Zona horária alterada", "Invalid request" => "Pedido inválido", "Calendar" => "Calendário", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM aaaa", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, aaaa", "Birthday" => "Dia de anos", "Business" => "Negócio", "Call" => "Telefonar", @@ -22,7 +33,9 @@ "Projects" => "Projetos", "Questions" => "Perguntas", "Work" => "Trabalho", +"by" => "por", "unnamed" => "não definido", +"New Calendar" => "Novo calendário", "Does not repeat" => "Não repete", "Daily" => "Diário", "Weekly" => "Semanal", @@ -67,8 +80,26 @@ "by day and month" => "por dia e mês", "Date" => "Data", "Cal." => "Cal.", +"Sun." => "Dom.", +"Mon." => "Seg.", +"Tue." => "ter.", +"Wed." => "Qua.", +"Thu." => "Qui.", +"Fri." => "Sex.", +"Sat." => "Sáb.", +"Jan." => "Jan.", +"Feb." => "Fev,", +"Mar." => "Mar.", +"Apr." => "Abr.", +"May." => "Mai.", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Ago.", +"Sep." => "Set.", +"Oct." => "Out.", +"Nov." => "Nov.", +"Dec." => "Dez.", "All day" => "Todo o dia", -"New Calendar" => "Novo calendário", "Missing fields" => "Falta campos", "Title" => "Título", "From Date" => "Da data", @@ -81,9 +112,7 @@ "Month" => "Mês", "List" => "Lista", "Today" => "Hoje", -"Calendars" => "Calendários", -"There was a fail, while parsing the file." => "Houve uma falha durante a análise do ficheiro", -"Choose active calendars" => "Escolhe calendários ativos", +"Settings" => "Configurações", "Your calendars" => "Os seus calendários", "CalDav Link" => "Endereço CalDav", "Shared calendars" => "Calendários partilhados", @@ -132,10 +161,12 @@ "Interval" => "Intervalo", "End" => "Fim", "occurrences" => "ocorrências", -"Import a calendar file" => "Importar um ficheiro de calendário", -"Please choose the calendar" => "Por favor escolhe o calendário", "create a new calendar" => "criar novo calendário", +"Import a calendar file" => "Importar um ficheiro de calendário", +"Please choose a calendar" => "Escolha um calendário por favor", "Name of new calendar" => "Nome do novo calendário", +"Take an available name!" => "Escolha um nome disponível!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Já existe um Calendário com esse nome. Se mesmo assim continuar, esses calendários serão fundidos.", "Import" => "Importar", "Importing calendar" => "A importar calendário", "Calendar imported successfully" => "Calendário importado com sucesso", @@ -143,16 +174,23 @@ "Create a new event" => "Criar novo evento", "View an event" => "Ver um evento", "No categories selected" => "Nenhuma categoria seleccionada", -"Select category" => "Selecionar categoria", "of" => "de", "at" => "em", +"General" => "Geral", "Timezone" => "Zona horária", -"Check always for changes of the timezone" => "Verificar sempre por alterações na zona horária", -"Timeformat" => "Formato da hora", +"Update timezone automatically" => "Actualizar automaticamente o fuso horário", +"Time format" => "Formato da hora", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Primeiro dia da semana", -"Calendar CalDAV syncing address:" => "Endereço de sincronização CalDav do calendário", +"Start week on" => "Começar semana em", +"Cache" => "Memória de pré-carregamento", +"Clear cache for repeating events" => "Limpar a memória de pré carregamento para eventos recorrentes", +"URLs" => "Endereço(s) web", +"Calendar CalDAV syncing addresses" => "Endereços de sincronização de calendários CalDAV", +"more info" => "mais informação", +"Primary address (Kontact et al)" => "Endereço principal (contactos et al.)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Ligaç(ão/ões) só de leitura do iCalendar", "Users" => "Utilizadores", "select users" => "Selecione utilizadores", "Editable" => "Editavel", diff --git a/apps/calendar/l10n/ro.php b/apps/calendar/l10n/ro.php index 550afcd102f..696322dd730 100644 --- a/apps/calendar/l10n/ro.php +++ b/apps/calendar/l10n/ro.php @@ -23,6 +23,7 @@ "Questions" => "Întrebări", "Work" => "Servici", "unnamed" => "fără nume", +"New Calendar" => "Calendar nou", "Does not repeat" => "Nerepetabil", "Daily" => "Zilnic", "Weekly" => "Săptămânal", @@ -68,7 +69,6 @@ "Date" => "Data", "Cal." => "Cal.", "All day" => "Toată ziua", -"New Calendar" => "Calendar nou", "Missing fields" => "Câmpuri lipsă", "Title" => "Titlu", "From Date" => "Începând cu", @@ -81,9 +81,6 @@ "Month" => "Luna", "List" => "Listă", "Today" => "Astăzi", -"Calendars" => "Calendare", -"There was a fail, while parsing the file." => "A fost întâmpinată o eroare în procesarea fișierului", -"Choose active calendars" => "Alege calendarele active", "Your calendars" => "Calendarele tale", "CalDav Link" => "Legătură CalDav", "Shared calendars" => "Calendare partajate", @@ -132,6 +129,7 @@ "Interval" => "Interval", "End" => "Sfârșit", "occurrences" => "repetiții", +"create a new calendar" => "crează un calendar nou", "Import a calendar file" => "Importă un calendar", "Please choose the calendar" => "Alegeți calendarul", "create a new calendar" => "crează un calendar nou", @@ -143,7 +141,6 @@ "Create a new event" => "Crează un eveniment nou", "View an event" => "Vizualizează un eveniment", "No categories selected" => "Nici o categorie selectată", -"Select category" => "Selecteză categoria", "of" => "din", "at" => "la", "Timezone" => "Fus orar", @@ -151,8 +148,6 @@ "Timeformat" => "Forma de afișare a orei", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Prima zi a săptămînii", -"Calendar CalDAV syncing address:" => "Adresa pentru sincronizarea calendarului CalDAV", "Users" => "Utilizatori", "select users" => "utilizatori selectați", "Editable" => "Editabil", diff --git a/apps/calendar/l10n/ru.php b/apps/calendar/l10n/ru.php index af40b06b9ff..fbf5ec5ff74 100644 --- a/apps/calendar/l10n/ru.php +++ b/apps/calendar/l10n/ru.php @@ -1,11 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Не все календари полностью кешированы", +"Everything seems to be completely cached" => "Все, вроде бы, закешировано", "No calendars found." => "Календари не найдены.", "No events found." => "События не найдены.", "Wrong calendar" => "Неверный календарь", +"The file contained either no events or all events are already saved in your calendar." => "Файл либо не собержит событий, либо все события уже есть в календаре", +"events has been saved in the new calendar" => "события были сохранены в новый календарь", +"Import failed" => "Ошибка импорта", +"events has been saved in your calendar" => "события были сохранены в вашем календаре", "New Timezone:" => "Новый часовой пояс:", "Timezone changed" => "Часовой пояс изменён", "Invalid request" => "Неверный запрос", "Calendar" => "Календарь", +"ddd" => "ддд", +"ddd M/d" => "ддд М/д", +"dddd M/d" => "дддд М/д", +"MMMM yyyy" => "ММММ гггг", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "дддд, МММ д, гггг", "Birthday" => "День рождения", "Business" => "Бизнес", "Call" => "Звонить", @@ -21,7 +33,9 @@ "Projects" => "Проекты", "Questions" => "Вопросы", "Work" => "Работа", +"by" => "до свидания", "unnamed" => "без имени", +"New Calendar" => "Новый Календарь", "Does not repeat" => "Не повторяется", "Daily" => "Ежедневно", "Weekly" => "Еженедельно", @@ -66,8 +80,26 @@ "by day and month" => "по дню и месяцу", "Date" => "Дата", "Cal." => "Кал.", +"Sun." => "Вс.", +"Mon." => "Пн.", +"Tue." => "Вт.", +"Wed." => "Ср.", +"Thu." => "Чт.", +"Fri." => "Пт.", +"Sat." => "Сб.", +"Jan." => "Янв.", +"Feb." => "Фев.", +"Mar." => "Мар.", +"Apr." => "Апр.", +"May." => "Май.", +"Jun." => "Июн.", +"Jul." => "Июл.", +"Aug." => "Авг.", +"Sep." => "Сен.", +"Oct." => "Окт.", +"Nov." => "Ноя.", +"Dec." => "Дек.", "All day" => "Весь день", -"New Calendar" => "Новый Календарь", "Missing fields" => "Незаполненные поля", "Title" => "Название", "From Date" => "Дата начала", @@ -80,9 +112,7 @@ "Month" => "Месяц", "List" => "Список", "Today" => "Сегодня", -"Calendars" => "Календари", -"There was a fail, while parsing the file." => "Не удалось обработать файл.", -"Choose active calendars" => "Выберите активные календари", +"Settings" => "Параметры", "Your calendars" => "Ваши календари", "CalDav Link" => "Ссылка для CalDav", "Shared calendars" => "Общие календари", @@ -131,10 +161,12 @@ "Interval" => "Интервал", "End" => "Окончание", "occurrences" => "повторений", -"Import a calendar file" => "Импортировать календарь из файла", -"Please choose the calendar" => "Пожалуйста, выберите календарь", "create a new calendar" => "Создать новый календарь", +"Import a calendar file" => "Импортировать календарь из файла", +"Please choose a calendar" => "Пожалуйста, выберите календарь", "Name of new calendar" => "Название нового календаря", +"Take an available name!" => "Возьмите разрешенное имя!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Календарь с таким именем уже существует. Если вы продолжите, одноименный календарь будет удален.", "Import" => "Импортировать", "Importing calendar" => "Импортируется календарь", "Calendar imported successfully" => "Календарь успешно импортирован", @@ -142,14 +174,23 @@ "Create a new event" => "Создать новое событие", "View an event" => "Показать событие", "No categories selected" => "Категории не выбраны", -"Select category" => "Выбрать категорию", +"of" => "из", +"at" => "на", +"General" => "Основные", "Timezone" => "Часовой пояс", -"Check always for changes of the timezone" => "Всегда проверяйте изменение часового пояса", -"Timeformat" => "Формат времени", +"Update timezone automatically" => "Автоматическое обновление временной зоны", +"Time format" => "Формат времени", "24h" => "24ч", "12h" => "12ч", -"First day of the week" => "Первый день недели", -"Calendar CalDAV syncing address:" => "Адрес синхронизации календаря CalDAV:", +"Start week on" => "Начало недели", +"Cache" => "Кэш", +"Clear cache for repeating events" => "Очистить кэш повторяющихся событий", +"URLs" => "URLs", +"Calendar CalDAV syncing addresses" => "Адрес синхронизации CalDAV", +"more info" => "подробнее", +"Primary address (Kontact et al)" => "Основной адрес (Контакта)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Читать только ссылки iCalendar", "Users" => "Пользователи", "select users" => "выбрать пользователей", "Editable" => "Редактируемо", diff --git a/apps/calendar/l10n/sk_SK.php b/apps/calendar/l10n/sk_SK.php index e182a9d3ea4..65400c496d7 100644 --- a/apps/calendar/l10n/sk_SK.php +++ b/apps/calendar/l10n/sk_SK.php @@ -6,7 +6,12 @@ "Timezone changed" => "Časové pásmo zmenené", "Invalid request" => "Neplatná požiadavka", "Calendar" => "Kalendár", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM rrrr", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "d. MMM[ yyyy]{ '—' d.[ MMM] yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr", "Birthday" => "Narodeniny", "Business" => "Podnikanie", "Call" => "Hovor", @@ -23,6 +28,7 @@ "Questions" => "Otázky", "Work" => "Práca", "unnamed" => "nepomenovaný", +"New Calendar" => "Nový kalendár", "Does not repeat" => "Neopakovať", "Daily" => "Denne", "Weekly" => "Týždenne", @@ -68,7 +74,6 @@ "Date" => "Dátum", "Cal." => "Kal.", "All day" => "Celý deň", -"New Calendar" => "Nový kalendár", "Missing fields" => "Nevyplnené položky", "Title" => "Nadpis", "From Date" => "Od dátumu", @@ -81,9 +86,6 @@ "Month" => "Mesiac", "List" => "Zoznam", "Today" => "Dnes", -"Calendars" => "Kalendáre", -"There was a fail, while parsing the file." => "Nastala chyba počas parsovania súboru.", -"Choose active calendars" => "Zvoľte aktívne kalendáre", "Your calendars" => "Vaše kalendáre", "CalDav Link" => "CalDav odkaz", "Shared calendars" => "Zdielané kalendáre", @@ -132,27 +134,19 @@ "Interval" => "Interval", "End" => "Koniec", "occurrences" => "výskyty", -"Import a calendar file" => "Importovať súbor kalendára", -"Please choose the calendar" => "Prosím zvoľte kalendár", "create a new calendar" => "vytvoriť nový kalendár", +"Import a calendar file" => "Importovať súbor kalendára", "Name of new calendar" => "Meno nového kalendára", "Import" => "Importovať", -"Importing calendar" => "Importujem kalendár", -"Calendar imported successfully" => "Kalendár úspešne importovaný", "Close Dialog" => "Zatvoriť dialóg", "Create a new event" => "Vytvoriť udalosť", "View an event" => "Zobraziť udalosť", "No categories selected" => "Žiadne vybraté kategórie", -"Select category" => "Vybrať kategóriu", "of" => "z", "at" => "v", "Timezone" => "Časová zóna", -"Check always for changes of the timezone" => "Vždy kontroluj zmeny časového pásma", -"Timeformat" => "Formát času", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Prvý deň v týždni", -"Calendar CalDAV syncing address:" => "Synchronizačná adresa kalendára CalDAV: ", "Users" => "Používatelia", "select users" => "vybrať používateľov", "Editable" => "Upravovateľné", diff --git a/apps/calendar/l10n/sl.php b/apps/calendar/l10n/sl.php index 3bf03ede127..585132314bb 100644 --- a/apps/calendar/l10n/sl.php +++ b/apps/calendar/l10n/sl.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Vsi koledarji niso povsem predpomnjeni", +"Everything seems to be completely cached" => "Izgleda, da je vse v predpomnilniku", "No calendars found." => "Ni bilo najdenih koledarjev.", "No events found." => "Ni bilo najdenih dogodkov.", "Wrong calendar" => "Napačen koledar", +"The file contained either no events or all events are already saved in your calendar." => "Datoteka ni vsebovala dogodkov ali pa so vsi dogodki že shranjeni v koledarju.", +"events has been saved in the new calendar" => "dogodki so bili shranjeni v nov koledar", +"Import failed" => "Uvoz je spodletel", +"events has been saved in your calendar" => "dogodki so bili shranjeni v vaš koledar", "New Timezone:" => "Nov časovni pas:", "Timezone changed" => "Časovni pas je bil spremenjen", "Invalid request" => "Neveljaven zahtevek", "Calendar" => "Koledar", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Rojstni dan", "Business" => "Poslovno", "Call" => "Pokliči", @@ -22,7 +33,9 @@ "Projects" => "Projekt", "Questions" => "Vprašanja", "Work" => "Delo", +"by" => "od", "unnamed" => "neimenovan", +"New Calendar" => "Nov koledar", "Does not repeat" => "Se ne ponavlja", "Daily" => "Dnevno", "Weekly" => "Tedensko", @@ -67,8 +80,26 @@ "by day and month" => "po dnevu in mesecu", "Date" => "Datum", "Cal." => "Kol.", +"Sun." => "ned.", +"Mon." => "pon.", +"Tue." => "tor.", +"Wed." => "sre.", +"Thu." => "čet.", +"Fri." => "pet.", +"Sat." => "sob.", +"Jan." => "jan.", +"Feb." => "feb.", +"Mar." => "mar.", +"Apr." => "apr.", +"May." => "maj", +"Jun." => "jun.", +"Jul." => "jul.", +"Aug." => "avg.", +"Sep." => "sep.", +"Oct." => "okt.", +"Nov." => "nov.", +"Dec." => "dec.", "All day" => "Cel dan", -"New Calendar" => "Nov koledar", "Missing fields" => "Mankajoča polja", "Title" => "Naslov", "From Date" => "od Datum", @@ -81,9 +112,7 @@ "Month" => "Mesec", "List" => "Seznam", "Today" => "Danes", -"Calendars" => "Koledarji", -"There was a fail, while parsing the file." => "Pri razčlenjevanju datoteke je prišlo do napake.", -"Choose active calendars" => "Izberite aktivne koledarje", +"Settings" => "Nastavitve", "Your calendars" => "Vaši koledarji", "CalDav Link" => "CalDav povezava", "Shared calendars" => "Koledarji v souporabi", @@ -132,27 +161,34 @@ "Interval" => "Časovni razmik", "End" => "Konec", "occurrences" => "ponovitev", -"Import a calendar file" => "Uvozi datoteko koledarja", -"Please choose the calendar" => "Izberi koledar", "create a new calendar" => "Ustvari nov koledar", +"Import a calendar file" => "Uvozi datoteko koledarja", +"Please choose a calendar" => "Prosimo, če izberete koledar", "Name of new calendar" => "Ime novega koledarja", +"Take an available name!" => "Izberite prosto ime!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Koledar s tem imenom že obstaja. Če nadaljujete, bosta koledarja združena.", "Import" => "Uvozi", -"Importing calendar" => "Uvažam koledar", -"Calendar imported successfully" => "Koledar je bil uspešno uvožen", "Close Dialog" => "Zapri dialog", "Create a new event" => "Ustvari nov dogodek", "View an event" => "Poglej dogodek", "No categories selected" => "Nobena kategorija ni izbrana", -"Select category" => "Izberi kategorijo", "of" => "od", "at" => "pri", +"General" => "Splošno", "Timezone" => "Časovni pas", -"Check always for changes of the timezone" => "Vedno preveri za spremembe časovnega pasu", -"Timeformat" => "Zapis časa", +"Update timezone automatically" => "Samodejno posodobi časovni pas", +"Time format" => "Oblika zapisa časa", "24h" => "24ur", "12h" => "12ur", -"First day of the week" => "Prvi dan v tednu", -"Calendar CalDAV syncing address:" => "CalDAV sinhronizacijski naslov koledarja:", +"Start week on" => "Začni teden z", +"Cache" => "Predpomnilnik", +"Clear cache for repeating events" => "Počisti predpomnilnik za ponavljajoče dogodke", +"URLs" => "URLji", +"Calendar CalDAV syncing addresses" => "CalDAV naslov za usklajevanje koledarjev", +"more info" => "dodatne informacije", +"Primary address (Kontact et al)" => "Glavni naslov (Kontakt et al)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "iCalendar povezava/e samo za branje", "Users" => "Uporabniki", "select users" => "izberite uporabnike", "Editable" => "Možno urejanje", diff --git a/apps/calendar/l10n/sr.php b/apps/calendar/l10n/sr.php index 5798c66e0ab..4ec60e20cbe 100644 --- a/apps/calendar/l10n/sr.php +++ b/apps/calendar/l10n/sr.php @@ -18,6 +18,7 @@ "Projects" => "Пројекти", "Questions" => "Питања", "Work" => "Посао", +"New Calendar" => "Нови календар", "Does not repeat" => "Не понавља се", "Daily" => "дневно", "Weekly" => "недељно", @@ -26,15 +27,11 @@ "Monthly" => "месечно", "Yearly" => "годишње", "All day" => "Цео дан", -"New Calendar" => "Нови календар", "Title" => "Наслов", "Week" => "Недеља", "Month" => "Месец", "List" => "Списак", "Today" => "Данас", -"Calendars" => "Календари", -"There was a fail, while parsing the file." => "дошло је до грешке при расчлањивању фајла.", -"Choose active calendars" => "Изаберите активне календаре", "CalDav Link" => "КалДав веза", "Download" => "Преузми", "Edit" => "Уреди", @@ -59,6 +56,5 @@ "Description of the Event" => "Опис догађаја", "Repeat" => "Понављај", "Create a new event" => "Направи нови догађај", -"Select category" => "Изаберите категорију", "Timezone" => "Временска зона" ); diff --git a/apps/calendar/l10n/sr@latin.php b/apps/calendar/l10n/sr@latin.php index c261f903f76..4ceabcbae59 100644 --- a/apps/calendar/l10n/sr@latin.php +++ b/apps/calendar/l10n/sr@latin.php @@ -18,6 +18,7 @@ "Projects" => "Projekti", "Questions" => "Pitanja", "Work" => "Posao", +"New Calendar" => "Novi kalendar", "Does not repeat" => "Ne ponavlja se", "Daily" => "dnevno", "Weekly" => "nedeljno", @@ -26,15 +27,11 @@ "Monthly" => "mesečno", "Yearly" => "godišnje", "All day" => "Ceo dan", -"New Calendar" => "Novi kalendar", "Title" => "Naslov", "Week" => "Nedelja", "Month" => "Mesec", "List" => "Spisak", "Today" => "Danas", -"Calendars" => "Kalendari", -"There was a fail, while parsing the file." => "došlo je do greške pri rasčlanjivanju fajla.", -"Choose active calendars" => "Izaberite aktivne kalendare", "CalDav Link" => "KalDav veza", "Download" => "Preuzmi", "Edit" => "Uredi", @@ -59,6 +56,5 @@ "Description of the Event" => "Opis događaja", "Repeat" => "Ponavljaj", "Create a new event" => "Napravi novi događaj", -"Select category" => "Izaberite kategoriju", "Timezone" => "Vremenska zona" ); diff --git a/apps/calendar/l10n/sv.php b/apps/calendar/l10n/sv.php index 59f8c6e6b5d..4cea9073a26 100644 --- a/apps/calendar/l10n/sv.php +++ b/apps/calendar/l10n/sv.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Alla kalendrar är inte fullständigt sparade i cache", +"Everything seems to be completely cached" => "Allt verkar vara fullständigt sparat i cache", "No calendars found." => "Inga kalendrar funna", "No events found." => "Inga händelser funna.", "Wrong calendar" => "Fel kalender", +"The file contained either no events or all events are already saved in your calendar." => "Filen innehöll inga händelser eller så är alla händelser redan sparade i kalendern.", +"events has been saved in the new calendar" => "händelser har sparats i den nya kalendern", +"Import failed" => "Misslyckad import", +"events has been saved in your calendar" => "händelse har sparats i din kalender", "New Timezone:" => "Ny tidszon:", "Timezone changed" => "Tidszon ändrad", "Invalid request" => "Ogiltig begäran", "Calendar" => "Kalender", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM åååå", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "ddd, MMM d, åååå", "Birthday" => "Födelsedag", "Business" => "Företag", "Call" => "Ringa", @@ -22,7 +33,9 @@ "Projects" => "Projekt", "Questions" => "Frågor", "Work" => "Arbetet", +"by" => "av", "unnamed" => "Namn saknas", +"New Calendar" => "Ny kalender", "Does not repeat" => "Upprepas inte", "Daily" => "Dagligen", "Weekly" => "Varje vecka", @@ -67,8 +80,26 @@ "by day and month" => "efter dag och månad", "Date" => "Datum", "Cal." => "Kal.", +"Sun." => "Sön.", +"Mon." => "Mån.", +"Tue." => "Tis.", +"Wed." => "Ons.", +"Thu." => "Tor.", +"Fri." => "Fre.", +"Sat." => "Lör.", +"Jan." => "Jan.", +"Feb." => "Feb.", +"Mar." => "Mar.", +"Apr." => "Apr.", +"May." => "Maj.", +"Jun." => "Jun.", +"Jul." => "Jul.", +"Aug." => "Aug.", +"Sep." => "Sep.", +"Oct." => "Okt.", +"Nov." => "Nov.", +"Dec." => "Dec.", "All day" => "Hela dagen", -"New Calendar" => "Ny kalender", "Missing fields" => "Saknade fält", "Title" => "Rubrik", "From Date" => "Från datum", @@ -81,9 +112,6 @@ "Month" => "Månad", "List" => "Lista", "Today" => "Idag", -"Calendars" => "Kalendrar", -"There was a fail, while parsing the file." => "Det blev ett fel medan filen analyserades.", -"Choose active calendars" => "Välj aktiva kalendrar", "Your calendars" => "Dina kalendrar", "CalDav Link" => "CalDAV-länk", "Shared calendars" => "Delade kalendrar", @@ -132,10 +160,12 @@ "Interval" => "Hur ofta", "End" => "Slut", "occurrences" => "Händelser", -"Import a calendar file" => "Importera en kalenderfil", -"Please choose the calendar" => "Välj kalender", "create a new calendar" => "skapa en ny kalender", +"Import a calendar file" => "Importera en kalenderfil", +"Please choose a calendar" => "Välj en kalender", "Name of new calendar" => "Namn på ny kalender", +"Take an available name!" => "Ta ett ledigt namn!", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med detta namn finns redan. Om du fortsätter ändå så kommer dessa kalendrar att slås samman.", "Import" => "Importera", "Importing calendar" => "Importerar kalender", "Calendar imported successfully" => "Kalender importerades utan problem", @@ -143,7 +173,6 @@ "Create a new event" => "Skapa en ny händelse", "View an event" => "Visa en händelse", "No categories selected" => "Inga kategorier valda", -"Select category" => "Välj kategori", "of" => "av", "at" => "på", "Timezone" => "Tidszon", @@ -151,8 +180,13 @@ "Timeformat" => "Tidsformat", "24h" => "24h", "12h" => "12h", -"First day of the week" => "Första dagen av veckan", -"Calendar CalDAV syncing address:" => "Synkroniseringsadress för CalDAV kalender:", +"Cache" => "Cache", +"Clear cache for repeating events" => "Töm cache för upprepade händelser", +"Calendar CalDAV syncing addresses" => "Kalender CalDAV synkroniserar adresser", +"more info" => "mer info", +"Primary address (Kontact et al)" => "Primary address (Kontact et al)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Read only iCalendar link(s)", "Users" => "Användare", "select users" => "välj användare", "Editable" => "Redigerbar", diff --git a/apps/calendar/l10n/th_TH.php b/apps/calendar/l10n/th_TH.php index 8aaa7ae756a..0b92a623d40 100644 --- a/apps/calendar/l10n/th_TH.php +++ b/apps/calendar/l10n/th_TH.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "ไม่ใช่ปฏิทินทั้งหมดที่จะถูกจัดเก็บข้อมูลไว้ในหน่วยความจำแคชอย่างสมบูรณ์", +"Everything seems to be completely cached" => "ทุกสิ่งทุกอย่างได้ถูกเก็บเข้าไปไว้ในหน่วยความจำแคชอย่างสมบูรณ์แล้ว", "No calendars found." => "ไม่พบปฏิทินที่ต้องการ", "No events found." => "ไม่พบกิจกรรมที่ต้องการ", "Wrong calendar" => "ปฏิทินไม่ถูกต้อง", +"The file contained either no events or all events are already saved in your calendar." => "ไฟล์ดังกล่าวบรรจุข้อมูลกิจกรรมที่มีอยู่แล้วในปฏิทินของคุณ", +"events has been saved in the new calendar" => "กิจกรรมได้ถูกบันทึกไปไว้ในปฏิทินที่สร้างขึ้นใหม่แล้ว", +"Import failed" => "การนำเข้าข้อมูลล้มเหลว", +"events has been saved in your calendar" => "กิจกรรมได้ถูกบันทึกเข้าไปไว้ในปฏิทินของคุณแล้ว", "New Timezone:" => "สร้างโซนเวลาใหม่:", "Timezone changed" => "โซนเวลาถูกเปลี่ยนแล้ว", "Invalid request" => "คำร้องขอไม่ถูกต้อง", "Calendar" => "ปฏิทิน", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "วันเกิด", "Business" => "ธุรกิจ", "Call" => "โทรติดต่อ", @@ -22,7 +33,9 @@ "Projects" => "โครงการ", "Questions" => "คำถาม", "Work" => "งาน", +"by" => "โดย", "unnamed" => "ไม่มีชื่อ", +"New Calendar" => "สร้างปฏิทินใหม่", "Does not repeat" => "ไม่ต้องทำซ้ำ", "Daily" => "รายวัน", "Weekly" => "รายสัปดาห์", @@ -67,8 +80,26 @@ "by day and month" => "ตามวันและเดือน", "Date" => "วันที่", "Cal." => "คำนวณ", +"Sun." => "อา.", +"Mon." => "จ.", +"Tue." => "อ.", +"Wed." => "พ.", +"Thu." => "พฤ.", +"Fri." => "ศ.", +"Sat." => "ส.", +"Jan." => "ม.ค.", +"Feb." => "ก.พ.", +"Mar." => "มี.ค.", +"Apr." => "เม.ย.", +"May." => "พ.ค.", +"Jun." => "มิ.ย.", +"Jul." => "ก.ค.", +"Aug." => "ส.ค.", +"Sep." => "ก.ย.", +"Oct." => "ต.ค.", +"Nov." => "พ.ย.", +"Dec." => "ธ.ค.", "All day" => "ทั้งวัน", -"New Calendar" => "สร้างปฏิทินใหม่", "Missing fields" => "ช่องฟิลด์เกิดการสูญหาย", "Title" => "ชื่อกิจกรรม", "From Date" => "จากวันที่", @@ -81,9 +112,7 @@ "Month" => "เดือน", "List" => "รายการ", "Today" => "วันนี้", -"Calendars" => "ปฏิทิน", -"There was a fail, while parsing the file." => "เกิดความล้มเหลวในการแยกไฟล์", -"Choose active calendars" => "เลือกปฏิทินที่ต้องการใช้งาน", +"Settings" => "ตั้งค่า", "Your calendars" => "ปฏิทินของคุณ", "CalDav Link" => "ลิงค์ CalDav", "Shared calendars" => "ปฏิทินที่เปิดแชร์", @@ -132,27 +161,34 @@ "Interval" => "ช่วงเวลา", "End" => "สิ้นสุด", "occurrences" => "จำนวนที่ปรากฏ", -"Import a calendar file" => "นำเข้าไฟล์ปฏิทิน", -"Please choose the calendar" => "กรณาเลือกปฏิทิน", "create a new calendar" => "สร้างปฏิทินใหม่", +"Import a calendar file" => "นำเข้าไฟล์ปฏิทิน", +"Please choose a calendar" => "กรุณาเลือกปฏิทิน", "Name of new calendar" => "ชื่อของปฏิทิน", +"Take an available name!" => "เลือกชื่อที่ต้องการ", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "ปฏิทินชื่อดังกล่าวถูกใช้งานไปแล้ว หากคุณยังดำเนินการต่อไป ปฏิทินดังกล่าวนี้จะถูกผสานข้อมูลเข้าด้วยกัน", "Import" => "นำเข้าข้อมูล", -"Importing calendar" => "นำเข้าข้อมูลปฏิทิน", -"Calendar imported successfully" => "ปฏิทินถูกนำเข้าข้อมูลเรียบร้อยแล้ว", "Close Dialog" => "ปิดกล่องข้อความโต้ตอบ", "Create a new event" => "สร้างกิจกรรมใหม่", "View an event" => "ดูกิจกรรม", "No categories selected" => "ยังไม่ได้เลือกหมวดหมู่", -"Select category" => "เลือกหมวดหมู่", "of" => "ของ", "at" => "ที่", +"General" => "ทั่วไป", "Timezone" => "โซนเวลา", -"Check always for changes of the timezone" => "ตรวจสอบการเปลี่ยนแปลงโซนเวลาอยู่เสมอ", -"Timeformat" => "รูปแบบการแสดงเวลา", +"Update timezone automatically" => "อัพเดทโซนเวลาอัตโนมัติ", +"Time format" => "รูปแบบเวลา", "24h" => "24 ช.ม.", "12h" => "12 ช.ม.", -"First day of the week" => "วันแรกของสัปดาห์", -"Calendar CalDAV syncing address:" => "ที่อยู่ในการเชื่อมข้อมูลกับปฏิทิน CalDav:", +"Start week on" => "เริ่มต้นสัปดาห์ด้วย", +"Cache" => "หน่วยความจำแคช", +"Clear cache for repeating events" => "ล้างข้อมูลในหน่วยความจำแคชสำหรับกิจกรรมที่ซ้ำซ้อน", +"URLs" => "URLs", +"Calendar CalDAV syncing addresses" => "ที่อยู่ที่ใช้สำหรับเชื่อมข้อมูลปฏิทิน CalDAV", +"more info" => "ข้อมูลเพิ่มเติม", +"Primary address (Kontact et al)" => "ที่อยู่หลัก (Kontact et al)", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "อ่านเฉพาะลิงก์ iCalendar เท่านั้น", "Users" => "ผู้ใช้งาน", "select users" => "เลือกผู้ใช้งาน", "Editable" => "สามารถแก้ไขได้", diff --git a/apps/calendar/l10n/tr.php b/apps/calendar/l10n/tr.php index a72e4c39f6d..b9256eb619e 100644 --- a/apps/calendar/l10n/tr.php +++ b/apps/calendar/l10n/tr.php @@ -1,12 +1,23 @@ <?php $TRANSLATIONS = array( +"Not all calendars are completely cached" => "Bütün takvimler tamamen ön belleğe alınmadı", +"Everything seems to be completely cached" => "Bütün herşey tamamen ön belleğe alınmış görünüyor", "No calendars found." => "Takvim yok.", "No events found." => "Etkinlik yok.", "Wrong calendar" => "Yanlış takvim", +"The file contained either no events or all events are already saved in your calendar." => "Dosya ya hiçbir etkinlik içermiyor veya bütün etkinlikler takviminizde zaten saklı.", +"events has been saved in the new calendar" => "Etkinlikler yeni takvimde saklandı", +"Import failed" => "İçeri aktarma başarısız oldu.", +"events has been saved in your calendar" => "Etkinlikler takviminizde saklandı", "New Timezone:" => "Yeni Zamandilimi:", "Timezone changed" => "Zaman dilimi değiştirildi", "Invalid request" => "Geçersiz istek", "Calendar" => "Takvim", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "AAA g[ yyyy]{ '—'[ AAA] g yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", "Birthday" => "Doğum günü", "Business" => "İş", "Call" => "Arama", @@ -22,7 +33,9 @@ "Projects" => "Projeler", "Questions" => "Sorular", "Work" => "İş", +"by" => "hazırlayan", "unnamed" => "isimsiz", +"New Calendar" => "Yeni Takvim", "Does not repeat" => "Tekrar etmiyor", "Daily" => "Günlük", "Weekly" => "Haftalı", @@ -67,8 +80,26 @@ "by day and month" => "gün ve aya göre", "Date" => "Tarih", "Cal." => "Takv.", +"Sun." => "Paz.", +"Mon." => "Pzt.", +"Tue." => "Sal.", +"Wed." => "Çar.", +"Thu." => "Per.", +"Fri." => "Cum.", +"Sat." => "Cmt.", +"Jan." => "Oca.", +"Feb." => "Şbt.", +"Mar." => "Mar.", +"Apr." => "Nis", +"May." => "May.", +"Jun." => "Haz.", +"Jul." => "Tem.", +"Aug." => "Agu.", +"Sep." => "Eyl.", +"Oct." => "Eki.", +"Nov." => "Kas.", +"Dec." => "Ara.", "All day" => "Tüm gün", -"New Calendar" => "Yeni Takvim", "Missing fields" => "Eksik alanlar", "Title" => "Başlık", "From Date" => "Bu Tarihten", @@ -81,9 +112,6 @@ "Month" => "Ay", "List" => "Liste", "Today" => "Bugün", -"Calendars" => "Takvimler", -"There was a fail, while parsing the file." => "Dosya okunurken başarısızlık oldu.", -"Choose active calendars" => "Aktif takvimleri seçin", "Your calendars" => "Takvimleriniz", "CalDav Link" => "CalDav Bağlantısı", "Shared calendars" => "Paylaşılan", @@ -132,27 +160,29 @@ "Interval" => "Aralık", "End" => "Son", "occurrences" => "olaylar", -"Import a calendar file" => "Takvim dosyasını içeri aktar", -"Please choose the calendar" => "Lütfen takvimi seçin", "create a new calendar" => "Yeni bir takvim oluştur", +"Import a calendar file" => "Takvim dosyasını içeri aktar", +"Please choose a calendar" => "Lütfen takvim seçiniz", "Name of new calendar" => "Yeni takvimin adı", +"Take an available name!" => "Müsait ismi al !", +"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Bu isimde bir takvim zaten mevcut. Yine de devam ederseniz bu takvimler birleştirilecektir.", "Import" => "İçe Al", -"Importing calendar" => "Takvim içe aktarılıyor", -"Calendar imported successfully" => "Takvim başarıyla içe aktarıldı", "Close Dialog" => "Diyalogu kapat", "Create a new event" => "Yeni olay oluştur", "View an event" => "Bir olay görüntüle", "No categories selected" => "Kategori seçilmedi", -"Select category" => "Kategori seçin", "of" => "nın", "at" => "üzerinde", "Timezone" => "Zaman dilimi", -"Check always for changes of the timezone" => "Sürekli zaman dilimi değişikliklerini kontrol et", -"Timeformat" => "Saat biçimi", "24h" => "24s", "12h" => "12s", -"First day of the week" => "Haftanın ilk günü", -"Calendar CalDAV syncing address:" => "CalDAV Takvim eşzamanlama adresi:", +"Cache" => "Önbellek", +"Clear cache for repeating events" => "Tekrar eden etkinlikler için ön belleği temizle.", +"Calendar CalDAV syncing addresses" => "CalDAV takvimi adresleri senkronize ediyor.", +"more info" => "daha fazla bilgi", +"Primary address (Kontact et al)" => "Öncelikli adres", +"iOS/OS X" => "iOS/OS X", +"Read only iCalendar link(s)" => "Sadece okunabilir iCalendar link(ler)i", "Users" => "Kullanıcılar", "select users" => "kullanıcıları seç", "Editable" => "Düzenlenebilir", diff --git a/apps/calendar/l10n/uk.php b/apps/calendar/l10n/uk.php index 892896742da..2911307e588 100644 --- a/apps/calendar/l10n/uk.php +++ b/apps/calendar/l10n/uk.php @@ -16,6 +16,7 @@ "Projects" => "Проекти", "Questions" => "Запитання", "Work" => "Робота", +"New Calendar" => "новий Календар", "Does not repeat" => "Не повторювати", "Daily" => "Щоденно", "Weekly" => "Щотижня", @@ -52,21 +53,29 @@ "Date" => "Дата", "Cal." => "Кал.", "All day" => "Увесь день", -"New Calendar" => "новий Календар", +"Missing fields" => "Пропущені поля", "Title" => "Назва", +"From Date" => "Від Дати", +"From Time" => "З Часу", +"To Date" => "До Часу", +"To Time" => "По Дату", +"The event ends before it starts" => "Подія завершається до її початку", +"There was a database fail" => "Сталася помилка бази даних", "Week" => "Тиждень", "Month" => "Місяць", "List" => "Список", "Today" => "Сьогодні", -"Calendars" => "Календарі", -"There was a fail, while parsing the file." => "Сталася помилка при обробці файлу", -"Choose active calendars" => "Вибрати активні календарі", +"Your calendars" => "Ваші календарі", "Download" => "Завантажити", "Edit" => "Редагувати", +"Delete" => "Видалити", "New calendar" => "Новий календар", "Edit calendar" => "Редагувати календар", "Active" => "Активний", "Calendar color" => "Колір календаря", +"Save" => "Зберегти", +"Cancel" => "Відмінити", +"Export" => "Експорт", "Title of the Event" => "Назва події", "Category" => "Категорія", "From" => "З", @@ -76,14 +85,14 @@ "Description" => "Опис", "Description of the Event" => "Опис події", "Repeat" => "Повторювати", -"Import a calendar file" => "Імпортувати файл календаря", "create a new calendar" => "створити новий календар", +"Import a calendar file" => "Імпортувати файл календаря", "Name of new calendar" => "Назва нового календаря", -"Calendar imported successfully" => "Календар успішно імпортовано", +"Import" => "Імпорт", "Create a new event" => "Створити нову подію", "Timezone" => "Часовий пояс", -"Timeformat" => "Формат часу", "24h" => "24г", "12h" => "12г", -"Calendar CalDAV syncing address:" => "Адреса синхронізації календаря CalDAV:" +"Users" => "Користувачі", +"Groups" => "Групи" ); diff --git a/apps/calendar/l10n/vi.php b/apps/calendar/l10n/vi.php new file mode 100644 index 00000000000..3594a095eba --- /dev/null +++ b/apps/calendar/l10n/vi.php @@ -0,0 +1,131 @@ +<?php $TRANSLATIONS = array( +"No calendars found." => "Không tìm thấy lịch.", +"No events found." => "Không tìm thấy sự kiện nào", +"Wrong calendar" => "Sai lịch", +"New Timezone:" => "Múi giờ mới :", +"Timezone changed" => "Thay đổi múi giờ", +"Invalid request" => "Yêu cầu không hợp lệ", +"Calendar" => "Lịch", +"ddd" => "ddd", +"ddd M/d" => "ddd M/d", +"dddd M/d" => "dddd M/d", +"MMMM yyyy" => "MMMM yyyy", +"MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", +"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy", +"Birthday" => "Ngày sinh nhật", +"Business" => "Công việc", +"Call" => "Số điện thoại", +"Clients" => "Máy trạm", +"Holidays" => "Ngày lễ", +"Ideas" => "Ý tưởng", +"Jubilee" => "Lễ kỷ niệm", +"Meeting" => "Hội nghị", +"Other" => "Khác", +"Personal" => "Cá nhân", +"Projects" => "Dự án", +"Questions" => "Câu hỏi", +"Work" => "Công việc", +"New Calendar" => "Lịch mới", +"Does not repeat" => "Không lặp lại", +"Daily" => "Hàng ngày", +"Weekly" => "Hàng tuần", +"Every Weekday" => "Mỗi ngày trong tuần", +"Bi-Weekly" => "Hai tuần một lần", +"Monthly" => "Hàng tháng", +"Yearly" => "Hàng năm", +"never" => "không thay đổi", +"by occurrences" => "bởi xuất hiện", +"by date" => "bởi ngày", +"by monthday" => "bởi ngày trong tháng", +"by weekday" => "bởi ngày trong tuần", +"Monday" => "Thứ 2", +"Tuesday" => "Thứ 3", +"Wednesday" => "Thứ 4", +"Thursday" => "Thứ 5", +"Friday" => "Thứ ", +"Saturday" => "Thứ 7", +"Sunday" => "Chủ nhật", +"events week of month" => "sự kiện trong tuần của tháng", +"first" => "đầu tiên", +"second" => "Thứ hai", +"third" => "Thứ ba", +"fourth" => "Thứ tư", +"fifth" => "Thứ năm", +"January" => "Tháng 1", +"February" => "Tháng 2", +"March" => "Tháng 3", +"April" => "Tháng 4", +"May" => "Tháng 5", +"June" => "Tháng 6", +"July" => "Tháng 7", +"August" => "Tháng 8", +"September" => "Tháng 9", +"October" => "Tháng 10", +"November" => "Tháng 11", +"December" => "Tháng 12", +"by events date" => "Theo ngày tháng sự kiện", +"by weeknumber(s)" => "số tuần", +"by day and month" => "ngày, tháng", +"Date" => "Ngày", +"Cal." => "Cal.", +"All day" => "Tất cả các ngày", +"Title" => "Tiêu đề", +"From Date" => "Từ ngày", +"From Time" => "Từ thời gian", +"To Date" => "Tới ngày", +"To Time" => "Tới thời gian", +"The event ends before it starts" => "Sự kiện này kết thúc trước khi nó bắt đầu", +"Week" => "Tuần", +"Month" => "Tháng", +"List" => "Danh sách", +"Today" => "Hôm nay", +"Your calendars" => "Lịch của bạn", +"CalDav Link" => "Liên kết CalDav ", +"Shared calendars" => "Chia sẻ lịch", +"No shared calendars" => "Không chia sẻ lcihj", +"Share Calendar" => "Chia sẻ lịch", +"Download" => "Tải về", +"Edit" => "Chỉnh sửa", +"Delete" => "Xóa", +"shared with you by" => "Chia sẻ bởi", +"New calendar" => "Lịch mới", +"Edit calendar" => "sửa Lịch", +"Displayname" => "Hiển thị tên", +"Active" => "Kích hoạt", +"Calendar color" => "Màu lịch", +"Save" => "Lưu", +"Submit" => "Submit", +"Cancel" => "Hủy", +"Edit an event" => "Sửa sự kiện", +"Share" => "Chia sẻ", +"Title of the Event" => "Tên sự kiện", +"Category" => "Danh mục", +"All Day Event" => "Sự kiện trong ngày", +"From" => "Từ", +"To" => "Tới", +"Advanced options" => "Tùy chọn nâng cao", +"Location" => "Nơi", +"Location of the Event" => "Nơi tổ chức sự kiện", +"Description" => "Mô tả", +"Description of the Event" => "Mô tả sự kiện", +"Repeat" => "Lặp lại", +"Advanced" => "Nâng cao", +"Select weekdays" => "Chọn ngày trong tuần", +"Select days" => "Chọn ngày", +"and the events day of year." => "và sự kiện của ngày trong năm", +"and the events day of month." => "và sự kiện của một ngày trong năm", +"Select months" => "Chọn tháng", +"Select weeks" => "Chọn tuần", +"and the events week of year." => "và sự kiện của tuần trong năm.", +"create a new calendar" => "Tạo lịch mới", +"Name of new calendar" => "Tên lịch mới", +"Close Dialog" => "Đóng hộp thoại", +"Create a new event" => "Tạo một sự kiện mới", +"View an event" => "Xem một sự kiện", +"No categories selected" => "Không danh sách nào được chọn", +"of" => "của", +"at" => "tại", +"Timezone" => "Múi giờ", +"24h" => "24h", +"12h" => "12h" +); diff --git a/apps/calendar/l10n/zh_CN.GB2312.php b/apps/calendar/l10n/zh_CN.GB2312.php new file mode 100644 index 00000000000..38f039e6611 --- /dev/null +++ b/apps/calendar/l10n/zh_CN.GB2312.php @@ -0,0 +1,121 @@ +<?php $TRANSLATIONS = array( +"Wrong calendar" => "错误的日历", +"New Timezone:" => "新时区", +"Timezone changed" => "时区改变了", +"Invalid request" => "非法请求", +"Calendar" => "日历", +"Birthday" => "生日", +"Business" => "商务", +"Call" => "呼叫", +"Clients" => "客户端", +"Deliverer" => "交付者", +"Holidays" => "假期", +"Ideas" => "灵感", +"Journey" => "旅行", +"Jubilee" => "五十年纪念", +"Meeting" => "会面", +"Other" => "其它", +"Personal" => "个人的", +"Projects" => "项目", +"Questions" => "问题", +"Work" => "工作", +"New Calendar" => "新的日历", +"Does not repeat" => "不要重复", +"Daily" => "每天", +"Weekly" => "每星期", +"Every Weekday" => "每个周末", +"Bi-Weekly" => "每两周", +"Monthly" => "每个月", +"Yearly" => "每年", +"never" => "从不", +"by occurrences" => "根据发生时", +"by date" => "根据日期", +"by monthday" => "根据月天", +"by weekday" => "根据星期", +"Monday" => "星期一", +"Tuesday" => "星期二", +"Wednesday" => "星期三", +"Thursday" => "星期四", +"Friday" => "星期五", +"Saturday" => "星期六", +"Sunday" => "星期天", +"events week of month" => "时间每月发生的周数", +"first" => "首先", +"second" => "其次", +"third" => "第三", +"fourth" => "第四", +"fifth" => "第五", +"last" => "最后", +"January" => "一月", +"February" => "二月", +"March" => "三月", +"April" => "四月", +"May" => "五月", +"June" => "六月", +"July" => "七月", +"August" => "八月", +"September" => "九月", +"October" => "十月", +"November" => "十一月", +"December" => "十二月", +"by events date" => "根据时间日期", +"by yearday(s)" => "根据年数", +"by weeknumber(s)" => "根据周数", +"by day and month" => "根据天和月", +"Date" => "日期", +"Cal." => "Cal.", +"All day" => "整天", +"Missing fields" => "丢失的输入框", +"Title" => "标题", +"From Date" => "从日期", +"From Time" => "从时间", +"To Date" => "到日期", +"To Time" => "到时间", +"The event ends before it starts" => "在它开始前需要结束的事件", +"There was a database fail" => "发生了一个数据库失败", +"Week" => "星期", +"Month" => "月", +"List" => "列表", +"Today" => "今天", +"CalDav Link" => "CalDav 链接", +"Download" => "下载", +"Edit" => "编辑", +"Delete" => "删除", +"New calendar" => "新的日历", +"Edit calendar" => "编辑日历", +"Displayname" => "显示名称", +"Active" => "活动", +"Calendar color" => "日历颜色", +"Save" => "保存", +"Submit" => "提交", +"Cancel" => " 取消", +"Edit an event" => "编辑一个事件", +"Export" => "导出", +"Title of the Event" => "事件的标题", +"Category" => "分类", +"All Day Event" => "每天的事件", +"From" => "从", +"To" => "到", +"Advanced options" => "进阶选项", +"Location" => "地点", +"Location of the Event" => "事件的地点", +"Description" => "解释", +"Description of the Event" => "事件描述", +"Repeat" => "重复", +"Advanced" => "进阶", +"Select weekdays" => "选择星期", +"Select days" => "选择日", +"and the events day of year." => "选择每年时间发生天数", +"and the events day of month." => "选择每个月事件发生的天", +"Select months" => "选择月份", +"Select weeks" => "选择星期", +"and the events week of year." => "每年时间发生的星期", +"Interval" => "间隔", +"End" => "结束", +"occurrences" => "发生", +"Import" => "导入", +"Create a new event" => "新建一个时间", +"Timezone" => "时区", +"24h" => "24小时", +"12h" => "12小时" +); diff --git a/apps/calendar/l10n/zh_CN.php b/apps/calendar/l10n/zh_CN.php index bb7e0a28724..add84588d35 100644 --- a/apps/calendar/l10n/zh_CN.php +++ b/apps/calendar/l10n/zh_CN.php @@ -6,6 +6,7 @@ "Timezone changed" => "时区已修改", "Invalid request" => "非法请求", "Calendar" => "日历", +"ddd" => "ddd", "MMM d[ yyyy]{ '—'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '—'[ MMM] d yyyy}", "Birthday" => "生日", "Business" => "商务", @@ -23,6 +24,7 @@ "Questions" => "问题", "Work" => "工作", "unnamed" => "未命名", +"New Calendar" => "新日历", "Does not repeat" => "不重复", "Daily" => "每天", "Weekly" => "每周", @@ -68,7 +70,6 @@ "Date" => "日期", "Cal." => "日历", "All day" => "全天", -"New Calendar" => "新日历", "Missing fields" => "缺少字段", "Title" => "标题", "From Date" => "从", @@ -132,6 +133,7 @@ "Interval" => "间隔", "End" => "结束", "occurrences" => "次", +"create a new calendar" => "创建新日历", "Import a calendar file" => "导入日历文件", "Please choose the calendar" => "请选择日历", "create a new calendar" => "创建新日历", @@ -143,7 +145,6 @@ "Create a new event" => "创建新事件", "View an event" => "查看事件", "No categories selected" => "无选中分类", -"Select category" => "选择分类", "of" => "在", "at" => "在", "Timezone" => "时区", diff --git a/apps/calendar/l10n/zh_TW.php b/apps/calendar/l10n/zh_TW.php index 746594462c4..48897b8ca06 100644 --- a/apps/calendar/l10n/zh_TW.php +++ b/apps/calendar/l10n/zh_TW.php @@ -23,6 +23,7 @@ "Questions" => "問題", "Work" => "工作", "unnamed" => "無名稱的", +"New Calendar" => "新日曆", "Does not repeat" => "不重覆", "Daily" => "每日", "Weekly" => "每週", @@ -68,7 +69,6 @@ "Date" => "日期", "Cal." => "行事曆", "All day" => "整天", -"New Calendar" => "新日曆", "Missing fields" => "遺失欄位", "Title" => "標題", "From Date" => "自日期", @@ -81,9 +81,6 @@ "Month" => "月", "List" => "清單", "Today" => "今日", -"Calendars" => "日曆", -"There was a fail, while parsing the file." => "解析檔案時失敗。", -"Choose active calendars" => "選擇一個作用中的日曆", "Your calendars" => "你的行事曆", "CalDav Link" => "CalDav 聯結", "Shared calendars" => "分享的行事曆", @@ -132,6 +129,7 @@ "Interval" => "間隔", "End" => "結束", "occurrences" => "事件", +"create a new calendar" => "建立新日曆", "Import a calendar file" => "匯入日曆檔案", "Please choose the calendar" => "請選擇日曆", "create a new calendar" => "建立新日曆", @@ -143,7 +141,6 @@ "Create a new event" => "建立一個新事件", "View an event" => "觀看一個活動", "No categories selected" => "沒有選擇分類", -"Select category" => "選擇分類", "of" => "於", "at" => "於", "Timezone" => "時區", @@ -151,7 +148,6 @@ "Timeformat" => "日期格式", "24h" => "24小時制", "12h" => "12小時制", -"First day of the week" => "每週的第一天", "Calendar CalDAV syncing address:" => "CalDAV 的日曆同步地址:", "Users" => "使用者", "select users" => "選擇使用者", diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php index 6c55bd19884..8bdb54f4867 100644 --- a/apps/calendar/lib/app.php +++ b/apps/calendar/lib/app.php @@ -9,26 +9,26 @@ * This class manages our app actions */ OC_Calendar_App::$l10n = new OC_L10N('calendar'); -OC_Calendar_App::$tz = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get()); +OC_Calendar_App::$tz = OC_Calendar_App::getTimezone(); class OC_Calendar_App{ const CALENDAR = 'calendar'; const EVENT = 'event'; - /* + /** * @brief language object for calendar app */ public static $l10n; - /* + /** * @brief categories of the user */ protected static $categories = null; - /* + /** * @brief timezone of the user */ public static $tz; - /* + /** * @brief returns informations about a calendar * @param int $id - id of the calendar * @param bool $security - check access rights or not @@ -50,13 +50,10 @@ class OC_Calendar_App{ return false; } } - if($calendar === false){ - return false; - } - return OC_Calendar_Calendar::find($id); + return $calendar; } - /* + /** * @brief returns informations about an event * @param int $id - id of the event * @param bool $security - check access rights or not @@ -82,7 +79,7 @@ class OC_Calendar_App{ return $event; } - /* + /** * @brief returns the parsed calendar data * @param int $id - id of the event * @param bool $security - check access rights or not @@ -100,7 +97,7 @@ class OC_Calendar_App{ return $vobject; } - /* + /** * @brief checks if an event was edited and dies if it was * @param (object) $vevent - vevent object of the event * @param (int) $lastmodified - time of last modification as unix timestamp @@ -115,12 +112,11 @@ class OC_Calendar_App{ return true; } - /* + /** * @brief returns the default categories of ownCloud * @return (array) $categories */ - protected static function getDefaultCategories() - { + protected static function getDefaultCategories(){ return array( self::$l10n->t('Birthday'), self::$l10n->t('Business'), @@ -140,7 +136,7 @@ class OC_Calendar_App{ ); } - /* + /** * @brief returns the vcategories object of the user * @return (object) $vcategories */ @@ -151,12 +147,11 @@ class OC_Calendar_App{ return self::$categories; } - /* + /** * @brief returns the categories of the vcategories object * @return (array) $categories */ - public static function getCategoryOptions() - { + public static function getCategoryOptions(){ $categories = self::getVCategories()->categories(); return $categories; } @@ -199,17 +194,24 @@ class OC_Calendar_App{ } else if (isset($calendar->VTODO)) { $object = $calendar->VTODO; + } else + if (isset($calendar->VJOURNAL)) { + $object = $calendar->VJOURNAL; } if ($object) { self::getVCategories()->loadFromVObject($object, true); } } - + + /** + * @brief returns the options for the repeat rule of an repeating event + * @return array - valid inputs for the repeat rule of an repeating event + */ public static function getRepeatOptions(){ return OC_Calendar_Object::getRepeatOptions(self::$l10n); } - /* + /** * @brief returns the options for the end of an repeating event * @return array - valid inputs for the end of an repeating events */ @@ -217,7 +219,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getEndOptions(self::$l10n); } - /* + /** * @brief returns the options for an monthly repeating event * @return array - valid inputs for monthly repeating events */ @@ -225,7 +227,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getMonthOptions(self::$l10n); } - /* + /** * @brief returns the options for an weekly repeating event * @return array - valid inputs for weekly repeating events */ @@ -233,7 +235,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getWeeklyOptions(self::$l10n); } - /* + /** * @brief returns the options for an yearly repeating event * @return array - valid inputs for yearly repeating events */ @@ -241,7 +243,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getYearOptions(self::$l10n); } - /* + /** * @brief returns the options for an yearly repeating event which occurs on specific days of the year * @return array - valid inputs for yearly repeating events */ @@ -249,7 +251,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getByYearDayOptions(); } - /* + /** * @brief returns the options for an yearly repeating event which occurs on specific month of the year * @return array - valid inputs for yearly repeating events */ @@ -257,7 +259,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getByMonthOptions(self::$l10n); } - /* + /** * @brief returns the options for an yearly repeating event which occurs on specific week numbers of the year * @return array - valid inputs for yearly repeating events */ @@ -265,7 +267,7 @@ class OC_Calendar_App{ return OC_Calendar_Object::getByWeekNoOptions(); } - /* + /** * @brief returns the options for an yearly or monthly repeating event which occurs on specific days of the month * @return array - valid inputs for yearly or monthly repeating events */ @@ -273,15 +275,25 @@ class OC_Calendar_App{ return OC_Calendar_Object::getByMonthDayOptions(); } - /* + /** * @brief returns the options for an monthly repeating event which occurs on specific weeks of the month * @return array - valid inputs for monthly repeating events */ public static function getWeekofMonth(){ return OC_Calendar_Object::getWeekofMonth(self::$l10n); } - - /* + + /** + * @return (string) $timezone as set by user or the default timezone + */ + public static function getTimezone() { + return OCP\Config::getUserValue(OCP\User::getUser(), + 'calendar', + 'timezone', + date_default_timezone_get()); + } + + /** * @brief checks the access for a calendar / an event * @param (int) $id - id of the calendar / event * @param (string) $type - type of the id (calendar/event) @@ -322,7 +334,7 @@ class OC_Calendar_App{ } } - /* + /** * @brief analyses the parameter for calendar parameter and returns the objects * @param (string) $calendarid - calendarid * @param (int) $start - unixtimestamp of start @@ -362,97 +374,62 @@ class OC_Calendar_App{ return $events; } - /* + /** * @brief generates the output for an event which will be readable for our js * @param (mixed) $event - event object / array - * @param (int) $start - unixtimestamp of start - * @param (int) $end - unixtimestamp of end + * @param (int) $start - DateTime object of start + * @param (int) $end - DateTime object of end * @return (array) $output - readable output */ public static function generateEventOutput($event, $start, $end){ - $output = array(); - - if(isset($event['calendardata'])){ - $object = OC_VObject::parse($event['calendardata']); - $vevent = $object->VEVENT; - }else{ - $vevent = $event['vevent']; + if(!isset($event['calendardata']) && !isset($event['vevent'])){ + return false; } - + if(!isset($event['calendardata']) && isset($event['vevent'])){ + $event['calendardata'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud's Internal iCal System\n" . $event['vevent']->serialize() . "END:VCALENDAR"; + } + $object = OC_VObject::parse($event['calendardata']); + $vevent = $object->VEVENT; + $return = array(); + $id = $event['id']; + $allday = ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false; $last_modified = @$vevent->__get('LAST-MODIFIED'); $lastmodified = ($last_modified)?$last_modified->getDateTime()->format('U'):0; - - $output = array('id'=>(int)$event['id'], + $staticoutput = array('id'=>(int)$event['id'], 'title' => ($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed'), 'description' => isset($vevent->DESCRIPTION)?$vevent->DESCRIPTION->value:'', - 'lastmodified'=>$lastmodified); - - $dtstart = $vevent->DTSTART; - $start_dt = $dtstart->getDateTime(); - $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent); - $end_dt = $dtend->getDateTime(); - - if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){ - $output['allDay'] = true; - }else{ - $output['allDay'] = false; - $start_dt->setTimezone(new DateTimeZone(self::$tz)); - $end_dt->setTimezone(new DateTimeZone(self::$tz)); - } - - // Handle exceptions to recurring events - $exceptionDateObjects = $vevent->select('EXDATE'); - $exceptionDateMap = Array(); - foreach ($exceptionDateObjects as $exceptionObject) { - foreach($exceptionObject->getDateTimes() as $datetime) { - $ts = $datetime->getTimestamp(); - $exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)] = true; - } - } - - $return = array(); - if($event['repeating'] == 1){ - $duration = (double) $end_dt->format('U') - (double) $start_dt->format('U'); - $r = new When(); - $r->recur($start_dt)->rrule((string) $vevent->RRULE); - /*$r = new iCal_Repeat_Generator(array('RECUR' => $start_dt, - * 'RRULE' => (string)$vevent->RRULE - * 'RDATE' => (string)$vevent->RDATE - * 'EXRULE' => (string)$vevent->EXRULE - * 'EXDATE' => (string)$vevent->EXDATE));*/ - while($result = $r->next()){ - if($result < $start){ - continue; - } - if($result > $end){ - break; - } - // Check for exceptions to recurring events - $ts = $result->getTimestamp(); - if (isset($exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)])) { - continue; - } - unset($ts); - - if($output['allDay'] == true){ - $output['start'] = $result->format('Y-m-d'); - $output['end'] = date('Y-m-d', $result->format('U') + --$duration); + 'lastmodified'=>$lastmodified, + 'allDay'=>$allday); + if(OC_Calendar_Object::isrepeating($id) && OC_Calendar_Repeat::is_cached_inperiod($event['id'], $start, $end)){ + $cachedinperiod = OC_Calendar_Repeat::get_inperiod($id, $start, $end); + foreach($cachedinperiod as $cachedevent){ + $dynamicoutput = array(); + if($allday){ + $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); + $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); + $dynamicoutput['start'] = $start_dt->format('Y-m-d'); + $dynamicoutput['end'] = $end_dt->format('Y-m-d'); }else{ - $output['start'] = $result->format('Y-m-d H:i:s'); - $output['end'] = date('Y-m-d H:i:s', $result->format('U') + $result->format('Z') + $duration); + $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC')); + $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC')); + $start_dt->setTimezone(new DateTimeZone(self::$tz)); + $end_dt->setTimezone(new DateTimeZone(self::$tz)); + $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s'); + $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s'); } - $return[] = $output; + $return[] = array_merge($staticoutput, $dynamicoutput); } }else{ - if($output['allDay'] == true){ - $output['start'] = $start_dt->format('Y-m-d'); - $end_dt->modify('-1 sec'); - $output['end'] = $end_dt->format('Y-m-d'); - }else{ - $output['start'] = $start_dt->format('Y-m-d H:i:s'); - $output['end'] = $end_dt->format('Y-m-d H:i:s'); + if(OC_Calendar_Object::isrepeating($id) || $event['repeating'] == 1){ + $object->expand($start, $end); + } + foreach($object->getComponents() as $singleevent){ + if(!($singleevent instanceof Sabre_VObject_Component_VEvent)){ + continue; + } + $dynamicoutput = OC_Calendar_Object::generateStartEndDate($singleevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($singleevent), $allday, self::$tz); + $return[] = array_merge($staticoutput, $dynamicoutput); } - $return[] = $output; } return $return; } diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php index 09cbee204dc..f8f5aab3636 100644 --- a/apps/calendar/lib/calendar.php +++ b/apps/calendar/lib/calendar.php @@ -5,24 +5,11 @@ * later. * See the COPYING-README file. */ -/* +/** * * The following SQL statement is just a help for developers and will not be * executed! * - * CREATE TABLE calendar_objects ( - * id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, - * calendarid INTEGER UNSIGNED NOT NULL, - * objecttype VARCHAR(40) NOT NULL, - * startdate DATETIME, - * enddate DATETIME, - * repeating INT(1), - * summary VARCHAR(255), - * calendardata TEXT, - * uri VARCHAR(100), - * lastmodified INT(11) - * ); - * * CREATE TABLE calendar_calendars ( * id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, * userid VARCHAR(255), @@ -35,6 +22,7 @@ * timezone TEXT, * components VARCHAR(20) * ); + * */ /** @@ -44,10 +32,10 @@ class OC_Calendar_Calendar{ /** * @brief Returns the list of calendars for a specific user. * @param string $uid User ID - * @param boolean $active Only return calendars with this $active state, default(=null) is don't care + * @param boolean $active Only return calendars with this $active state, default(=false) is don't care * @return array */ - public static function allCalendars($uid, $active=null){ + public static function allCalendars($uid, $active=false){ $values = array($uid); $active_where = ''; if (!is_null($active) && $active){ @@ -109,7 +97,10 @@ class OC_Calendar_Calendar{ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' ); $result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components)); - return OCP\DB::insertid('*PREFIX*calendar_calendars'); + $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars'); + OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid); + + return $insertid; } /** @@ -129,7 +120,10 @@ class OC_Calendar_Calendar{ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' ); $result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components)); - return OCP\DB::insertid('*PREFIX*calendar_calendars'); + $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars'); + OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid); + + return $insertid; } /** @@ -158,6 +152,7 @@ class OC_Calendar_Calendar{ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*calendar_calendars` SET `displayname`=?,`calendarorder`=?,`calendarcolor`=?,`timezone`=?,`components`=?,`ctag`=`ctag`+1 WHERE `id`=?' ); $result = $stmt->execute(array($name,$order,$color,$timezone,$components,$id)); + OCP\Util::emitHook('OC_Calendar', 'editCalendar', $id); return true; } @@ -198,9 +193,27 @@ class OC_Calendar_Calendar{ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid` = ?' ); $stmt->execute(array($id)); + OCP\Util::emitHook('OC_Calendar', 'deleteCalendar', $id); + if(count(self::allCalendars(OCP\USER::getUser())) == 0) { + self::addCalendar(OCP\USER::getUser(),'Default calendar'); + } + return true; } - + + /** + * @brief merges two calendars + * @param integer $id1 + * @param integer $id2 + * @return boolean + */ + public static function mergeCalendar($id1, $id2){ + $stmt = OCP\DB::prepare('UPDATE `*PREFIX*calendar_objects` SET `calendarid` = ? WHERE `calendarid` = ?'); + $stmt->execute(array($id1, $id2)); + self::touchCalendar($id1); + self::deleteCalendar($id2); + } + /** * @brief Creates a URI for Calendar * @param string $name name of the calendar @@ -226,6 +239,11 @@ class OC_Calendar_Calendar{ list($prefix,$userid) = Sabre_DAV_URLUtil::splitPath($principaluri); return $userid; } + + /** + * @brief returns the possible color for calendars + * @return array + */ public static function getCalendarColorOptions(){ return array( '#ff0000', // "Red" @@ -239,13 +257,52 @@ class OC_Calendar_Calendar{ ); } + /** + * @brief generates the Event Source Info for our JS + * @param array $calendar calendar data + * @return array + */ public static function getEventSourceInfo($calendar){ return array( 'url' => OCP\Util::linkTo('calendar', 'ajax/events.php').'?calendar_id='.$calendar['id'], 'backgroundColor' => $calendar['calendarcolor'], 'borderColor' => '#888', - 'textColor' => 'black', + 'textColor' => self::generateTextColor($calendar['calendarcolor']), 'cache' => true, ); } + + /* + * @brief checks if a calendar name is available for a user + * @param string $calendarname + * @param string $userid + * @return boolean + */ + public static function isCalendarNameavailable($calendarname, $userid){ + $calendars = self::allCalendars($userid); + foreach($calendars as $calendar){ + if($calendar['displayname'] == $calendarname){ + return false; + } + } + return true; + } + + /* + * @brief generates the text color for the calendar + * @param string $calendarcolor rgb calendar color code in hex format (with or without the leading #) + * (this function doesn't pay attention on the alpha value of rgba color codes) + * @return boolean + */ + public static function generateTextColor($calendarcolor){ + if(substr_count($calendarcolor, '#') == 1){ + $calendarcolor = substr($calendarcolor,1); + } + $red = hexdec(substr($calendarcolor,0,2)); + $green = hexdec(substr($calendarcolor,2,2)); + $blue = hexdec(substr($calendarcolor,2,2)); + //recommendation by W3C + $computation = ((($red * 299) + ($green * 587) + ($blue * 114)) / 1000); + return ($computation > 130)?'#000000':'#FAFAFA'; + } } diff --git a/apps/calendar/lib/export.php b/apps/calendar/lib/export.php new file mode 100644 index 00000000000..8f26891f366 --- /dev/null +++ b/apps/calendar/lib/export.php @@ -0,0 +1,94 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +/** + * This class does export and converts all times to UTC + */ +class OC_Calendar_Export{ + /** + * @brief Use one of these constants as second parameter if you call OC_Calendar_Export::export() + */ + const CALENDAR = 'calendar'; + const EVENT = 'event'; + + /** + * @brief export a calendar or an event + * @param integer $id id of calendar / event + * @param string $type use OC_Calendar_Export constants + * @return string + */ + public static function export($id, $type){ + if($type == self::EVENT){ + $return = self::event($id); + }else{ + $return = self::calendar($id); + } + return self::fixLineBreaks($return); + } + + /** + * @brief exports a calendar and convert all times to UTC + * @param integer $id id of the calendar + * @return string + */ + private static function calendar($id){ + $events = OC_Calendar_Object::all($id); + $calendar = OC_Calendar_Calendar::find($id); + $return = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\nX-WR-CALNAME:" . $calendar['displayname'] . "\n"; + foreach($events as $event){ + $return .= self::generateEvent($event); + } + $return .= "END:VCALENDAR"; + return $return; + } + + /** + * @brief exports an event and convert all times to UTC + * @param integer $id id of the event + * @return string + */ + private static function event($id){ + $event = OC_Calendar_Object::find($id); + $return = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\nX-WR-CALNAME:" . $event['summary'] . "\n"; + $return .= self::generateEvent($event); + $return .= "END:VCALENDAR"; + return $return; + } + + /** + * @brief generates the VEVENT with UTC dates + * @param array $event + * @return string + */ + private static function generateEvent($event){ + $object = OC_VObject::parse($event['calendardata']); + $dtstart = $object->VEVENT->DTSTART; + $start_dt = $dtstart->getDateTime(); + $dtend = OC_Calendar_Object::getDTEndFromVEvent($object->VEVENT); + $end_dt = $dtend->getDateTime(); + if($dtstart->getDateType() !== Sabre_VObject_Element_DateTime::DATE){ + $start_dt->setTimezone(new DateTimeZone('UTC')); + $end_dt->setTimezone(new DateTimeZone('UTC')); + $object->VEVENT->setDateTime('DTSTART', $start_dt, Sabre_VObject_Property_DateTime::UTC); + $object->VEVENT->setDateTime('DTEND', $end_dt, Sabre_VObject_Property_DateTime::UTC); + } + return $object->VEVENT->serialize(); + } + + /** + * @brief fixes new line breaks + * (fixes problems with Apple iCal) + * @param string $string to fix + * @return string + */ + private static function fixLineBreaks($string){ + $string = str_replace("\r\n", "\n", $string); + $string = str_replace("\r", "\n", $string); + $string = str_replace("\n", "\r\n", $string); + return $string; + } +} diff --git a/apps/calendar/lib/import.php b/apps/calendar/lib/import.php new file mode 100644 index 00000000000..368f8406e71 --- /dev/null +++ b/apps/calendar/lib/import.php @@ -0,0 +1,336 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +/* + * This class does import and converts all times to the users current timezone + */ +class OC_Calendar_Import{ + /* + * @brief counts the absolute number of parsed elements + */ + private $abscount; + + /* + * @brief var saves if the percentage should be saved with OC_Cache + */ + private $cacheprogress; + + /* + * @brief Sabre_VObject_Component_VCalendar object - for documentation see http://code.google.com/p/sabredav/wiki/Sabre_VObject_Component_VCalendar + */ + private $calobject; + + /* + * @brief var counts the number of imported elements + */ + private $count; + + /* + * @brief var to check if errors happend while initialization + */ + private $error; + + /* + * @brief var saves the ical string that was submitted with the __construct function + */ + private $ical; + + /* + * @brief calendar id for import + */ + private $id; + + /* + * @brief var saves the percentage of the import's progress + */ + private $progress; + + /* + * @brief var saves the key for the percentage of the import's progress + */ + private $progresskey; + + /* + * @brief var saves the timezone the events shell converted to + */ + private $tz; + + /* + * @brief var saves the userid + */ + private $userid; + + /* + * public methods + */ + + /* + * @brief does general initialization for import object + * @param string $calendar content of ical file + * @param string $tz timezone of the user + * @return boolean + */ + public function __construct($ical){ + $this->error = null; + $this->ical = $ical; + $this->abscount = 0; + $this->count = 0; + try{ + $this->calobject = OC_VObject::parse($this->ical); + }catch(Exception $e){ + //MISSING: write some log + $this->error = true; + return false; + } + return true; + } + + /* + * @brief imports a calendar + * @return boolean + */ + public function import(){ + if(!$this->isValid()){ + return false; + } + $numofcomponents = count($this->calobject->getComponents()); + foreach($this->calobject->getComponents() as $object){ + if(!($object instanceof Sabre_VObject_Component_VEvent) && !($object instanceof Sabre_VObject_Component_VJournal) && !($object instanceof Sabre_VObject_Component_VTodo)){ + continue; + } + $dtend = OC_Calendar_Object::getDTEndFromVEvent($object); + $object->DTSTART->getDateTime()->setTimezone(new DateTimeZone($this->tz)); + $object->DTEND->setDateTime($dtend->getDateTime(), $object->DTSTART->getDateType()); + $object->DTEND->getDateTime()->setTimezone(new DateTimeZone($this->tz)); + $vcalendar = $this->createVCalendar($object->serialize()); + $insertid = OC_Calendar_Object::add($this->id, $vcalendar); + $this->abscount++; + if($this->isDuplicate($insertid)){ + OC_Calendar_Object::delete($insertid); + }else{ + $this->count++; + } + $this->updateProgress(intval(($this->abscount / $numofcomponents)*100)); + } + OC_Cache::remove($this->progresskey); + return true; + } + + /* + * @brief sets the timezone + * @return boolean + */ + public function setTimeZone($tz){ + $this->tz = $tz; + return true; + } + + /* + * @brief sets the progresskey + * @return boolean + */ + public function setProgresskey($progresskey){ + $this->progresskey = $progresskey; + return true; + } + + /* + * @brief checks if something went wrong while initialization + * @return boolean + */ + public function isValid(){ + if(is_null($this->error)){ + return true; + } + return false; + } + + /* + * @brief returns the percentage of progress + * @return integer + */ + public function getProgress(){ + return $this->progress; + } + + /* + * @brief enables the cache for the percentage of progress + * @return boolean + */ + public function enableProgressCache(){ + $this->cacheprogress = true; + return true; + } + + /* + * @brief disables the cache for the percentage of progress + * @return boolean + */ + public function disableProgressCache(){ + $this->cacheprogress = false; + return false; + } + + /* + * @brief generates a new calendar name + * @return string + */ + public function createCalendarName(){ + $calendars = OC_Calendar_Calendar::allCalendars($this->userid); + $calendarname = $guessedcalendarname = !is_null($this->guessCalendarName())?($this->guessCalendarName()):(OC_Calendar_App::$l10n->t('New Calendar')); + $i = 1; + while(!OC_Calendar_Calendar::isCalendarNameavailable($calendarname, $this->userid)){ + $calendarname = $guessedcalendarname . ' (' . $i . ')'; + $i++; + } + return $calendarname; + } + + /* + * @brief generates a new calendar color + * @return string + */ + public function createCalendarColor(){ + if(is_null($this->guessCalendarColor())){ + return '#9fc6e7'; + } + return $this->guessCalendarColor(); + } + + /* + * @brief sets the id for the calendar + * @param integer $id of the calendar + * @return boolean + */ + public function setCalendarID($id){ + $this->id = $id; + return true; + } + + /* + * @brief sets the userid to import the calendar + * @param string $id of the user + * @return boolean + */ + public function setUserID($userid){ + $this->userid = $userid; + return true; + } + + /* + * @brief returns the private + * @param string $id of the user + * @return boolean + */ + public function getCount(){ + return $this->count; + } + + /* + * private methods + */ + + /* + * @brief generates an unique ID + * @return string + */ + //private function createUID(){ + // return substr(md5(rand().time()),0,10); + //} + + /* + * @brief checks is the UID is already in use for another event + * @param string $uid uid to check + * @return boolean + */ + //private function isUIDAvailable($uid){ + // + //} + + /* + * @brief generates a proper VCalendar string + * @param string $vobject + * @return string + */ + private function createVCalendar($vobject){ + if(is_object($vobject)){ + $vobject = @$vobject->serialize(); + } + $vcalendar = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\n"; + $vcalendar .= $vobject; + $vcalendar .= "END:VCALENDAR"; + return $vcalendar; + } + + /* + * @brief checks if an event already exists in the user's calendars + * @param integer $insertid id of the new object + * @return boolean + */ + private function isDuplicate($insertid){ + $newobject = OC_Calendar_Object::find($insertid); + $stmt = OCP\DB::prepare('SELECT COUNT(*) as count FROM *PREFIX*calendar_objects + INNER JOIN *PREFIX*calendar_calendars ON calendarid=*PREFIX*calendar_calendars.id + WHERE objecttype=? AND startdate=? AND enddate=? AND repeating=? AND summary=? AND calendardata=? AND userid = ?'); + $result = $stmt->execute(array($newobject['objecttype'],$newobject['startdate'],$newobject['enddate'],$newobject['repeating'],$newobject['summary'],$newobject['calendardata'], $this->userid)); + $result = $result->fetchRow(); + if($result['count'] >= 2){ + return true; + } + return false; + } + + /* + * @brief updates the progress var + * @param integer $percentage + * @return boolean + */ + private function updateProgress($percentage){ + $this->progress = $percentage; + if($this->cacheprogress){ + OC_Cache::set($this->progresskey, $this->progress, 300); + } + return true; + } + + /* + * public methods for (pre)rendering of X-... Attributes + */ + + /* + * @brief guesses the calendar color + * @return mixed - string or boolean + */ + public function guessCalendarColor(){ + if(!is_null($this->calobject->__get('X-APPLE-CALENDAR-COLOR'))){ + return $this->calobject->__get('X-APPLE-CALENDAR-COLOR'); + } + return null; + } + + /* + * @brief guesses the calendar description + * @return mixed - string or boolean + */ + public function guessCalendarDescription(){ + if(!is_null($this->calobject->__get('X-WR-CALDESC'))){ + return $this->calobject->__get('X-WR-CALDESC'); + } + return null; + } + + /* + * @brief guesses the calendar name + * @return mixed - string or boolean + */ + public function guessCalendarName(){ + if(!is_null($this->calobject->__get('X-WR-CALNAME'))){ + return $this->calobject->__get('X-WR-CALNAME'); + } + return null; + } +} diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index df866bd3c5f..8020d7c2e53 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -1,10 +1,31 @@ <?php /** * Copyright (c) 2011 Jakob Sack <mail@jakobsack.de> + * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ + /** + * + * The following SQL statement is just a help for developers and will not be + * executed! + * + * CREATE TABLE calendar_objects ( + * id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + * calendarid INTEGER UNSIGNED NOT NULL, + * objecttype VARCHAR(40) NOT NULL, + * startdate DATETIME, + * enddate DATETIME, + * repeating INT(1), + * summary VARCHAR(255), + * calendardata TEXT, + * uri VARCHAR(100), + * lastmodified INT(11) + * ); + * + */ /** * This class manages our calendar objects @@ -108,7 +129,7 @@ class OC_Calendar_Object{ $object_id = OCP\DB::insertid('*PREFIX*calendar_objects'); OC_Calendar_Calendar::touchCalendar($id); - + OCP\Util::emitHook('OC_Calendar', 'addEvent', $object_id); return $object_id; } @@ -128,7 +149,7 @@ class OC_Calendar_Object{ $object_id = OCP\DB::insertid('*PREFIX*calendar_objects'); OC_Calendar_Calendar::touchCalendar($id); - + OCP\Util::emitHook('OC_Calendar', 'addEvent', $object_id); return $object_id; } @@ -149,6 +170,7 @@ class OC_Calendar_Object{ $stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$id)); OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']); + OCP\Util::emitHook('OC_Calendar', 'editEvent', $id); return true; } @@ -170,6 +192,7 @@ class OC_Calendar_Object{ $stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$oldobject['id'])); OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']); + OCP\Util::emitHook('OC_Calendar', 'editEvent', $oldobject['id']); return true; } @@ -184,6 +207,7 @@ class OC_Calendar_Object{ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `id` = ?' ); $stmt->execute(array($id)); OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']); + OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $id); return true; } @@ -195,9 +219,11 @@ class OC_Calendar_Object{ * @return boolean */ public static function deleteFromDAVData($cid,$uri){ + $oldobject = self::findWhereDAVDataIs($cid, $uri); $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid`= ? AND `uri`=?' ); $stmt->execute(array($cid,$uri)); OC_Calendar_Calendar::touchCalendar($cid); + OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $oldobject['id']); return true; } @@ -207,6 +233,7 @@ class OC_Calendar_Object{ $stmt->execute(array($calendarid,$id)); OC_Calendar_Calendar::touchCalendar($id); + OCP\Util::emitHook('OC_Calendar', 'moveEvent', $id); return true; } @@ -302,12 +329,16 @@ class OC_Calendar_Object{ * This function creates a date string that can be used by MDB2. * Furthermore it converts the time to UTC. */ - protected static function getUTCforMDB($datetime){ + public static function getUTCforMDB($datetime){ return date('Y-m-d H:i', $datetime->format('U') - $datetime->getOffset()); } - - public static function getDTEndFromVEvent($vevent) - { + + /** + * @brief returns the DTEND of an $vevent object + * @param object $vevent vevent object + * @return object + */ + public static function getDTEndFromVEvent($vevent){ if ($vevent->DTEND) { $dtend = $vevent->DTEND; }else{ @@ -331,9 +362,12 @@ class OC_Calendar_Object{ } return $dtend; } - - public static function getRepeatOptions($l10n) - { + + /** + * @brief returns the options for the repeat rule of an repeating event + * @return array - valid inputs for the repeat rule of an repeating event + */ + public static function getRepeatOptions($l10n){ return array( 'doesnotrepeat' => $l10n->t('Does not repeat'), 'daily' => $l10n->t('Daily'), @@ -344,26 +378,35 @@ class OC_Calendar_Object{ 'yearly' => $l10n->t('Yearly') ); } - - public static function getEndOptions($l10n) - { + + /** + * @brief returns the options for the end of an repeating event + * @return array - valid inputs for the end of an repeating events + */ + public static function getEndOptions($l10n){ return array( 'never' => $l10n->t('never'), 'count' => $l10n->t('by occurrences'), 'date' => $l10n->t('by date') ); } - - public static function getMonthOptions($l10n) - { + + /** + * @brief returns the options for an monthly repeating event + * @return array - valid inputs for monthly repeating events + */ + public static function getMonthOptions($l10n){ return array( 'monthday' => $l10n->t('by monthday'), 'weekday' => $l10n->t('by weekday') ); } - - public static function getWeeklyOptions($l10n) - { + + /** + * @brief returns the options for an weekly repeating event + * @return array - valid inputs for weekly repeating events + */ + public static function getWeeklyOptions($l10n){ return array( 'MO' => $l10n->t('Monday'), 'TU' => $l10n->t('Tuesday'), @@ -374,9 +417,12 @@ class OC_Calendar_Object{ 'SU' => $l10n->t('Sunday') ); } - - public static function getWeekofMonth($l10n) - { + + /** + * @brief returns the options for an monthly repeating event which occurs on specific weeks of the month + * @return array - valid inputs for monthly repeating events + */ + public static function getWeekofMonth($l10n){ return array( 'auto' => $l10n->t('events week of month'), '1' => $l10n->t('first'), @@ -387,7 +433,11 @@ class OC_Calendar_Object{ '-1' => $l10n->t('last') ); } - + + /** + * @brief returns the options for an yearly repeating event which occurs on specific days of the year + * @return array - valid inputs for yearly repeating events + */ public static function getByYearDayOptions(){ $return = array(); foreach(range(1,366) as $num){ @@ -395,7 +445,11 @@ class OC_Calendar_Object{ } return $return; } - + + /** + * @brief returns the options for an yearly or monthly repeating event which occurs on specific days of the month + * @return array - valid inputs for yearly or monthly repeating events + */ public static function getByMonthDayOptions(){ $return = array(); foreach(range(1,31) as $num){ @@ -403,7 +457,11 @@ class OC_Calendar_Object{ } return $return; } - + + /** + * @brief returns the options for an yearly repeating event which occurs on specific month of the year + * @return array - valid inputs for yearly repeating events + */ public static function getByMonthOptions($l10n){ return array( '1' => $l10n->t('January'), @@ -420,7 +478,11 @@ class OC_Calendar_Object{ '12' => $l10n->t('December') ); } - + + /** + * @brief returns the options for an yearly repeating event + * @return array - valid inputs for yearly repeating events + */ public static function getYearOptions($l10n){ return array( 'bydate' => $l10n->t('by events date'), @@ -429,13 +491,21 @@ class OC_Calendar_Object{ 'bydaymonth' => $l10n->t('by day and month') ); } - + + /** + * @brief returns the options for an yearly repeating event which occurs on specific week numbers of the year + * @return array - valid inputs for yearly repeating events + */ public static function getByWeekNoOptions(){ return range(1, 52); } - - public static function validateRequest($request) - { + + /** + * @brief validates a request + * @param array $request + * @return mixed (array / boolean) + */ + public static function validateRequest($request){ $errnum = 0; $errarr = array('title'=>'false', 'cal'=>'false', 'from'=>'false', 'fromtime'=>'false', 'to'=>'false', 'totime'=>'false', 'endbeforestart'=>'false'); if($request['title'] == ''){ @@ -582,17 +652,24 @@ class OC_Calendar_Object{ } return false; } - - protected static function checkTime($time) - { + + /** + * @brief validates time + * @param string $time + * @return boolean + */ + protected static function checkTime($time){ list($hours, $minutes) = explode(':', $time); return empty($time) || $hours < 0 || $hours > 24 || $minutes < 0 || $minutes > 60; } - - public static function createVCalendarFromRequest($request) - { + + /** + * @brief creates an VCalendar Object from the request data + * @param array $request + * @return object created $vcalendar + */ public static function createVCalendarFromRequest($request){ $vcalendar = new OC_VObject('VCALENDAR'); $vcalendar->add('PRODID', 'ownCloud Calendar'); $vcalendar->add('VERSION', '2.0'); @@ -605,9 +682,14 @@ class OC_Calendar_Object{ $vevent->setUID(); return self::updateVCalendarFromRequest($request, $vcalendar); } - - public static function updateVCalendarFromRequest($request, $vcalendar) - { + + /** + * @brief updates an VCalendar Object from the request data + * @param array $request + * @param object $vcalendar + * @return object updated $vcalendar + */ + public static function updateVCalendarFromRequest($request, $vcalendar){ $title = $request["title"]; $location = $request["location"]; $categories = $request["categories"]; @@ -774,7 +856,7 @@ class OC_Calendar_Object{ $vevent->setDateTime('DTSTART', $start, Sabre_VObject_Property_DateTime::DATE); $vevent->setDateTime('DTEND', $end, Sabre_VObject_Property_DateTime::DATE); }else{ - $timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get()); + $timezone = OC_Calendar_App::getTimezone(); $timezone = new DateTimeZone($timezone); $start = new DateTime($from.' '.$fromtime, $timezone); $end = new DateTime($to.' '.$totime, $timezone); @@ -793,15 +875,63 @@ class OC_Calendar_Object{ return $vcalendar; } - + + /** + * @brief returns the owner of an object + * @param integer $id + * @return string + */ public static function getowner($id){ $event = self::find($id); $cal = OC_Calendar_Calendar::find($event['calendarid']); return $cal['userid']; } + /** + * @brief returns the calendarid of an object + * @param integer $id + * @return integer + */ public static function getCalendarid($id){ $event = self::find($id); return $event['calendarid']; } + + /** + * @brief checks if an object is repeating + * @param integer $id + * @return boolean + */ + public static function isrepeating($id){ + $event = self::find($id); + return ($event['repeating'] == 1)?true:false; + } + + /** + * @brief converts the start_dt and end_dt to a new timezone + * @param object $dtstart + * @param object $dtend + * @param boolean $allday + * @param string $tz + * @return array + */ + public static function generateStartEndDate($dtstart, $dtend, $allday, $tz){ + $start_dt = $dtstart->getDateTime(); + $end_dt = $dtend->getDateTime(); + $return = array(); + if($allday){ + $return['start'] = $start_dt->format('Y-m-d'); + $end_dt->modify('-1 minute'); + while($start_dt >= $end_dt){ + $end_dt->modify('+1 day'); + } + $return['end'] = $end_dt->format('Y-m-d'); + }else{ + $start_dt->setTimezone(new DateTimeZone($tz)); + $end_dt->setTimezone(new DateTimeZone($tz)); + $return['start'] = $start_dt->format('Y-m-d H:i:s'); + $return['end'] = $end_dt->format('Y-m-d H:i:s'); + } + return $return; + } } diff --git a/apps/calendar/lib/repeat.php b/apps/calendar/lib/repeat.php new file mode 100644 index 00000000000..b9fbee8fe0a --- /dev/null +++ b/apps/calendar/lib/repeat.php @@ -0,0 +1,204 @@ +<?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ +/** + * This class manages the caching of repeating events + * Events will be cached for the current year ± 5 years + */ +class OC_Calendar_Repeat{ + /** + * @brief returns the cache of an event + * @param (int) $id - id of the event + * @return (array) + */ + public static function get($id){ + $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_repeat WHERE eventid = ?'); + $result = $stmt->execute(array($id)); + $return = array(); + while($row = $result->fetchRow()){ + $return[] = $row; + } + return $return; + } + /** + * @brief returns the cache of an event in a specific peroid + * @param (int) $id - id of the event + * @param (DateTime) $from - start for period in UTC + * @param (DateTime) $until - end for period in UTC + * @return (array) + */ + public static function get_inperiod($id, $from, $until){ + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*calendar_repeat WHERE eventid = ?' + .' AND ((startdate >= ? AND startdate <= ?)' + .' OR (enddate >= ? AND enddate <= ?))'); + $result = $stmt->execute(array($id, + OC_Calendar_Object::getUTCforMDB($from), OC_Calendar_Object::getUTCforMDB($until), + OC_Calendar_Object::getUTCforMDB($from), OC_Calendar_Object::getUTCforMDB($until))); + $return = array(); + while($row = $result->fetchRow()){ + $return[] = $row; + } + return $return; + } + /** + * @brief returns the cache of all repeating events of a calendar + * @param (int) $id - id of the calendar + * @return (array) + */ + public static function getCalendar($id){ + $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_repeat WHERE calid = ?'); + $result = $stmt->execute(array($id)); + $return = array(); + while($row = $result->fetchRow()){ + $return[] = $row; + } + return $return; + } + /** + * @brief returns the cache of all repeating events of a calendar in a specific period + * @param (int) $id - id of the event + * @param (string) $from - start for period in UTC + * @param (string) $until - end for period in UTC + * @return (array) + */ + public static function getCalendar_inperiod($id, $from, $until){ + $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*calendar_repeat WHERE calid = ?' + .' AND ((startdate >= ? AND startdate <= ?)' + .' OR (enddate >= ? AND enddate <= ?))'); + $result = $stmt->execute(array($id, + $from, $until, + $from, $until)); + $return = array(); + while($row = $result->fetchRow()){ + $return[] = $row; + } + return $return; + } + /** + * @brief generates the cache the first time + * @param (int) id - id of the event + * @return (bool) + */ + public static function generate($id){ + $event = OC_Calendar_Object::find($id); + if($event['repeating'] == 0){ + return false; + } + $object = OC_VObject::parse($event['calendardata']); + $start = new DateTime('01-01-' . date('Y') . ' 00:00:00', new DateTimeZone('UTC')); + $start->modify('-5 years'); + $end = new DateTime('31-12-' . date('Y') . ' 23:59:59', new DateTimeZone('UTC')); + $end->modify('+5 years'); + $object->expand($start, $end); + foreach($object->getComponents() as $vevent){ + if(!($vevent instanceof Sabre_VObject_Component_VEvent)){ + continue; + } + $startenddate = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false, 'UTC'); + $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*calendar_repeat (eventid,calid,startdate,enddate) VALUES(?,?,?,?)'); + $stmt->execute(array($id,OC_Calendar_Object::getCalendarid($id),$startenddate['start'],$startenddate['end'])); + } + return true; + } + /** + * @brief generates the cache the first time for all repeating event of an calendar + * @param (int) id - id of the calendar + * @return (bool) + */ + public static function generateCalendar($id){ + $allobjects = OC_Calendar_Object::all($id); + foreach($allobjects as $event){ + self::generate($event['id']); + } + return true; + } + /** + * @brief updates an event that is already cached + * @param (int) id - id of the event + * @return (bool) + */ + public static function update($id){ + self::clean($id); + self::generate($id); + return true; + } + /** + * @brief updates all repating events of a calendar that are already cached + * @param (int) id - id of the calendar + * @return (bool) + */ + public static function updateCalendar($id){ + self::cleanCalendar($id); + self::generateCalendar($id); + return true; + } + /** + * @brief checks if an event is already cached + * @param (int) id - id of the event + * @return (bool) + */ + public static function is_cached($id){ + if(count(self::get($id)) != 0){ + return true; + }else{ + return false; + } + } + /** + * @brief checks if an event is already cached in a specific period + * @param (int) id - id of the event + * @param (DateTime) $from - start for period in UTC + * @param (DateTime) $until - end for period in UTC + * @return (bool) + */ + public static function is_cached_inperiod($id, $start, $end){ + if(count(self::get_inperiod($id, $start, $end)) != 0){ + return true; + }else{ + return false; + } + + } + /** + * @brief checks if a whole calendar is already cached + * @param (int) id - id of the calendar + * @return (bool) + */ + public static function is_calendar_cached($id){ + $cachedevents = count(self::getCalendar($id)); + $repeatingevents = 0; + $allevents = OC_Calendar_Object::all($id); + foreach($allevents as $event){ + if($event['repeating'] === 1){ + $repeatingevents++; + } + } + if($cachedevents < $repeatingevents){ + return false; + }else{ + return true; + } + } + /** + * @brief removes the cache of an event + * @param (int) id - id of the event + * @return (bool) + */ + public static function clean($id){ + $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_repeat WHERE eventid = ?'); + $stmt->execute(array($id)); + } + /** + * @brief removes the cache of all events of a calendar + * @param (int) id - id of the calendar + * @return (bool) + */ + public static function cleanCalendar($id){ + $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_repeat WHERE calid = ?'); + $stmt->execute(array($id)); + } +}
\ No newline at end of file diff --git a/apps/calendar/lib/connector_sabre.php b/apps/calendar/lib/sabre/backend.php index 8eea06da7e2..ac3b26ceb33 100644 --- a/apps/calendar/lib/connector_sabre.php +++ b/apps/calendar/lib/sabre/backend.php @@ -212,6 +212,10 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract { * @return void */ public function deleteCalendar($calendarId) { + if(preg_match( '=iCal/[1-4]?.*Mac OS X/10.[1-6](.[0-9])?=', $_SERVER['HTTP_USER_AGENT'] )){ + throw new Sabre_DAV_Exception_Forbidden("Action is not possible with OSX 10.6.x", 403); + } + OC_Calendar_Calendar::deleteCalendar($calendarId); } diff --git a/apps/calendar/lib/sabre/calendar.php b/apps/calendar/lib/sabre/calendar.php new file mode 100644 index 00000000000..179be1b2813 --- /dev/null +++ b/apps/calendar/lib/sabre/calendar.php @@ -0,0 +1,127 @@ +<?php +/** + * ownCloud - OC_Connector_Sabre_Sabre_CalDAV_Calendar + * + * @author Thomas Tanghus + * @copyright 2012 Thomas Tanghus (thomas@tanghus.net) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * This class overrides Sabre_CalDAV_Calendar::getACL() to return read/write + * permissions based on user and shared state and it overrides + * Sabre_CalDAV_Calendar::getChild() and Sabre_CalDAV_Calendar::getChildren() + * to instantiate OC_Connector_Sabre_CalDAV_CalendarObjects. +*/ +class OC_Connector_Sabre_CalDAV_Calendar extends Sabre_CalDAV_Calendar { + + /** + * Returns a list of ACE's for this node. + * + * Each ACE has the following properties: + * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are + * currently the only supported privileges + * * 'principal', a url to the principal who owns the node + * * 'protected' (optional), indicating that this ACE is not allowed to + * be updated. + * + * @return array + */ + public function getACL() { + + $readprincipal = $this->getOwner(); + $writeprincipal = $this->getOwner(); + $uid = OC_Calendar_Calendar::extractUserID($this->getOwner()); + + if($uid != OCP\USER::getUser()) { + $sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $this->$calendarInfo['id']); + if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\Share::PERMISSION_READ)) { + $readprincipal = 'principals/' . OCP\USER::getUser(); + } + if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\Share::PERMISSION_UPDATE)) { + $writeprincipal = 'principals/' . OCP\USER::getUser(); + } + } + + return array( + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal, + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}write', + 'principal' => $writeprincipal, + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal . '/calendar-proxy-write', + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}write', + 'principal' => $writeprincipal . '/calendar-proxy-write', + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal . '/calendar-proxy-read', + 'protected' => true, + ), + array( + 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy', + 'principal' => '{DAV:}authenticated', + 'protected' => true, + ), + + ); + + } + + /** + * Returns a calendar object + * + * The contained calendar objects are for example Events or Todo's. + * + * @param string $name + * @return Sabre_DAV_ICalendarObject + */ + public function getChild($name) { + + $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name); + if (!$obj) throw new Sabre_DAV_Exception_NotFound('Calendar object not found'); + return new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); + + } + + /** + * Returns the full list of calendar objects + * + * @return array + */ + public function getChildren() { + + $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']); + $children = array(); + foreach($objs as $obj) { + $children[] = new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj); + } + return $children; + + } + +}
\ No newline at end of file diff --git a/apps/calendar/lib/sabre/calendarroot.php b/apps/calendar/lib/sabre/calendarroot.php new file mode 100644 index 00000000000..e09731c95b7 --- /dev/null +++ b/apps/calendar/lib/sabre/calendarroot.php @@ -0,0 +1,45 @@ +<?php +/** + * ownCloud - OC_Connector_Sabre_CalDAV_CalendarRoot + * + * @author Thomas Tanghus + * @copyright 2012 Thomas Tanghus (thomas@tanghus.net) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * This class overrides Sabre_CalDAV_CalendarRootNode::getChildForPrincipal() + * to instantiate OC_Connector_Sabre_CalDAV_UserCalendars. +*/ +class OC_Connector_Sabre_CalDAV_CalendarRoot extends Sabre_CalDAV_CalendarRootNode { + + /** + * This method returns a node for a principal. + * + * The passed array contains principal information, and is guaranteed to + * at least contain a uri item. Other properties may or may not be + * supplied by the authentication backend. + * + * @param array $principal + * @return Sabre_DAV_INode + */ + public function getChildForPrincipal(array $principal) { + + return new OC_Connector_Sabre_CalDAV_UserCalendars($this->principalBackend, $this->caldavBackend, $principal['uri']); + + } + +}
\ No newline at end of file diff --git a/apps/calendar/lib/sabre/object.php b/apps/calendar/lib/sabre/object.php new file mode 100644 index 00000000000..25954e6ee55 --- /dev/null +++ b/apps/calendar/lib/sabre/object.php @@ -0,0 +1,87 @@ +<?php +/** + * ownCloud - OC_Connector_Sabre_CalDAV_CalendarObject + * + * @author Thomas Tanghus + * @copyright 2012 Thomas Tanghus (thomas@tanghus.net) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * This class overrides Sabre_CalDAV_CalendarObject::getACL() + * to return read/write permissions based on user and shared state. +*/ +class OC_Connector_Sabre_CalDAV_CalendarObject extends Sabre_CalDAV_CalendarObject { + + /** + * Returns a list of ACE's for this node. + * + * Each ACE has the following properties: + * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are + * currently the only supported privileges + * * 'principal', a url to the principal who owns the node + * * 'protected' (optional), indicating that this ACE is not allowed to + * be updated. + * + * @return array + */ + public function getACL() { + + $readprincipal = $this->getOwner(); + $writeprincipal = $this->getOwner(); + $uid = OC_Calendar_Calendar::extractUserID($this->getOwner()); + + if($uid != OCP\USER::getUser()) { + $sharedAddressbook = OCP\Share::getItemSharedWithBySource('calendar', $this->$calendarInfo['id']); + if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) { + $readprincipal = 'principals/' . OCP\USER::getUser(); + } + if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) { + $writeprincipal = 'principals/' . OCP\USER::getUser(); + } + } + + return array( + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal, + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}write', + 'principal' => $writeprincipal, + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal . '/calendar-proxy-write', + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}write', + 'principal' => $writeprincipal . '/calendar-proxy-write', + 'protected' => true, + ), + array( + 'privilege' => '{DAV:}read', + 'principal' => $readprincipal . '/calendar-proxy-read', + 'protected' => true, + ), + ); + + } + +}
\ No newline at end of file diff --git a/apps/calendar/lib/sabre/usercalendars.php b/apps/calendar/lib/sabre/usercalendars.php new file mode 100644 index 00000000000..919f6b27e18 --- /dev/null +++ b/apps/calendar/lib/sabre/usercalendars.php @@ -0,0 +1,46 @@ +<?php +/** + * ownCloud - OC_Connector_Sabre_CalDAV_UserCalendars + * + * @author Thomas Tanghus + * @copyright 2012 Thomas Tanghus (thomas@tanghus.net) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** + * This class overrides Sabre_CalDAV_UserCalendars::getChildren() + * to instantiate OC_Connector_Sabre_CalDAV_Calendars. +*/ +class OC_Connector_Sabre_CalDAV_UserCalendars extends Sabre_CalDAV_UserCalendars { + + /** + * Returns a list of calendars + * + * @return array + */ + public function getChildren() { + + $calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']); + $objs = array(); + foreach($calendars as $calendar) { + $objs[] = new OC_Connector_Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar); + } + $objs[] = new Sabre_CalDAV_Schedule_Outbox($this->principalInfo['uri']); + return $objs; + + } + +}
\ No newline at end of file diff --git a/apps/calendar/lib/search.php b/apps/calendar/lib/search.php index 8b8b0e0c7ee..551489672b9 100644 --- a/apps/calendar/lib/search.php +++ b/apps/calendar/lib/search.php @@ -1,7 +1,7 @@ <?php class OC_Search_Provider_Calendar extends OC_Search_Provider{ function search($query){ - $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1); + $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true); if(count($calendars)==0 || !OCP\App::isEnabled('calendar')){ //return false; } @@ -12,7 +12,7 @@ class OC_Search_Provider_Calendar extends OC_Search_Provider{ }else{ $searchquery[] = $query; } - $user_timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get()); + $user_timezone = OC_Calendar_App::getTimezone(); $l = new OC_l10n('calendar'); foreach($calendars as $calendar){ $objects = OC_Calendar_Object::all($calendar['id']); diff --git a/apps/calendar/lib/share.php b/apps/calendar/lib/share.php index aba27221653..23892157fef 100644 --- a/apps/calendar/lib/share.php +++ b/apps/calendar/lib/share.php @@ -5,39 +5,36 @@ * later. * See the COPYING-README file. */ -/* +/** * This class manages shared calendars */ class OC_Calendar_Share{ const CALENDAR = 'calendar'; const EVENT = 'event'; - /* + /** * @brief: returns informations about all calendar or events which users are sharing with the user - userid - * @param: (string) $userid - id of the user - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return: (array) $return - information about calendars + * @param: string $userid - id of the user + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return: array $return - information about calendars */ public static function allSharedwithuser($userid, $type, $active=null, $permission=null){ - $group_where = self::group_sql(OC_Group::getUserGroups($userid)); - $permission_where = self::permission_sql($permission); - if($type == self::CALENDAR){ - $active_where = self::active_sql($active); - }else{ - $active_where = ''; - } - $stmt = OCP\DB::prepare("SELECT * FROM `*PREFIX*calendar_share_" . $type . "` WHERE ((`share` = ? AND `sharetype` = 'user') " . $group_where . ") AND `owner` <> ? " . $permission_where . " " . $active_where); - $result = $stmt->execute(array($userid, $userid)); - $return = array(); - while( $row = $result->fetchRow()){ - $return[] = $row; + $format = OC_Share_Backend_Calendar::FORMAT_CALENDAR; + if ($type == self::EVENT) { + $format = OC_Share_Backend_Event::FORMAT_EVENT; } + $return = OCP\Share::getItemsSharedWith($type, + $format, + array( + 'active' => $active, + 'permissions' => $permission, + )); return $return; } - /* + /** * @brief: returns all users a calendar / event is shared with - * @param: (int) id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return: (array) $users - information about users a calendar / event is shared with + * @param: integer id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return: array $users - information about users a calendar / event is shared with */ public static function allUsersSharedwith($id, $type){ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `' . $type . 'id` = ? ORDER BY `share`'); @@ -48,13 +45,13 @@ class OC_Calendar_Share{ } return $users; } - /* + /** * @brief: shares a calendar / event - * @param: (string) $owner - userid of the owner - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $sharetype - type of sharing (can be: user/group/public) - * @param: (string) $id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT + * @param: string $owner - userid of the owner + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $sharetype - type of sharing (can be: user/group/public) + * @param: string $id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT * @return (mixed) - token (if $sharetype == public) / bool (if $sharetype != public) */ public static function share($owner, $share, $sharetype, $id, $type){ @@ -80,14 +77,14 @@ class OC_Calendar_Share{ return true; } } - /* + /** * @brief: stops sharing a calendar / event - * @param: (string) $owner - userid of the owner - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $sharetype - type of sharing (can be: user/group/public) - * @param: (string) $id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return (bool) + * @param: string $owner - userid of the owner + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $sharetype - type of sharing (can be: user/group/public) + * @param: string $id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return boolean */ public static function unshare($owner, $share, $sharetype, $id, $type){ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? ' . (($sharetype != 'public')?'AND `share` = ?':'') . ' AND `sharetype` = ? AND `' . $type . 'id` = ?'); @@ -98,14 +95,14 @@ class OC_Calendar_Share{ } return true; } - /* + /** * @brief: changes the permission for a calendar / event - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $sharetype - type of sharing (can be: user/group/public) - * @param: (string) $id - id of the calendar / event - * @param: (int) $permission - permission of user the calendar / event is shared with (if $sharetype == public then $permission = 0) - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return (bool) + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $sharetype - type of sharing (can be: user/group/public) + * @param: string $id - id of the calendar / event + * @param: integer $permission - permission of user the calendar / event is shared with (if $sharetype == public then $permission = 0) + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return boolean */ public static function changepermission($share, $sharetype, $id, $permission, $type){ if($sharetype == 'public' && $permission == 1){ @@ -115,9 +112,9 @@ class OC_Calendar_Share{ $stmt->execute(array($permission, $share, $sharetype, $id)); return true; } - /* + /** * @brief: generates a token for public calendars / events - * @return: (string) $token + * @return: string $token */ private static function generate_token($id, $type){ $uniqid = uniqid(); @@ -138,14 +135,14 @@ class OC_Calendar_Share{ $token = md5($string); return substr($token, rand(0,16), 15); } - /* + /** * @brief: checks if it is already shared - * @param: (string) $owner - userid of the owner - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $sharetype - type of sharing (can be: user/group/public) - * @param: (string) $id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return (bool) + * @param: string $owner - userid of the owner + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $sharetype - type of sharing (can be: user/group/public) + * @param: string $id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return boolean */ public static function is_already_shared($owner, $share, $sharetype, $id, $type){ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? AND `share` = ? AND `sharetype` = ? AND `' . $type . 'id` = ?'); @@ -181,12 +178,12 @@ class OC_Calendar_Share{ } return $active_where; } - /* + /** * @brief: checks the permission for editing an event - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return (bool) + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return boolean */ public static function is_editing_allowed($share, $id, $type){ $group_where = self::group_sql(OC_Group::getUserGroups($share)); @@ -202,16 +199,16 @@ class OC_Calendar_Share{ } return false; } - /* + /** * @brief: checks the access of - * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) - * @param: (string) $id - id of the calendar / event - * @param: (string) $type - use const self::CALENDAR or self::EVENT - * @return (bool) + * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public) + * @param: string $id - id of the calendar / event + * @param: string $type - use const self::CALENDAR or self::EVENT + * @return boolean */ public static function check_access($share, $id, $type){ $group_where = self::group_sql(OC_Group::getUserGroups($share)); - $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share`_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')'); + $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')'); $result = $stmt->execute(array($id,$share)); $rows = $result->numRows(); if($rows > 0){ @@ -223,9 +220,9 @@ class OC_Calendar_Share{ return false; } } - /* + /** * @brief: returns the calendardata of an event or a calendar - * @param: (string) $token - token which should be searched + * @param: string $token - token which should be searched * @return: mixed - bool if false, array with type and id if true */ public static function getElementByToken($token){ @@ -248,19 +245,19 @@ class OC_Calendar_Share{ return $return; } - /* + /** * @brief sets the active status of the calendar - * @param (string) $ + * @param string */ public static function set_active($share, $id, $active){ $stmt = OCP\DB::prepare("UPDATE `*PREFIX*calendar_share_calendar` SET `active` = ? WHERE `share` = ? AND `sharetype` = 'user' AND `calendarid` = ?"); $stmt->execute(array($active, $share, $id)); } - /* - * @brief delete all shared calendars / events after a user was deleted - * @param (string) $userid - * @return (bool) + /** + * @brief deletes all shared calendars / events after a user was deleted + * @param string $userid + * @return boolean */ public static function post_userdelete($userid){ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `owner` = ?'); @@ -273,4 +270,26 @@ class OC_Calendar_Share{ $stmt->execute(array($userid)); return true; } + + /** + * @brief deletes all shared events of a calendar + * @param integer $calid + * @return boolean + */ + public static function post_caldelete($calid){ + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `calendarid` = ?'); + $stmt->execute(array($calid)); + return true; + } + + /** + * @brief deletes all shares of an event + * @param integer $eventid + * @return boolean + */ + public static function post_eventdelete($eventid){ + $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_event` WHERE `eventid` = ?'); + $stmt->execute(array($eventid)); + return true; + } }
\ No newline at end of file diff --git a/apps/calendar/lib/share/calendar.php b/apps/calendar/lib/share/calendar.php new file mode 100644 index 00000000000..7f498292419 --- /dev/null +++ b/apps/calendar/lib/share/calendar.php @@ -0,0 +1,111 @@ +<?php +/** +* ownCloud +* +* @author Michael Gapczynski +* @copyright 2012 Michael Gapczynski mtgap@owncloud.com +* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +class OC_Share_Backend_Calendar implements OCP\Share_Backend_Collection { + const FORMAT_CALENDAR = 1; + + /** + * @brief Get the source of the item to be stored in the database + * @param string Item + * @param string Owner of the item + * @return mixed|array|false Source + * + * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file' + * Return false if the item does not exist for the user + * + * The formatItems() function will translate the source returned back into the item + */ + public function isValidSource($itemSource, $uidOwner) { + $calendar = OC_Calendar_App::getCalendar( $itemSource ); + if ($calendar || $calendar['userid'] != $uidOwner) { + return false; + } + return true; + } + + /** + * @brief Get a unique name of the item for the specified user + * @param string Item + * @param string|false User the item is being shared with + * @param array|null List of similar item names already existing as shared items + * @return string Target name + * + * This function needs to verify that the user does not already have an item with this name. + * If it does generate a new name e.g. name_# + */ + public function generateTarget($itemSource, $shareWith, $exclude = null) { + $calendar = OC_Calendar_App::getCalendar( $itemSource ); + $user_calendars = array(); + foreach(OC_Contacts_Addressbook::all($uid) as $user_calendar) { + $user_calendars[] = $user_calendar['displayname']; + } + $name = $calendar['userid']."'s ".$calendar['displayname']; + $suffix = ''; + while (in_array($name.$suffix, $user_calendars)) { + $suffix++; + } + + return $name.$suffix; + } + + /** + * @brief Converts the shared item sources back into the item in the specified format + * @param array Shared items + * @param int Format + * @return ? + * + * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info. + * The key/value pairs included in the share info depend on the function originally called: + * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source + * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target + * This function allows the backend to control the output of shared items with custom formats. + * It is only called through calls to the public getItem(s)Shared(With) functions. + */ + public function formatItems($items, $format, $parameters = null) { + $calendars = array(); + if ($format == self::FORMAT_CALENDAR) { + foreach ($items as $item) { + $calendar = OC_Calendar_App::getCalendar($item['item_source'], false); + // TODO: really check $parameters['permissions'] == 'rw'/'r' + if ($parameters['permissions'] == 'rw') { + continue; // TODO + } + $calendar['displaynamename'] = $item['item_target']; + $calendar['calendarid'] = $calendar['id']; + $calendar['owner'] = $calendar['userid']; + $calendars[] = $calendar; + } + } + return $calendars; + } + + public function getChildren($itemSource) { + $query = OCP\DB::prepare('SELECT id FROM *PREFIX*calendar_objects WHERE calendarid = ?'); + $result = $query->execute(array($itemSource)); + $sources = array(); + while ($object = $result->fetchRow()) { + $sources[] = $object['id']; + } + return $sources; + } + +}
\ No newline at end of file diff --git a/apps/calendar/lib/share/event.php b/apps/calendar/lib/share/event.php new file mode 100644 index 00000000000..5bb72ee6c98 --- /dev/null +++ b/apps/calendar/lib/share/event.php @@ -0,0 +1,40 @@ +<?php +/** + * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class OC_Share_Backend_Event implements OCP\Share_Backend { + + const FORMAT_EVENT = 0; + + private static $event; + + public function isValidSource($itemSource, $uidOwner) { + self::$event = OC_Calendar_Object::find($itemSource); + if (self::$event) { + return true; + } + return false; + } + + public function generateTarget($itemSource, $shareWith, $exclude = null) { + // TODO Get default calendar and check for conflicts + return self::$event['summary']; + } + + public function formatItems($items, $format, $parameters = null) { + $events = array(); + if ($format == self::FORMAT_EVENT) { + foreach ($items as $item) { + $event = OC_Calendar_Object::find($item['item_source']); + $event['summary'] = $item['item_target']; + $events[] = $event; + } + } + return $events; + } + +} diff --git a/apps/calendar/lib/share_backend.php b/apps/calendar/lib/share_backend.php new file mode 100644 index 00000000000..f937c0d1c34 --- /dev/null +++ b/apps/calendar/lib/share_backend.php @@ -0,0 +1,44 @@ +<?php +/** +* ownCloud +* +* @author Michael Gapczynski +* @copyright 2012 Michael Gapczynski mtgap@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +class OC_Share_Backend_Calendar extends OCP\Share_Backend { + + public function getSource($item, $uid) { + $query = OCP\DB::prepare('SELECT id FROM *PREFIX*calendar_calendars WHERE userid = ? AND displayname = ? LIMIT 1'); + return $query->execute(array($uid, $item))->fetchAll(); + } + + public function generateTarget($item, $uid) { + + } + + public function getItems($sources) { + + } + +} + +class OC_Share_Backend_Event extends OCP\Share_Backend { + +} + + +?>
\ No newline at end of file diff --git a/apps/calendar/settings.php b/apps/calendar/settings.php index a18b1ca9f42..f563518046d 100644 --- a/apps/calendar/settings.php +++ b/apps/calendar/settings.php @@ -10,7 +10,8 @@ $tmpl = new OCP\Template( 'calendar', 'settings'); $timezone=OCP\Config::getUserValue(OCP\USER::getUser(),'calendar','timezone',''); $tmpl->assign('timezone',$timezone); $tmpl->assign('timezones',DateTimeZone::listIdentifiers()); +$tmpl->assign('calendars', OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()), false); OCP\Util::addscript('calendar','settings'); -return $tmpl->fetchPage(); +$tmpl->printPage();
\ No newline at end of file diff --git a/apps/calendar/share.php b/apps/calendar/share.php index 68c7d0ffae2..bffcf0b4709 100644 --- a/apps/calendar/share.php +++ b/apps/calendar/share.php @@ -1,22 +1,31 @@ <?php +/** + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ $token = strip_tags($_GET['t']); $shared = OC_Calendar_Share::getElementByToken($token); -$nl = "\n\r"; if($shared['type'] == OC_Calendar_Share::CALENDAR){ $calendar = OC_Calendar_App::getCalendar($shared['id'], false); - $calobjects = OC_Calendar_Object::all($shared['id']); - header('Content-Type: text/Calendar'); - header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics'); - foreach($calobjects as $calobject){ - echo $calobject['calendardata'] . $nl; + if(!$calendar){ + header('HTTP/1.0 404 Not Found'); + exit; } + header('Content-Type: text/Calendar'); + header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $calendar['displayname']) . '.ics'); + echo OC_Calendar_Export::export($shared['id'], OC_Calendar_Export::CALENDAR); }elseif($shared['type'] == OC_Calendar_Share::EVENT){ $data = OC_Calendar_App::getEventObject($shared['id'], false); - $calendarid = $data['calendarid']; - $calendar = OC_Calendar_App::getCalendar($calendarid); + if(!$data){ + header('HTTP/1.0 404 Not Found'); + exit; + } header('Content-Type: text/Calendar'); - header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics'); - echo $data['calendardata']; + header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $data['summary']) . '.ics'); + echo OC_Calendar_Export::export($shared['id'], OC_Calendar_Export::EVENT); }else{ - header('Error 404: Not Found'); -}
\ No newline at end of file + header('HTTP/1.0 404 Not Found'); + exit; +} diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php index 832194f0fe1..15891aafd9e 100644 --- a/apps/calendar/templates/calendar.php +++ b/apps/calendar/templates/calendar.php @@ -2,10 +2,10 @@ var defaultView = '<?php echo OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'currentview', 'month') ?>'; var eventSources = <?php echo json_encode($_['eventSources']) ?>; var categories = <?php echo json_encode($_['categories']); ?>; - var dayNames = <?php echo json_encode($l->tA(array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'))) ?>; - var dayNamesShort = <?php echo json_encode($l->tA(array('Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.'))) ?>; - var monthNames = <?php echo json_encode($l->tA(array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'))) ?>; - var monthNamesShort = <?php echo json_encode($l->tA(array('Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'))) ?>; + var dayNames = new Array("<?php echo $l -> t("Sunday");?>", "<?php echo $l -> t("Monday");?>", "<?php echo $l -> t("Tuesday");?>", "<?php echo $l -> t("Wednesday");?>", "<?php echo $l -> t("Thursday");?>", "<?php echo $l -> t("Friday");?>", "<?php echo $l -> t("Saturday");?>"); + var dayNamesShort = new Array("<?php echo $l -> t("Sun.");?>", "<?php echo $l -> t("Mon.");?>", "<?php echo $l -> t("Tue.");?>", "<?php echo $l -> t("Wed.");?>", "<?php echo $l -> t("Thu.");?>", "<?php echo $l -> t("Fri.");?>", "<?php echo $l -> t("Sat.");?>"); + var monthNames = new Array("<?php echo $l -> t("January");?>", "<?php echo $l -> t("February");?>", "<?php echo $l -> t("March");?>", "<?php echo $l -> t("April");?>", "<?php echo $l -> t("May");?>", "<?php echo $l -> t("June");?>", "<?php echo $l -> t("July");?>", "<?php echo $l -> t("August");?>", "<?php echo $l -> t("September");?>", "<?php echo $l -> t("October");?>", "<?php echo $l -> t("November");?>", "<?php echo $l -> t("December");?>"); + var monthNamesShort = new Array("<?php echo $l -> t("Jan.");?>", "<?php echo $l -> t("Feb.");?>", "<?php echo $l -> t("Mar.");?>", "<?php echo $l -> t("Apr.");?>", "<?php echo $l -> t("May.");?>", "<?php echo $l -> t("Jun.");?>", "<?php echo $l -> t("Jul.");?>", "<?php echo $l -> t("Aug.");?>", "<?php echo $l -> t("Sep.");?>", "<?php echo $l -> t("Oct.");?>", "<?php echo $l -> t("Nov.");?>", "<?php echo $l -> t("Dec.");?>"); var agendatime = '<?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>{ - <?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>}'; var defaulttime = '<?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>'; var allDayText = '<?php echo addslashes($l->t('All day')) ?>'; @@ -33,37 +33,25 @@ ?> }); </script> - <div id="controls"> - <div> - <form> - <div id="view"> - <input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/> - <input type="button" value="<?php echo $l->t('Month');?>" id="onemonthview_radio"/> - <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/> - <img id="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /> - </div> - </form> - <form> - <div id="choosecalendar"> - <input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/> - <input type="button" id="choosecalendar_input" value="<?php echo $l->t("Calendars");?>" onclick="Calendar.UI.Calendar.overview();" /> - </div> - </form> - <form> - <div id="datecontrol"> - <input type="button" value=" < " id="datecontrol_left"/> - <span class="button" id="datecontrol_date"></span> - <input type="button" value=" > " id="datecontrol_right"/> - </div> - </form> - </div> - </div> <div id="notification" style="display:none;"></div> - <div id="calendar_holder"> + <div id="controls"> + <form id="view"> + <input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/> + <input type="button" value="<?php echo $l->t('Month');?>" id="onemonthview_radio"/> + <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/> + <img id="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /> + </form> + <form id="choosecalendar"> + <!--<input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/>--> + <a class="settings calendarsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('calendar', 'icon.svg'); ?>" alt="<?php echo $l->t('Settings'); ?>" /></a> + <a class="settings generalsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('core', 'actions/settings.svg'); ?>" alt="<?php echo $l->t('Settings'); ?>" /></a> + </form> + <form id="datecontrol"> + <input type="button" value=" < " id="datecontrol_left"/> + <input type="button" value="" id="datecontrol_date"/> + <input type="button" value=" > " id="datecontrol_right"/> + </form> </div> - <!-- Dialogs --> + <div id="fullcalendar"></div> <div id="dialog_holder"></div> - <div id="parsingfail_dialog" title="Parsing Fail"> - <?php echo $l->t("There was a fail, while parsing the file."); ?> - </div> - <!-- End of Dialogs --> + <div id="appsettings" class="popup topright hidden"></div>
\ No newline at end of file diff --git a/apps/calendar/templates/part.choosecalendar.php b/apps/calendar/templates/part.choosecalendar.php index 8d621cc3630..ad2f9e753f2 100644 --- a/apps/calendar/templates/part.choosecalendar.php +++ b/apps/calendar/templates/part.choosecalendar.php @@ -1,51 +1,52 @@ -<div id="choosecalendar_dialog" title="<?php echo $l->t("Choose active calendars"); ?>"> -<p><b><?php echo $l->t('Your calendars'); ?>:</b></p> -<table width="100%" style="border: 0;"> -<?php -$option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); -for($i = 0; $i < count($option_calendars); $i++){ - echo "<tr>"; - $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields'); - $tmpl->assign('calendar', $option_calendars[$i]); - if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){ - $shared = false; - }else{ - $shared = true; +<form id="calendar"> + <p><b><?php echo $l->t('Your calendars'); ?>:</b></p> + <table width="100%" style="border: 0;"> + <?php + $option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); + for($i = 0; $i < count($option_calendars); $i++){ + echo "<tr>"; + $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields'); + $tmpl->assign('calendar', $option_calendars[$i]); + if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){ + $shared = false; + }else{ + $shared = true; + } + $tmpl->assign('shared', $shared); + $tmpl->printpage(); + echo "</tr>"; } - $tmpl->assign('shared', $shared); - $tmpl->printpage(); - echo "</tr>"; -} -?> -<tr> - <td colspan="6"> - <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a> - </td> -</tr> -<tr> - <td colspan="6"> - <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p> - </td> -</tr> -</table><br> -<p><b><?php echo $l->t('Shared calendars'); ?>: </b></p> -<table width="100%" style="border: 0;"> -<?php -$share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR); -$count = count($share); -for($i = 0; $i < $count; $i++){ - $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false); - echo '<tr>'; - $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared'); - $tmpl->assign('share', $share[$i]); - $tmpl->printpage(); - echo '</tr>'; -} -?> -</table> -<?php -if($count == 0){ - echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>'; -} -?> -</div>
\ No newline at end of file + ?> + <tr> + <td colspan="6"> + <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a> + </td> + </tr> + <tr> + <td colspan="6"> + <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p> + </td> + </tr> + </table><br> + <p><b><?php echo $l->t('Shared calendars'); ?>: </b></p> + <table width="100%" style="border: 0;"> + <?php + $share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR); + $count = count($share); + for($i = 0; $i < $count; $i++){ + $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false); + echo '<tr>'; + $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared'); + $tmpl->assign('share', $share[$i]); + $tmpl->printpage(); + echo '</tr>'; + } + ?> + </table> + <?php + if($count == 0){ + echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>'; + } + ?> + </fieldset> +</form>
\ No newline at end of file diff --git a/apps/calendar/templates/part.choosecalendar.rowfields.php b/apps/calendar/templates/part.choosecalendar.rowfields.php index 268c3356011..64aaa797197 100644 --- a/apps/calendar/templates/part.choosecalendar.rowfields.php +++ b/apps/calendar/templates/part.choosecalendar.rowfields.php @@ -1,8 +1,21 @@ -<?php -echo '<td width="20px"><input id="active_' . $_['calendar']['id'] . '" type="checkbox" onClick="Calendar.UI.Calendar.activation(this,' . $_['calendar']['id'] . ')"' . ($_['calendar']['active'] ? ' checked="checked"' : '') . '></td>'; -echo '<td id="' . OCP\USER::getUser() . '_' . $_['calendar']['id'] . '"><label for="active_' . $_['calendar']['id'] . '">' . htmlspecialchars($_['calendar']['displayname']) . '</label></td>'; -echo '<td width="20px"><a href="#" onclick="Calendar.UI.Share.dropdown(\'' . OCP\USER::getUser() . '\', \'' . $_['calendar']['id'] . '\');" title="' . $l->t("Share Calendar") . '" class="action"><img class="svg action" src="' . ((!$_['shared']) ? OCP\Util::imagePath('core', 'actions/share.svg') : OCP\Util::imagePath('core', 'actions/shared.svg')) . '"></a></td>'; -echo '<td width="20px"><a href="#" onclick="Calendar.UI.showCalDAVUrl(\'' . OCP\USER::getUser() . '\', \'' . htmlentities($_['calendar']['uri']) . '\');" title="' . $l->t("CalDav Link") . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/public.svg').'"></a></td>'; -echo '<td width="20px"><a href="?app=calendar&getfile=export.php?calid=' . $_['calendar']['id'] . '" title="' . $l->t('Download') . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/download.svg').'"></a></td>'; -echo '<td width="20px"><a href="#" title="' . $l->t('Edit') . '" class="action" onclick="Calendar.UI.Calendar.edit(this, ' . $_['calendar']['id'] . ');"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/rename.svg').'"></a></td>'; -echo '<td width="20px"><a href="#" onclick="Calendar.UI.Calendar.deleteCalendar(\'' . $_['calendar']['id'] . '\');" title="' . $l->t('Delete') . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/delete.svg').'"></a></td>'; +<td width="20px"> + <input type="checkbox" id="active_<?php echo $_['calendar']['id'] ?>" onclick="Calendar.UI.Calendar.activation(this,<?php echo $_['calendar']['id'] ?>)"<?php echo $_['calendar']['active'] ? ' checked="checked"' : '' ?>> +</td> +<td id="<?php echo OCP\USER::getUser() ?>_<?php echo $_['calendar']['id'] ?>"> + <label for="active_<?php echo $_['calendar']['id'] ?>"><?php echo $_['calendar']['displayname'] ?></label> +</td> +<td width="20px"> + <a href="#" class="share" data-item-type="calendar" data-item="<?php echo $_['calendar']['id']; ?>" title="<?php echo $l->t('Share Calendar') ?>" class="action"><img class="svg action" src="<?php echo (!$_['shared']) ? OCP\Util::imagePath('core', 'actions/share.svg') : OCP\Util::imagePath('core', 'actions/shared.svg') ?>"></a> +</td> +<td width="20px"> + <a href="#" onclick="Calendar.UI.showCalDAVUrl('<?php echo OCP\USER::getUser() ?>', '<?php echo rawurlencode(html_entity_decode($_['calendar']['uri'], ENT_QUOTES, 'UTF-8')) ?>');" title="<?php echo $l->t('CalDav Link') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/public.svg') ?>"></a> +</td> +<td width="20px"> + <a href="<?php echo OCP\Util::linkTo('calendar', 'export.php') . '?calid=' . $_['calendar']['id'] ?>" title="<?php echo $l->t('Download') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/download.svg') ?>"></a> +</td> +<td width="20px"> + <a href="#" onclick="Calendar.UI.Calendar.edit(this, <?php echo $_['calendar']['id'] ?>);" title="<?php echo $l->t('Edit') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/rename.svg') ?>"></a> +</td> +<td width="20px"> + <a href="#" onclick="Calendar.UI.Calendar.deleteCalendar(<?php echo $_['calendar']['id'] ?>);" title="<?php echo $l->t('Delete') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>"></a> +</td> diff --git a/apps/calendar/templates/part.editevent.php b/apps/calendar/templates/part.editevent.php index 102366f8f08..ea91192cc66 100644 --- a/apps/calendar/templates/part.editevent.php +++ b/apps/calendar/templates/part.editevent.php @@ -5,9 +5,9 @@ <?php echo $this->inc("part.eventform"); ?> <div style="width: 100%;text-align: center;color: #FF1D1D;" id="errorbox"></div> <span id="actions"> - <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('?app=calendar&getfile=ajax/event/edit.php');"> - <input type="button" class="submit" style="float: left;" name="delete" value="<?php echo $l->t("Delete");?>" onclick="Calendar.UI.submitDeleteEventForm('?app=calendar&getfile=ajax/event/delete.php');"> - <input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='?app=calendar&getfile=export.php?eventid=<?php echo $_['eventid'] ?>';"> + <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/edit.php') ?>');"> + <input type="button" class="submit" style="float: left;" name="delete" value="<?php echo $l->t("Delete");?>" onclick="Calendar.UI.submitDeleteEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/delete.php') ?>');"> + <input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='<?php echo OCP\Util::linkTo('calendar', 'export.php') ?>?eventid=<?php echo $_['eventid'] ?>';"> </span> </form> </div> diff --git a/apps/calendar/templates/part.eventform.php b/apps/calendar/templates/part.eventform.php index 2d86ce4d318..95eecf26223 100644 --- a/apps/calendar/templates/part.eventform.php +++ b/apps/calendar/templates/part.eventform.php @@ -18,7 +18,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid <tr> <th width="75px"><?php echo $l->t("Title");?>:</th> <td> - <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? htmlspecialchars($_['title']) : '' ?>" maxlength="100" name="title"/> + <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? $_['title'] : '' ?>" maxlength="100" name="title"/> </td> </tr> </table> @@ -26,7 +26,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid <tr> <th width="75px"><?php echo $l->t("Category");?>:</th> <td> - <input id="category" name="categories" type="text" placeholder="<?php echo $l->t('Separate categories with commas'); ?>" value="<?php echo isset($_['categories']) ? htmlspecialchars($_['categories']) : '' ?>"> + <input id="category" name="categories" type="text" placeholder="<?php echo $l->t('Separate categories with commas'); ?>" value="<?php echo isset($_['categories']) ? $_['categories'] : '' ?>"> <a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"><img alt="<?php echo $l->t('Edit categories'); ?>" src="<?php echo OCP\image_path('core','actions/rename.svg')?>" class="svg action" style="width: 16px; height: 16px;"></a> </td> <?php if(count($_['calendar_options']) > 1) { ?> @@ -80,7 +80,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid <tr> <th width="85px"><?php echo $l->t("Location");?>:</th> <td> - <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? htmlspecialchars($_['location']) : '' ?>" maxlength="100" name="location" /> + <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100" name="location" /> </td> </tr> </table> @@ -88,7 +88,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid <tr> <th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th> <td> - <textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? htmlspecialchars($_['description']) : '' ?></textarea> + <textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? $_['description'] : '' ?></textarea> </td> </tr> </table> diff --git a/apps/calendar/templates/part.import.php b/apps/calendar/templates/part.import.php index 3850ddde565..2ce3cc34239 100644 --- a/apps/calendar/templates/part.import.php +++ b/apps/calendar/templates/part.import.php @@ -1,30 +1,58 @@ -<div id="calendar_import_dialog" title="<?php echo $l->t("Import a calendar file"); ?>"> -<div id="form_container"> -<input type="hidden" id="filename" value="<?php echo $_['filename'];?>"> -<input type="hidden" id="path" value="<?php echo $_['path'];?>"> -<input type="hidden" id="progressfile" value="<?php echo md5(session_id()) . '.txt';?>"> -<p style="text-align:center;"><b><?php echo $l->t('Please choose the calendar'); ?></b></p> -<select style="width:100%;" id="calendar" name="calendar"> <?php +//Prerendering for iCalendar file +$file = OC_Filesystem::file_get_contents($_['path'] . '/' . $_['filename']); +if(!$file){ + OCP\JSON::error(array('error'=>'404')); +} +$import = new OC_Calendar_Import($file); +$import->setUserID(OCP\User::getUser()); +$newcalendarname = strip_tags($import->createCalendarName()); +$guessedcalendarname = strip_tags($import->guessCalendarName()); +$calendarcolor = strip_tags($import->createCalendarColor()); +//loading calendars for select box $calendar_options = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()); $calendar_options[] = array('id'=>'newcal', 'displayname'=>$l->t('create a new calendar')); -for($i = 0;$i<count($calendar_options);$i++){ - $calendar_options[$i]['displayname'] = htmlspecialchars($calendar_options[$i]['displayname']); -} -echo OCP\html_select_options($calendar_options, $calendar_options[0]['id'], array('value'=>'id', 'label'=>'displayname')); +$defaultcolors = OC_Calendar_Calendar::getCalendarColorOptions(); ?> -</select> -<div id="newcalform" style="display: none;"> - <input type="text" style="width: 97%;" placeholder="<?php echo $l->t('Name of new calendar'); ?>" id="newcalendar" name="newcalendar"> -</div> -<input type="button" value="<?php echo $l->t("Import");?>!" id="startimport"> -</div> -<div id="progressbar_container" style="display: none"> -<p style="text-align:center;"><b><?php echo $l->t('Importing calendar'); ?></b></p> -<div id="progressbar"></div> -<div id="import_done" style="display: none;"> -<p style="text-align:center;"><b><?php echo $l->t('Calendar imported successfully'); ?></b></p> -<input type="button" value="<?php echo $l->t('Close Dialog'); ?>" id="import_done_button"> +<div id="calendar_import_dialog" title="<?php echo $l->t("Import a calendar file");?>"> +<div id="calendar_import_form"> + <form> + <input type="hidden" id="calendar_import_filename" value="<?php echo $_['filename'];?>"> + <input type="hidden" id="calendar_import_path" value="<?php echo $_['path'];?>"> + <input type="hidden" id="calendar_import_progresskey" value="<?php echo rand() ?>"> + <input type="hidden" id="calendar_import_availablename" value="<?php echo $newcalendarname ?>"> + <div id="calendar_import_form_message"><?php echo $l->t('Please choose a calendar'); ?></div> + <select style="width:100%;" id="calendar_import_calendar" name="calendar_import_calendar"> + <?php + for($i = 0;$i<count($calendar_options);$i++){ + $calendar_options[$i]['displayname'] = $calendar_options[$i]['displayname']; + } + echo OCP\html_select_options($calendar_options, $calendar_options[0]['id'], array('value'=>'id', 'label'=>'displayname')); + ?> + </select> + <br><br> + <div id="calendar_import_newcalform"> + <input id="calendar_import_newcalendar_color" class="color-picker" type="hidden" size="6" value="<?php echo substr($calendarcolor,1); ?>"> + <input id="calendar_import_newcalendar" class="" type="text" placeholder="<?php echo $l->t('Name of new calendar'); ?>" value="<?php echo $guessedcalendarname ?>"><br> + <div id="calendar_import_defaultcolors"> + <?php + foreach($defaultcolors as $color){ + echo '<span class="calendar-colorpicker-color" rel="' . $color . '" style="background-color: ' . $color . ';"></span>'; + } + ?> + </div> + <!--<input id="calendar_import_generatename" type="button" class="button" value="<?php echo $l->t('Take an available name!'); ?>"><br>--> + <div id="calendar_import_mergewarning" class="hint"><?php echo $l->t('A Calendar with this name already exists. If you continue anyhow, these calendars will be merged.'); ?></div> + </div> + <input id="calendar_import_submit" type="button" class="button" value="» <?php echo $l->t('Import'); ?> »" id="startimport"> + <form> </div> +<div id="calendar_import_process"> + <div id="calendar_import_process_message"></div> + <div id="calendar_import_progressbar"></div> + <br> + <div id="calendar_import_status" class="hint"></div> + <br> + <input id="calendar_import_done" type="button" value="<?php echo $l->t('Close Dialog'); ?>"> </div> </div>
\ No newline at end of file diff --git a/apps/calendar/templates/part.newevent.php b/apps/calendar/templates/part.newevent.php index f4bb867b180..a4f48aecbc6 100644 --- a/apps/calendar/templates/part.newevent.php +++ b/apps/calendar/templates/part.newevent.php @@ -3,7 +3,7 @@ <?php echo $this->inc("part.eventform"); ?> <div style="width: 100%;text-align: center;color: #FF1D1D;" id="errorbox"></div> <span id="actions"> - <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('?app=calendar&getfile=ajax/event/new.php');"> + <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/new.php') ?>');"> </span> </form> </div> diff --git a/apps/calendar/templates/part.showevent.php b/apps/calendar/templates/part.showevent.php index a4c862ad417..59684d831e5 100644 --- a/apps/calendar/templates/part.showevent.php +++ b/apps/calendar/templates/part.showevent.php @@ -10,7 +10,7 @@ <tr> <th width="75px"><?php echo $l->t("Title");?>:</th> <td> - <?php echo isset($_['title']) ? htmlspecialchars($_['title']) : '' ?> + <?php echo isset($_['title']) ? $_['title'] : '' ?> </td> </tr> </table> @@ -76,7 +76,7 @@ <tr> <th width="85px"><?php echo $l->t("Location");?>:</th> <td> - <?php echo isset($_['location']) ? htmlspecialchars($_['location']) : '' ?> + <?php echo isset($_['location']) ? $_['location'] : '' ?> </td> </tr> </table> @@ -84,7 +84,7 @@ <tr> <th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th> <td> - <?php echo isset($_['description']) ? htmlspecialchars($_['description']) : '' ?></textarea> + <?php echo isset($_['description']) ? $_['description'] : '' ?></textarea> </tr> </table> </div> diff --git a/apps/calendar/templates/settings.php b/apps/calendar/templates/settings.php index feb06655120..56a6a42ee0e 100644 --- a/apps/calendar/templates/settings.php +++ b/apps/calendar/templates/settings.php @@ -1,17 +1,22 @@ <?php /** * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl> - * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de> + * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de> * This file is licensed under the Affero General Public License version 3 or * later. * See the COPYING-README file. */ ?> -<form id="calendar"> - <fieldset class="personalblock"> - <legend><?php echo $l->t('Calendar'); ?></legend> - <table class="nostyle"> - <tr><td><label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label></td><td><select style="display: none;" id="timezone" name="timezone"> +<h2 id="title_general"><?php echo $l->t('General'); ?></h2> +<div id="general"> + <table class="nostyle"> + <tr> + <td> + <label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label> + + </td> + <td> + <select style="display: none;" id="timezone" name="timezone"> <?php $continent = ''; foreach($_['timezones'] as $timezone): @@ -27,31 +32,70 @@ $city=strtr($ex[1], '_', ' '); $continent=$ex[0]; echo '<option value="'.$timezone.'"'.($_['timezone'] == $timezone?' selected="selected"':'').'>'.$city.'</option>'; + var_dump($_['timezone']); endforeach;?> - </select><input type="checkbox" name="timezonedetection" id="timezonedetection"><label for="timezonedetection"><?php echo $l->t('Check always for changes of the timezone'); ?></label></td></tr> - - <tr><td><label for="timeformat" class="bold"><?php echo $l->t('Timeformat');?></label></td><td> + </select> + </td> + </tr> + <tr> + <td> + + </td> + <td> + <input type="checkbox" name="timezonedetection" id="timezonedetection"> + + <label for="timezonedetection"><?php echo $l->t('Update timezone automatically'); ?></label> + </td> + </tr> + <tr> + <td> + <label for="timeformat" class="bold"><?php echo $l->t('Time format');?></label> + + </td> + <td> <select style="display: none; width: 60px;" id="timeformat" title="<?php echo "timeformat"; ?>" name="timeformat"> <option value="24" id="24h"><?php echo $l->t("24h"); ?></option> <option value="ampm" id="ampm"><?php echo $l->t("12h"); ?></option> </select> - </td></tr> - - <tr><td><label for="firstday" class="bold"><?php echo $l->t('First day of the week');?></label></td><td> + </td> + </tr> + <tr> + <td> + <label for="firstday" class="bold"><?php echo $l->t('Start week on');?></label> + + </td> + <td> <select style="display: none;" id="firstday" title="<?php echo "First day"; ?>" name="firstday"> <option value="mo" id="mo"><?php echo $l->t("Monday"); ?></option> <option value="su" id="su"><?php echo $l->t("Sunday"); ?></option> </select> - </td></tr> - - </table> - + </td> + </tr> + <tr class="advancedsettings"> + <td> + <label for="" class="bold"><?php echo $l->t('Cache');?></label> + + </td> + <td> + <input id="cleancalendarcache" type="button" class="button" value="<?php echo $l->t('Clear cache for repeating events');?>"> + </td> + </tr> + </table> +</div> +<h2 id="title_urls"><?php echo $l->t('URLs'); ?></h2> +<div id="urls"> <?php echo $l->t('Calendar CalDAV syncing addresses'); ?> (<a href="http://owncloud.org/synchronisation/" target="_blank"><?php echo $l->t('more info'); ?></a>) <dl> <dt><?php echo $l->t('Primary address (Kontact et al)'); ?></dt> <dd><code><?php echo OCP\Util::linkToRemote('caldav'); ?></code></dd> <dt><?php echo $l->t('iOS/OS X'); ?></dt> <dd><code><?php echo OCP\Util::linkToRemote('caldav'); ?>principals/<?php echo OCP\USER::getUser(); ?></code>/</dd> + <dt><?php echo $l->t('Read only iCalendar link(s)'); ?></dt> + <dd> + <?php foreach($_['calendars'] as $calendar) { ?> + <a href="<?php echo OCP\Util::linkToRemote('caldav').'calendars/'.OCP\USER::getUser().'/'.rawurlencode($calendar['uri']) ?>?export"><?php echo $calendar['displayname'] ?></a><br /> + <?php } ?> + </dd> </dl> - </fieldset> -</form> + </div> +</div>
\ No newline at end of file diff --git a/apps/calendar/templates/share.dropdown.php b/apps/calendar/templates/share.dropdown.php index 07b4c4bced5..391ae83765b 100644 --- a/apps/calendar/templates/share.dropdown.php +++ b/apps/calendar/templates/share.dropdown.php @@ -33,7 +33,7 @@ echo OCP\html_select_options($allusers, array()); </select><br> <ul id="sharewithuser_list"> <?php foreach($users as $user): ?> - <li id="sharewithuser_<?php echo $user['share']; ?>"><input type="checkbox" width="12px" <?php echo ($user['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $user['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li> + <li id="sharewithuser_<?php echo $user['share']; ?>"><input type="checkbox" width="12px" <?php echo ($user['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $user['share']; ?><img src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg'); ?>" class="svg action" style="display:none;float:right;"></li> <script> $('#sharewithuser_<?php echo $user['share']; ?> > img').click(function(){ $('#share_user option[value="<?php echo $user['share']; ?>"]').removeAttr('disabled'); @@ -59,7 +59,7 @@ echo OCP\html_select_options($allgroups, array()); </select><br> <ul id="sharewithgroup_list"> <?php foreach($groups as $group): ?> - <li id="sharewithgroup_<?php echo $group['share']; ?>"><input type="checkbox" width="12px" <?php echo ($group['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $group['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li> + <li id="sharewithgroup_<?php echo $group['share']; ?>"><input type="checkbox" width="12px" <?php echo ($group['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $group['share']; ?><img src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg'); ?>" class="svg action" style="display:none;float:right;"></li> <script> $('#sharewithgroup_<?php echo $group['share']; ?> > img').click(function(){ $('#share_group option[value="<?php echo $group['share']; ?>"]').removeAttr('disabled'); |