Commit Graph

2192 Commits

Author SHA1 Message Date
ralf
cbb2b4f5cd get adLDAPUsers::info() to return false again instead of throwing under PHP 8.x 2022-11-09 12:33:41 +01:00
ralf
6a51e56961 allow to paginate through CalDAV/CardDAV autoindex start-page with accounts 2022-11-07 20:52:41 +01:00
ralf
4f1daddd57 forgot to remove shortcut for debugging before commiting 2022-11-05 09:17:38 +01:00
ralf
5b1fe16e9e New method Api\Accounts::isHuge() is used to NOT query members and (not yet working) disable the column in group-list 2022-11-05 09:12:43 +01:00
ralf
37c0091e3d read memberships in a single SQL query with a JOIN 2022-11-04 17:49:29 +01:00
nathan
8f51b00da3 No need to merge into signature if there is no signature 2022-11-03 10:54:47 -06:00
ralf
9cd64b1e5b fix PHP 8.x Fatal: Cannot access offset of type string on string 2022-11-02 10:49:04 +01:00
nathan
953166b161 Fix problems with links from mail
- unsaved links were not properly displayed
- unsaved links could not be removed
- calendar preserved original links, so even if you removed one it came back
2022-11-01 15:38:58 -06:00
ralf
75c07334df * MySQL 8.0: fix DB backup recorded Int columns as TinyInt and stalls restore
* MySQL 8.0: timestamp columns had no default and did not update automatic
2022-11-01 18:45:33 +01:00
nathan
166168b5bf Admin: Push for categories 2022-10-27 11:13:41 -06:00
ralf
ce5e30dc4c remove all private IP addresses from X-Forwarded-For header, not just 10.0.0.0/8 2022-10-27 14:54:59 +02:00
ralf
352e05d8e8 catch exception in _try_lang to NOT generate a Fatal error by throwing another exception in the handler 2022-10-25 14:31:28 +02:00
ralf
9640bc3e55 do NOT try to access notifications, if not installed or enabled for the user
gives a SQL error, if not installed
2022-10-24 09:11:04 +02:00
nathan
c985338a11 Admin push update fixes
- Implement for categories
- Fix some account update duplication
2022-10-18 11:29:22 -06:00
ralf
b19d75874a Fix PHP 8.x Fatal: array_merge(): Argument #2 must be of type array, null given 2022-10-17 15:58:59 +02:00
ralf
8e3cedbf08 fix error deleting links to files (they have negative ids!) 2022-10-17 12:11:59 +02:00
ralf
664bb86b2a WIP timesheet timers: create a single working time timesheet per configured periode of day, week or month 2022-10-14 10:12:11 +02:00
nathan
359fcf9782 Fix bug where sharing 3 different shares, the third link doesn't work 2022-10-13 11:53:02 -06:00
Hadi Nategh
aa139d2f15 return logout to mobile menu and remove print icon 2022-10-13 16:03:05 +02:00
nathan
475fc869f5 Fix share link to single file
If it's mounted to root, we should serve root
2022-10-12 11:45:05 -06:00
nathan
241b5ec839 Fix some missing translations in merge placeholder display 2022-10-11 15:34:25 -06:00
Hadi Nategh
214f2bd03c Remove extra logout button from mobile top header menu 2022-10-10 13:20:11 +02:00
nathan
479c90dc33 Pass custom filter attributes along
Fixes Status filter shows all possible values
2022-10-07 16:24:42 -06:00
nathan
f8e56edc20 Limit number of accounts (& other select/taglist search results) sent to client 2022-10-04 15:49:07 -06:00
ralf
caef7296ce invalidating/deleting et2-select-cat's cache on adding, updating or deleting categories
Also pushing cat-changes as app "api-cats" to client-side
ToDo: client-side code to update category list in admin or preferences
2022-10-04 12:54:30 +02:00
nathan
5031631dc4 Make two anonymous shares at the same time work 2022-10-03 14:27:11 -06:00
ralf
49ac54b365 Revert "json requests now close the PHP session immediately again and reopen it, if there was an update to the session" as it breaks Collabora editing
This reverts commit fe4d0dbbe3.
2022-09-27 19:02:20 +02:00
nathan
5027e075d7 Allow groups to have lavatars 2022-09-26 15:16:38 -06:00
ralf
fe4d0dbbe3 json requests now close the PHP session immediately again and reopen it, if there was an update to the session
this allows to run more PHP requests in parallel
2022-09-24 15:50:44 +02:00
ralf
84d65bcf3b there is currently no avatar for groups, no need to ask server about it 2022-09-24 14:44:42 +02:00
nathan
00c9550465 Fix selects without empty_label were not allowed to be empty in some cases, even without required=true
For example select-account multiple=true, or customfield select-account with rows > 1 would give error "'' is NOT allowed ('not found')"
2022-09-23 09:39:50 -06:00
nathan
159a370da6 Fix more than one anonymous shares gave error / BasicAuth prompt
First one was successful, but subsequent anonymous shares in the same browser failed
2022-09-20 11:33:16 -06:00
ralf
1260203755 setting minimum version for 22.1 to PHP 7.4, recommended and maximum version to PHP 8.1 2022-09-20 13:53:07 +02:00
ralf
5dcc670ac0 nicer way to set current Vfs user and also not overwriting the default context 2022-09-16 09:33:09 +02:00
ralf
0f376ae6df * LDAP/AD/OpenID Connect: fix error creating tokens with profile claim, if user has a picture 2022-09-16 09:14:38 +02:00
ralf
c59b5a7a6e document how to test LDAP/AD behavior 2022-09-16 09:13:01 +02:00
ralf
1989e1a949 fix PHP 8.1 makes all schema errors fatal, change that back to previous behavior, to ease updates 2022-09-14 14:45:09 +02:00
ralf
0c11d2fd59 fix OpenID scope "profile" gives error that it cant create /home//.tmp 2022-09-14 10:01:33 +02:00
nathan
cfbb74b83e Fix some Et2DateDuration bugs
- Duration did not validate correctly
- Validation errors were not actually shown
- Empty duration ('') did not work consistently
2022-09-13 13:00:25 -06:00
ralf
52cca3676e Revert "reinsert filtered <style></style> section at initial position"
It seems to lead to a significant higher memory usage and did NOT fix the problem it was supposed to fix (empty line above email after sending)

This reverts commit 4e0bb13571.
2022-09-13 08:24:11 +02:00
ralf
26824323e5 got mailing lists working again in mail compose using includeLists=true attribute
using "$list_name <$list_id@lists.egroupware.org>" instead of just integer ids for the list, thought et2-select-mail is NOT displaying the mailing-list icon, after a mailing-list is selected
2022-09-12 14:51:13 +02:00
Hadi Nategh
f7c8c09a4b Drop tutorials 2022-09-12 13:24:00 +02:00
ralf
e916dda8a6 disallow https-urls too 2022-09-12 12:50:31 +02:00
ralf
b13c1d97b4 fix PHP 8.x throws mysqli_sql_exception when it can not connect 2022-09-09 08:24:39 +02:00
ralf
4e0bb13571 reinsert filtered <style></style> section at initial position
no longer at the beginning as this can insert unwanted extra lines in mail, if signature contains a style block
2022-09-08 16:52:49 +02:00
Hadi Nategh
a35b7e578b Revert accidentally removed condition on status 2022-09-07 12:06:38 +02:00
Hadi Nategh
e0b98b7c4c Change framework user avatar to et2-avatar 2022-09-07 11:53:29 +02:00
ralf
c31b99112d * Mail: remove left (and right) margin of p and div, which can interact bad with the signature 2022-09-06 15:41:45 +02:00
ralf
cf355d1d5c do NOT stall because DB does not know the TZ, report once per session
Happens with PHP 8.1 and older MariaDB (or MySQL) without (loaded) timezone data
Unknown or incorrect time zone: 'UTC'
2022-09-05 10:52:29 +02:00
nathan
a3d2674757 Et2Select + search: Fix some bugs
- Select a searched value didn't validate due to different attribute name
- et2-searchbox inside et2-select threw an additional change event, needed to catch that
- fix_bad_value() needs different handling when you can search, otherwise it just gets cleared again
2022-08-31 13:28:20 -06:00
nathan
33dcbc218f Revert "Calendar: Fix some kanban listen problems"
This reverts commit 59e64cd908.
2022-08-25 10:16:05 -06:00
nathan
59e64cd908 Calendar: Fix some kanban listen problems
- Status filter isn't really applicable
- Priority was missing its options
2022-08-25 10:13:32 -06:00
nathan
0ae69429b5 Fix CustomFilterHeader did not work properly
Some transformations were not correctly handled, and events were therefor not bound
2022-08-16 09:29:08 -06:00
ralf
cad42eb6aa fix validation of taglist now send to select, specially using "id" attribute, if there is no "value"
also check modifications of select_options, as done in preferences
fixes not validating mail preferences: toggleOnActions and contactLabel
2022-08-10 14:39:19 +02:00
ralf
ea0cbd0441 account selection currently only need to use server-side search, for pref "Primary group and search"
for all other types the local search is sufficient, as everything is already local!
fix Taglist::ajax_search for accounts to pass the icon to client-side and always set value instead of id
2022-08-09 10:47:57 +02:00
ralf
e7eb9f42e3 fix many errors around et2-select emulating old taglist:
- preprocessor: translate attributes autocomplete_url -> searchUrl, autocomplete_params -> searchOptions, and allow options
- sending search query as URL/GET parameter with default of app: <appname>
- handle searchUrl like allowFreeEntries by adding selected result to select_options via createFreeEntries, as they otherwise get removed by fix_bad_value not finding the value in select_options
- change taglist validation (again) to not validate search values
- still requires changes in application code, as taglist always behaved like multiple=true (returning and expecting an array of values) and did automatically search from client-side for it's initial value(s)
--> maybe more changes are in order to NOT require changing application code
--> fixes editing Sieve rules
2022-08-08 17:28:51 +02:00
ralf
bb28500ef7 fix mail preferences could not be saved 2022-08-05 20:20:46 +02:00
ralf
3c4b03ca3c * SAML/Univention: support for Univention SAML IdP for SSO incl. docu 2022-08-04 20:10:23 +02:00
ralf
d540576656 do NOT allow to call Api\Etemplate\Widget\Link::ajax_delete() without a positive link_id 2022-08-04 19:37:23 +02:00
nathan
e984ccf9a4 Fix double categories in nextmatch 2022-08-03 10:51:28 -06:00
ralf
b00136f178 coping with new et2-tab-box widget:
- change preprocessor to always us it
- giving tab-panels again some padding-top
- change et2_grid to NOT set a width, if cell has a colspan
- switching table-layout: fixed off again, as it does not work well with infolog.edit
- remove dropped Chosen, jQuery-UI, MagicSuggest and old blueimp gallery from Gruntfile
- simplified infolog.edit a bit, which gives better results
2022-08-03 10:57:49 +02:00
nathan
7375768e25 Fix tabs=>extraTabs did not validate properly 2022-08-02 16:45:01 -06:00
ralf
5d1ccb55a0 fix some more missing images in calendar 2022-08-02 14:03:52 +02:00
ralf
b1660cc799 fix missing-eT2-request redirects sometimes use the webserver_url twice and therefore getting a 404 Not found 2022-07-31 09:29:43 +02:00
ralf
22a320ea48 forgot to commit adding install_mailto_handler whitelisting for client-side 2022-07-26 10:07:18 +02:00
ralf
010197b8af get merge to merge jpegphoto too and save can store it in filesystem 2022-07-25 11:19:41 +02:00
ralf
2e5b87a6e1 fix typo in docu 2022-07-25 11:19:41 +02:00
ralf
e90ae88a20 fix preprocessor and transformer can't know if application widget is a web-component or a legacy widget
- white-list now records-* like et2-* widgets for camelCase attribute names
- server-side transformer also transforms attribute-names to camelCase for widget-type et2-*
- client-side transformAttributes() also transforms attribute-names to camelCase for widget-type et2-*
--> hopefully this can be dropped, once als widgets are web-components
2022-07-22 11:08:55 +02:00
nathan
b20f57d5ba Fix select-type would not validate server side 2022-07-19 11:55:08 -06:00
nathan
1a2e691cbb Fix some bugs with static options being repeated
- Select Tab options being sent from server & cached
- Static options not properly set for all selects
2022-07-19 11:47:03 -06:00
nathan
dc23a18f85 Categories are cached client side now 2022-07-19 10:32:33 -06:00
ralf
bec95a4a9d et2-select-tab widget to fix common preferences not storing and some fixes 2022-07-19 15:17:43 +02:00
Hadi Nategh
a49cc54bdd * Mail/Sieve: fix vacation notice activated by date does not work if the start date is set in future 2022-07-18 14:00:18 +02:00
nathan
4256b589e7 Use substr instead of str_starts_with to avoid PHP 8.0 2022-07-15 13:40:18 -06:00
nathan
5793b462ba Fix et2-select widgets in template did not validate 2022-07-15 12:48:25 -06:00
nathan
96354be5ec Get text editor toolbar preference working with webcomponents 2022-07-14 13:22:48 -06:00
nathan
53e5e45a5d Better handling for options with more properties set (title, icon)
Previously they were being discarded
2022-07-14 13:16:48 -06:00
ralf
733770ea36 * SAML: generate a self-signed certificate (not just the public key) 2022-07-11 20:27:49 +02:00
ralf
480e913151 add uid to selectable username attributes 2022-07-11 12:22:06 +02:00
ralf
aefe04d3b8 WIP LDAP import 2022-07-11 07:54:16 +02:00
ralf
a80d810926 fix broken setting of CSP via hook since commit a304f34e6b
(fix PHP Error: [] operator not supported for strings)
2022-07-08 14:15:30 +02:00
ralf
c9b61be8d2 fix PHP Deprecated warning: Automatic conversion of false to array is deprecated 2022-07-08 10:10:17 +02:00
nathan
ed16ce52a2 Change nextmatch headers to use web components 2022-07-07 13:18:42 -06:00
ralf
aab768d87f WIP implement VLV search for LDAP too and also filtering by >=modifyTimestamp used for account-import 2022-07-07 07:57:33 +02:00
ralf
c151f7786f fix not always working instantiation for contacts and accounts objects differing from global configured repository 2022-07-06 21:27:44 +02:00
ralf
6fb464d90b * ActiveDirectory/LDAP: implemented deleting of accounts via full/initial import, periodic import does NOT delete 2022-07-06 17:08:44 +02:00
nathan
c8ccf78550 Accept search & search options from SearchMixin
We want it in the signature, even if we don't use it right now.
2022-07-05 10:13:06 -06:00
ralf
c616f1c6b5 fix some typos and IDE warnings 2022-07-05 15:18:50 +02:00
ralf
94e74f8db4 * Mail/Dovecot: allow to use admin credentials to access mail when no session password is available, e.g. for SSO 2022-07-05 15:16:01 +02:00
ralf
a5fbb5c4ef fix 404 Not Found / wrong redirect after expired/no longer existing eT2 session 2022-07-05 08:43:53 +02:00
ralf
9a407d8ebb fix adding/removing group-memberships were not imported as change is on the group not the user 2022-07-04 11:18:02 +02:00
Hadi Nategh
cb2fe3f93c * Mobile view: fix broken Security & Password menu 2022-07-01 09:34:50 +02:00
ralf
242e055f53 * ActiveDirectory: allow to configure an optional group-context
also fixes problems with Univention AD storing stock groups (eg. Domain Users) in a different OU=Groups than users
2022-06-30 16:44:51 +02:00
ralf
970c22b2a2 some fixes for LDAP/ADS account import:
- fix not working "Users, groups and memberships" option
- calling add/edit account/group hooks to eg. create home-directories and mail-accounts
2022-06-30 15:17:19 +02:00
ralf
a304f34e6b fix PHP Error: [] operator not supported for strings 2022-06-29 08:59:59 +02:00
ralf
2dd3a25b35 WIP ADS/LDAP account import:
- implement import from groups and memberships
--> ToDo: deleting of accounts and testing with LDAP
2022-06-28 22:21:08 +02:00
nathan
4f4b83733c Mail: Re-size header labels in display popup, change mail date widget to date-time-today 2022-06-28 10:18:42 -06:00
ralf
e28329b1d7 WIP ADS/LDAP account-import:
- refactored to a class
- added async import and logging
--> ToDo: groups, deleting of users and testing with LDAP
2022-06-28 16:58:38 +02:00
ralf
ee58655ce6 WIP ADS/LDAP account-sync:
- using (simple) paged result for initial sync
- incremental sync uses modification time
- currently only user and no periodic sync yet
2022-06-27 21:08:34 +02:00
ralf
f2e20eddba fix addressbook edit for new Et2SelectCountry&State:
- using allowFreeEntries for custom country-names and storing, as before, region-name not the -code
- also fix flags to show nothing for custom / free country-names
Not entirely happy about it, but not willing to spend/waste more time on this tiny feature
2022-06-23 10:06:01 +02:00
ralf
296cffc109 run egw destructor explizit for merge-downloads to allow eg. notifications emails in shutdown handler 2022-06-22 09:57:33 +02:00
ralf
1894a19a86 fix ValueError: str_repeat(): Argument #2 ($times) must be greater than or equal to 0
Also replace HTML entities, as we're converting to text
2022-06-21 14:15:28 +02:00
nathan
f13bf7b154 Et2SelectThumbnail 2022-06-17 13:07:33 -06:00
ralf
26492c4260 fix for US numbers formatted as "+1 123-456-7890" 2022-06-16 15:04:49 +02:00
ralf
669f679fbc change our CSP to allow data: for connect-src, which is used by Shoelace to "load" icons 2022-06-13 13:19:54 +02:00
nathan
531cc473e2 Et2Select: Implement allowFreeEntries & editModeEnabled properties
Also added Et2SelectEmail, which uses them
2022-06-10 10:11:34 -06:00
ralf
a3a893ae14 allow to request merged download in a different format eg. PDF 2022-06-10 10:52:26 +02:00
ralf
597a983264 no longer load TinyMCE styles for preview and change TinyMCE margin to 10px we have in preview 2022-06-09 09:48:52 +02:00
nathan
796c0a33df Et2SelectCat: Add in category colors & icons 2022-06-06 16:09:08 -06:00
nathan
aa20af559a LinkApp selection 2022-05-27 14:11:35 -06:00
ralf
89615cf9de * CalDAV/CardDAV/TbSync: fix wrong/minimal privileges on sub-collections causing TbSync not to display this calendars or addressbooks 2022-05-27 12:03:37 +02:00
ralf
b33c13824f drop jquery-ui, jquery-ui-touch-punch-fix and temp. comment out last usages in framework classes 2022-05-25 21:01:26 +02:00
ralf
50b9a15436 add calendar-proxy-(read|write)-for properties on principal as requested by TbSync 2022-05-24 20:22:33 +02:00
ralf
7a55eef6c8 fix typo in preference name rt(e)_font* 2022-05-23 12:48:30 +02:00
ralf
55a13aa99d refactor VLV and server-side sorting into a trait, so it can be used in Accounts\Ldap too 2022-05-20 21:49:08 +02:00
ralf
ab427562b7 * LDAP: implement optional group-filter
also some code cleanups and fixes
2022-05-20 21:47:02 +02:00
ralf
c57ae62d1c fix not working installation under PHP 8.1 due to mysqli throwing errors now by default 2022-05-20 18:00:54 +02:00
nathan
b9d145a40b Link fixes
- Fix actual Expose didn't work on links themselves
- Adjust delete button / context menu caption to match file/link
2022-05-12 10:08:59 -06:00
ralf
a3a63f3586 * Filemanager: use bigger popups to open files (PDF: 1024*1024, text: 800*1024, images: 640*800) 2022-05-12 15:30:23 +02:00
ralf
40a42ed1c8 fix broken file-access cache after a917293 (fix smallPART file-access depending on full path)
fix wrong condition when storing an attachment, either the file or it's directory must be writable
2022-05-12 15:16:55 +02:00
ralf
6602078660 fix "Network error" download a log via our Api\Json\Tail class eg. CalDAV/CardDAV log 2022-05-12 11:28:17 +02:00
ralf
1fb46bb74c display attachments also as a block (fieldset) replacing the ruler, if one is configured 2022-05-11 18:05:54 +02:00
ralf
6d57d81faa fix smallPART file-access depending on full path (not just /apps/smallpart/$id!)
allow apps like smallpart to additional return 0|1 instead of bool, to not cache result, if it depends on $rel_path, as cache does not consider $rel_path
2022-05-11 13:49:57 +02:00
ralf
c2b0d713c3 never set a full path as filename of an attachment as it triggers rejection for some mail-servers 2022-05-11 10:36:43 +02:00
ralf
b7d3b7408e WIP get TinyMCE to respect users preferred font and -size 2022-05-10 18:46:12 +02:00
ralf
ced6c77f46 fix PHP 8.x TypeError sending mail 2022-05-10 18:43:30 +02:00
ralf
9a0cc36366 fix PHP 8.1 throws \mysqli_sql_exception or \PDOException for SQL errors
- change them to our regular Api\Db\Exception
- for prop(find|patch) explicitly catch PDOException to deal more graceful with non-ascii prop-names
2022-05-10 12:36:25 +02:00
ralf
c4e0989bf9 replace original message header with fieldset in html and convert it to plain as before 2022-05-10 11:51:35 +02:00
ralf
7e70eee888 final fix for "Network error" when stream files to client
It is important to FIRST disable zlib.output_compression (before headers are sent!) and THEN end all output-buffering!
Without the two steps in this order, we are either limited by the memory limit or get the "Network error", because the streaming/fpassthrough does not apply the compression.
2022-05-05 12:47:31 +02:00
ralf
13c633b064 lower number of rows queried per chunk to 2000 to avoid memory_limit on huge tables 2022-05-04 12:22:29 +02:00
nathan
10af4f7514 Historylog + webcomponents
- historylog widget now uses webcomponents for timestamp & user, and whenever possible for values
- History::get_rows() formats customfield date/date-time values as needed
- implement setDetachedAttributes(), if nextmatch & historylog are calling them on webcomponents, might as well use that to set what they pass
2022-05-03 11:01:42 -06:00
ralf
38d44ee3e2 fix some egw_LAB not defined errors by using top.egw_ready instead 2022-05-03 15:40:06 +02:00
ralf
9dd44f7929 fix not loaded grants / other users categories after last commit 2022-05-03 13:33:51 +02:00
ralf
7fb436d44c HistoryLog: making sure server-side sends eT2 compatible values and use new Et2DateTimeReadonly widget
thought set_value of web-component get not called and nothing is displayed therefore
2022-05-03 11:25:55 +02:00
ralf
1215762f04 if data_format given, try that first, before leaving it to Api\DateTime to figure it out 2022-05-03 09:46:15 +02:00
ralf
9b6e6ad819 fix empty date customfield caused by not set app-name, defaulting to currentapp now 2022-05-03 09:12:20 +02:00
nathan
ae73511958 Make sure customfields get their set_row_value() method called. Fixes customfield dates were not sent in correct format 2022-05-02 17:06:33 -06:00
ralf
df938c79de fixed messed up signature changing from / mail-accounts
also fixed some undefined warnings
2022-05-02 17:19:37 +02:00
ralf
78c9b4ac50 fix displayed [] instead of [Login] 2022-05-02 09:15:46 +02:00
ralf
ef7c175814 remove jQueryUI DateTime picker and splitter and use them also for eTemplates marked as legacy 2022-04-29 17:05:43 +02:00
ralf
4fd00df861 fix diverse undefined array-key or variable warnings 2022-04-29 12:44:43 +02:00
ralf
0758e17d24 * CalDAV/Calendar: expand-property report used by iCal app (Mac) did not return rights on other users calendar
but other users/groups which have rights on the queried users calendar
Also on longer enumerate group-members in group-memberships as calendar-proxy-(read|write) groups, as iCal app understands group-memberships.
2022-04-28 16:10:16 +02:00
ralf
a32bb2abde do NOT log not found template because of missing $row_cont expansion on server-side 2022-04-28 10:39:08 +02:00
nathan
fd53dfe82b Fix PHP error if cf['type2'] is a single value, not array 2022-04-27 11:55:03 -06:00
ralf
03099756d7 fix PHP 8.1 Error: Serialization of 'LDAP\Connection' is not allowed 2022-04-27 13:00:10 +02:00
nathan
1c42668a97 Change sidebox calendar from jQuery to webcomponent / flatpickr 2022-04-26 15:27:49 -06:00
ralf
2d0de5f287 another chunk of fixed PHP Warning: Undefined array key or variable in api 2022-04-26 20:24:37 +02:00
ralf
917a833f89 fix "a ton" of PHP Warning: Undefined array key or variable in mail code 2022-04-26 18:46:38 +02:00
ralf
941142c5be fix CallbackIterator to return mixed, as it can be overwritten with a callback 2022-04-24 21:27:53 +02:00
ralf
128b6b06df fix PHP 8.x TypeError: string & int 2022-04-24 20:52:49 +02:00