Jonathan Barratt
e82e5fcd5f
urlquote email address when used as get query param
2016-12-11 06:20:03 +07:00
Pawel M
94c39cba69
solves Title changed to . (Null title) on failed attachment upload.
2016-12-11 06:00:05 +07:00
Jonathan Barratt
5acd891c68
refactor all handling of attached files
...
Extract attachment processing from forms, views.staff, and management.command.get_email modules, and consolidate it into a unified lib module function.
Also refactor the affected components, most notably lib.send_templated_email, to make it easier (IMO) to reason about changes to them.
Add unit tests for attachments with UTF-8 filenames, and functional tests for submission of same, as well as ASCII versions, through the public ticket-form.
Remove unused Attachment method "get_upload_to".
2016-12-08 19:47:20 +07:00
Jonathan Barratt
391e35065c
per code review, update safe IP addr/port constants, remove commented-out code, and add comments to unexplained code
2016-12-06 09:55:22 +07:00
Jonathan Barratt
e8d0c5b2c7
implement mocked pop3 and imap tests for get_email
...
also update travis to latest django patch releases
2016-12-02 19:04:52 +07:00
Alex Seeholzer
399b0901f6
newer version of tests
2016-12-02 17:40:46 +07:00
Alex Seeholzer
72a99cc99a
Moved existing test for local mailbox into generation of tests for matrix of email configurations;
2016-12-02 17:40:46 +07:00
Jonathan Barratt
3cfa371199
hotfix for #456 : patch calls to ticket_from_message
...
add logger arg where missing in get_email
2016-11-29 00:46:42 +07:00
Jonathan Barratt
cac3267e82
Merge pull request #454 from reduxionist/prune-legacy-code
...
Prune legacy code
2016-11-21 20:32:35 +07:00
Jonathan Barratt
45a8ce98ac
Merge pull request #455 from gwasser/ticket_list_view
...
Use HTML5 table ordering based on Unix epoch
2016-11-21 20:29:13 +07:00
Garret Wassermann
04f27fdcff
Use HTML5 table ordering based on Unix epoch
2016-11-21 00:12:24 -05:00
Jonathan Barratt
7738bba2ab
remove special-case imports for legacy versions
...
standardise use, or avoidance, of timezone, template from_string, and Context
2016-11-21 10:16:03 +07:00
Will Stott
f34696df8d
Use Django's six module for StringIO imports.
2016-11-17 11:25:46 +00:00
Garret Wassermann
97a24fbe22
Ensure that local files are deleted after processing, and add some information about it to the install.rst documentation
2016-11-12 11:32:04 +07:00
Jonathan Barratt
ebfea8274d
convert reverse-URL lookups to helpdesk namespace
...
in views.staff, this fixes:
-run_report's no-tickets-found redirect to report_index
-del_attachment's redirect to parent ticket view after deletion
2016-11-11 10:31:37 +07:00
Alex Barcelo
b0b68b9541
drop south_migrations folder
2016-11-02 17:22:47 +01:00
Alex Seeholzer
62163eaf0e
patch: implicit closing of open files;
2016-11-01 15:03:51 +01:00
Garret Wassermann
2a7d82413b
Miscellaneous improvements from review of #419
2016-10-31 02:57:08 -04:00
Garret Wassermann
37b9d332de
Fix some more missing namespace references for login and kb_category
2016-10-31 02:19:41 -04:00
Garret Wassermann
c74208325b
Removed test_per_queue_staff_permission assertion, report_index no longer returns unassigned_tickets
2016-10-31 02:06:49 -04:00
Garret Wassermann
26f4987726
Fix a missing helpdesk namespace reference in report_index.html
2016-10-31 01:42:45 -04:00
Garret Wassermann
194641613c
Sync with upstream, merged in AbstractForm with bootstrap class
2016-10-31 01:38:49 -04:00
Alex Barcelo
abd6fdcebe
simplifying if-case branches on CustomFieldMixin
2016-10-30 20:53:18 +01:00
Alex Barcelo
cce12181f0
refactoring single-letter variables into better names
2016-10-30 20:43:05 +01:00
Alex Barcelo
681a1893bd
missed a refactoring
2016-10-30 08:42:05 +01:00
Alex Barcelo
d8d10fae90
DRY in *TicketForm --by adding an Abstrat~ one
2016-10-30 08:39:17 +01:00
Alex Barcelo
bea6fbf75a
fixing a deprecated usage, and adding a minor branch control
2016-10-30 08:38:49 +01:00
Garret Wassermann
adf2b16c2c
Fix namespaces in test
2016-10-29 04:33:27 -04:00
Garret Wassermann
dc25164304
More PEP8 changes (hopefully last)
2016-10-29 04:27:29 -04:00
Garret Wassermann
4cf46156f1
More PEP8 changes
2016-10-29 04:20:16 -04:00
Garret Wassermann
1f1d477a35
Sync again with master 0.2
2016-10-29 04:11:41 -04:00
Garret Wassermann
d791700582
Fix PEP8 errors
2016-10-29 04:08:57 -04:00
Jonathan Barratt
28308d19fb
cleanup build-breaking whitespace merge errors
2016-10-29 14:59:14 +07:00
Garret Wassermann
cad174468b
Sync with namespace and other v0.2 changes
2016-10-29 03:47:15 -04:00
Jonathan Barratt
26c0f2e59f
Merge pull request #441 from alexbarcelo/api-prune
...
Remove all the deprecated API related files and references
2016-10-29 14:12:31 +07:00
Alex Barcelo
53ed0d3a2c
Remove all the deprecated API related files and references
2016-10-29 08:50:13 +02:00
Jonathan Barratt
43c067dd4f
merge changes from updated master
2016-10-29 13:35:03 +07:00
Jonathan Barratt
790f1fc003
Merge pull request #374 from alexbarcelo/urls_app_name
...
Set app_name as 'helpdesk' at the urls.py, and droping url prefixes
2016-10-28 15:59:29 +07:00
Alex Barcelo
6761ad6c10
fixing RST syntax for docstring on akismet.py
2016-10-26 10:22:15 +02:00
Alex Barcelo
f017adea63
fixing those two python files
2016-10-24 10:05:41 +02:00
Alex Barcelo
89a6ae01b8
Fixing style (according to branch 'autocodestyle') + quicktest
2016-10-24 08:04:31 +02:00
Alex Barcelo
179ceb2f82
fixing style on tests
2016-10-23 22:10:32 +02:00
Alex Barcelo
30e3aa55aa
almost auto-fix on misc files
2016-10-23 22:09:17 +02:00
Alex Barcelo
3c35473265
fixing views.py (except deprecated api)
2016-10-23 22:02:02 +02:00
Alex Barcelo
24d88be8d9
Initial general clean-up of stuff
2016-10-21 17:14:12 +02:00
Garret Wassermann
d7875587b7
Revert previous change
2016-10-20 12:05:28 -04:00
Garret Wassermann
884662dd21
Ensure binary data is returns so Django can decode it
2016-10-20 11:46:09 -04:00
Garret Wassermann
dfb7987ebb
Remove emails from queue in test_get_email
2016-10-20 11:17:51 -04:00
Garret Wassermann
197fad99d2
Remove mail templates since we're not testing them here; might be good to include a test for this elsewhere
2016-10-20 02:48:14 -04:00
Garret Wassermann
5e93297787
Fix call_command options for correct format to work with Django 1.7+
2016-10-20 02:29:23 -04:00
Garret Wassermann
6418194b85
Fix command line arg for Django 1.7 and make Python 2 and 3 compatible test
2016-10-20 02:21:43 -04:00
Garret Wassermann
9606201200
Fix mock tests for get_email (hopefully for good this time)
2016-10-20 02:09:05 -04:00
Garret Wassermann
b7ef83f7d2
Check that folder is a dir before checking for mail using get_email; fix unit test for --quiet
2016-10-20 01:39:24 -04:00
Garret Wassermann
e3c9e04feb
Fix python module naming in get_email test
2016-10-20 01:25:16 -04:00
Jonathan Barratt
af893bdcc8
Merge pull request #428 from jflesch/master
...
Fix form translations
2016-10-20 12:16:31 +07:00
Daryl
3b181e87ef
Fix inconsistent indentation
2016-10-20 11:43:22 +07:00
Garret Wassermann
c9c7642724
New unit test for get_email command
2016-10-19 21:37:23 -04:00
Garret Wassermann
f61d180e5d
use django.utils.six instead of plain six
2016-10-19 20:02:12 -04:00
Alex Barcelo
91afbb9755
fixing some additional reverse stuff
2016-10-19 15:30:37 +02:00
Alex Barcelo
afd6ebad74
Merge current 'master' state into urls_app_name
2016-10-19 15:26:04 +02:00
Jerome Flesch
74668f30d5
forms.py : To get the translations for the fields' labels, use ugettext_lazy() instead for ugettext().
...
ugettext() loads the translations at the same time the module is loaded (--> always in english).
ugettext_lazy() loads them when they are needed (--> when the user makes a query --> we known the language the user wants based on the header of their HTTP request)
Signed-off-by: Jerome Flesch <jflesch@gmail.com>
2016-10-18 15:37:57 +02:00
Jerome Flesch
0ad110ec7f
forms.py: cleanup whitespaces
...
Signed-off-by: Jerome Flesch <jflesch@gmail.com>
2016-10-18 15:35:41 +02:00
meomap
96f4fecb71
add setting for fallback locale
2016-10-14 15:04:28 +07:00
Ross Poulton
138904bf8b
Update project URLs per #424
2016-10-12 11:14:10 +11:00
Ross Poulton
1f4ca64ef4
Update translations (part of #424 )
2016-10-12 10:54:24 +11:00
Antoine Nguyen
50955cb8f6
Fixed Meta class definition for TicketCustomFieldValue.
2016-10-07 11:00:25 +02:00
Garret Wassermann
3f620e83a2
Update style of Ticket FollowUp list to be a timeline
2016-09-27 17:29:59 -04:00
Garret Wassermann
929ec49fa8
Apply styling to KB pages. Minor tweak to dashboard.
2016-09-27 14:36:52 -04:00
Garret Wassermann
414f7e7c03
Make Knowledgebase categories nicer; include jQuery UI for DatePicker on new ticket form
2016-09-27 13:16:28 -04:00
Garret Wassermann
186b4ad8e2
Some of CSS changes were not included due to a conflict in the gitignore file. Updated gitignore and added missing CSS directory.
2016-09-27 10:57:21 -04:00
Garret Wassermann
f313b5c374
Added more logging statements, cleaned up a few others
2016-09-16 00:28:13 -04:00
Garret Wassermann
a4ad602f39
Remove unnecessary imports, clean up python3 handling code to use native str()
2016-09-15 22:51:00 -04:00
Garret Wassermann
e5c3c4a435
Used six to add python3 compatibility along side existing python2, and replaced print statements with logging features. Can now poll a local directory for mail too, not just remote POP3/IMAP.
2016-09-14 20:35:18 -04:00
Garret Wassermann
6a86a0106a
Updated report_index() to remove the context= so it matches the syntax of dashboard() function.
2016-09-13 00:31:56 -04:00
Garret Wassermann
bf55ab7f8c
Oops, forgot to change one more URL from dashboard to report_index
2016-09-13 00:13:52 -04:00
Garret Wassermann
fe54d81022
Update unit test for backend changes to dashboard and statistics pages
2016-09-13 00:06:38 -04:00
Garret Wassermann
4203f352d9
Completely resolved jQuery issue with multiple file attachment submission on a single FollowUp due to CSS styling of file input buttons. It's really ridiculous you have to do this, but whatever. It works as expected.
2016-09-12 23:18:01 -04:00
Garret Wassermann
3002cf689c
Fix CSS styling of Status radio buttons on Ticket Comment form
2016-09-12 22:54:51 -04:00
Garret Wassermann
76241b8661
Fix jQuery error with adding multiple attachments to a single FollowUp. It work when adding files one at a time but gets a little funny when adding more than one input field at a time. Also, moved RSS Feeds link to user menu to be more accessible.
2016-09-12 22:37:48 -04:00
Garret Wassermann
00cdbcf43b
Finish CSS template changes for Ticket page and related properties; includes responsive Ticket list table; styled file input buttons but need to find way to update text for beyond the first input box; added a ticket_attachment_del page to confirm removal of attachment and styled it
2016-09-12 02:11:55 -04:00
Garret Wassermann
a9cb54ce7e
Remove older static files, update User Settings
2016-09-11 12:30:48 -04:00
Garret Wassermann
e0875b212b
Updated CSS for Ticket list and Ticket editing pages, added Font Awesome's LICENSE to list
2016-09-10 04:00:22 -04:00
Garret Wassermann
67f81ac252
Continue CSS cleanup for Ticket description, remove unneeded priority and button images and associated functions
2016-09-09 04:03:32 -04:00
Garret Wassermann
d66259efdc
Update dashboard and reports to new style, add more CDN support for new javascript libraries
2016-09-09 02:45:12 -04:00
Garret Wassermann
4c89da89b5
Updated navbar, base, public_base and login page to use new StartBootstrap SB Admin v2 theme
2016-09-07 02:50:16 -04:00
Jan Beran
8341ad217c
Syntax correction for Python 3.4 and 3.5
2016-08-17 22:01:09 +02:00
Garret Wassermann
1c09f4a3c3
Moved Buttons and Priorities images back to main static folder
2016-08-05 00:50:40 -04:00
Garret Wassermann
014af24d2d
Added a HELPDESK_USE_CDN setting, off by default, to select between using public CDNs as before, and an up-to-date static copy
2016-08-05 00:38:17 -04:00
Garret Wassermann
d9480c9cf0
Update static jQuery and other js/css, disable CDN usage
2016-08-04 23:57:35 -04:00
Ross Poulton
f2e497c3c6
Merge pull request #415 from mhannig/fix-broken-keyword-search
...
JSON Serialization broke Keyword-Searches
2016-07-05 08:48:10 +10:00
Matthias Hannig
a37f7145ec
Serializing the query using JSON for SavedSearches unfortunately broke
...
Keyword-Searches.
Now, only the search string is serialized for saving and
the "qset" is moved from "other_filters" to apply_query.
2016-07-04 17:47:53 +02:00
Ross Poulton
03b3a70975
Merge pull request #410 from mrkiwi-nz/fix_savequery
...
Fix savequery
2016-06-30 10:36:41 +10:00
Ross Poulton
da5a4dc40f
Merge pull request #411 from mrkiwi-nz/issue_408_fix
...
fix #408 : Bug in test_per_queue_staff_permission.py
2016-06-30 10:36:20 +10:00
Daryl
44bbcd31e5
Bug in test_per_queue_staff_permission.py
...
Using the django auth backend allows integers to be passed as a password
Using Peter Sagerson's ldap auth backend there is an error thrown because
some code tries to do a len() on the password.
You could argue that the ldap auth backend should str(password), but
you could also argue that passing an int as a password is bad practice
This PR ensures that a string is sent to the auth module.
2016-06-30 12:07:33 +12:00
Daryl
0ac7183875
Add test for saving a query, fix shared checkbox issue
...
My browser sends 'on' when a checkbox is ticked, django ORM only
recognises '1', 'true' or 't' as valid 'True' responses.
This throws an error
ValidationError at /helpdesk/save_query/
[u"'on' value must be either True or False."]
This could be fixed with " value='1'" in the template, but testing that is harder
My fix is to add a check in the view. 2 more lines, but easier to unittest.
Core devs need to make a call as to which solution is best.
D
2016-06-30 11:36:21 +12:00
Matthias Hannig
5f0191957f
fixed python3 compat issue
2016-06-28 18:44:54 +02:00
Matthias Hannig
895a65fdb9
Fixed remote code execution through unpickling untrusted code.
2016-06-28 18:04:39 +02:00
Ross Poulton
d65c32487c
Merge pull request #406 from mrkiwi-nz/master
...
Fix Issue #404 : Refactor converting query string into queue:id
2016-06-26 19:28:48 +10:00
Daryl
afbfd01fab
Fix Issue #404 : Refactor converting query string into queue:id
2016-06-26 12:45:55 +12:00
Ross Poulton
ecd870663d
Merge pull request #405 from mrkiwi-nz/master
...
Ignore queue name when doing lookups for tickets (means URLs don't break when moving ticket between queues)
2016-06-25 21:55:40 +10:00
Daryl
e5a6686c6d
Ticket #403 - This code changes the behaviour of lookups for tickets and
...
ignores the queue name. This means that queue changes on a ticket dont
break the email links which have already been sent out.
The queue name still exists in the link/url, but is not used in the
lookup
2016-06-24 13:46:37 +12:00
Ross Poulton
e4dc3e51eb
Merge pull request #399 from mrkiwi-nz/master
...
Changed render_to_response() to render()
2016-06-22 11:05:21 +10:00
Daryl
8a7fe5fcbf
Changed the way the context is passed to render() - this was required
...
to enable django 1.7 to work (otherwise 1.8, 1.9 pass all tests, but 1.7 fails)
2016-06-21 20:56:43 +12:00
Daryl
558f140bfb
Changed render_to_response() to render() - this should work for django1.9.4 plus django1.10
...
Without this change, django1.10 is missing the 'user' object from the context, which results in
a very hard to track down bug manifesting in ;
"NoReverseMatch: Reverse for 'helpdesk_rss_user' with arguments '('',)' and keyword arguments '{}' not found."
At first glance users may think this is the dots-in-usernames bug, but the username is totally missing.
2016-06-21 17:18:06 +12:00
Gleber Diniz
f8044faf28
Fix import error on python 3
...
"from email.utils import parseaddr, collapse_rfc2231_value" works both for python 2.7 and python 3
2016-06-14 17:10:23 -03:00
mrkiwi-nz
7dd4aa11d7
Update ticket_cc_list.html
2016-06-09 12:41:12 +12:00
mrkiwi-nz
57d341f89f
Update report_output.html
2016-06-09 12:40:48 +12:00
mrkiwi-nz
783aa2481c
Update email_ignore_list.html
2016-06-09 12:40:08 +12:00
mrkiwi-nz
d86b82e689
Update debug.html
2016-06-09 12:39:24 +12:00
Darren Riedlinger
ac8ead52c8
getattr on usersettings.setting dict always returns False. Use settings.get() instead
2016-03-06 12:46:36 -08:00
Ross Poulton
e52ae206c6
Merge pull request #388 from pawelmarkowski/master
...
dashboard error queues are null
2016-03-02 10:38:08 +11:00
Pawel M
2b6c23db9f
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')\n GROUP BY queue, name\n ORDER BY q.id' at line 9") helpdesk/views/staff.py in dashboard 149 solved. When queues is null do not add to sql q.id in ()
2016-03-01 22:53:33 +01:00
Bruno Tikami
2efe8255c5
UPDATED: print statements to be Python 3.x compatible
2016-03-01 17:01:58 -03:00
imbashamba
191ce3c53c
Nullable "default_owner" field added to Queue model
...
If default_owner is specified, tickets from public form will be assigned to him and he'll be notified by email
2016-02-17 11:40:08 +03:00
powderflask
8bf3449719
Fix: _meta.module_name deprecated in django1.8
2016-01-23 12:25:17 -08:00
Alex Barcelo
a741395ce5
chaging tests to aknowledge helpdesk namespace
2015-12-22 11:20:52 +01:00
Alex Barcelo
3a0f08046e
using helpdesk
app_name and droping helpdesk_
prefix
2015-12-22 10:27:03 +01:00
Ross Poulton
4347d1ec61
Add new locales: th, ca, lv, tr_TR, he_IL, pt_PT
2015-12-22 11:35:59 +11:00
Ross Poulton
ca1690becb
Deprecate custom API (see #198 )
2015-12-22 11:28:00 +11:00
Ross Poulton
0d098f6d29
Merge pull request #369 from alexbarcelo/always_create_permission
...
creation of Permission-per-Queue is done always
2015-12-22 09:41:17 +11:00
Alex Barcelo
7894eea1e1
Making Queue slug unique and improving certain admin-related behaviour
2015-12-18 14:56:53 +01:00
Alex Barcelo
3b547d2cf9
creation of Permission-per-Queue is done always
2015-12-18 14:35:50 +01:00
Alex Barcelo
4545fc925f
fixing migration and allowing valid rollback on typical migrations
2015-12-17 18:44:10 +01:00
Alex Barcelo
0b5af429a5
reverting error due to methods and migrations
2015-12-17 18:11:54 +01:00
Alex Barcelo
01598826bf
protecting through 403 several staff views
2015-12-16 22:27:06 +01:00
Alex Barcelo
1ea70ad1be
adding management command for batch-creation of Queue permission
2015-12-16 22:27:06 +01:00
Alex Barcelo
43e5ff7c0e
added delete mechanism on Queue for auto-clean of permissions
2015-12-16 22:27:06 +01:00
Alex Barcelo
92d8ca3eff
more modular management of permission codenames
2015-12-16 22:27:06 +01:00
Alex Barcelo
64bc1791d4
removing completely QueueMembership model
2015-12-16 22:27:06 +01:00
Alex Barcelo
d760d9ee95
adding basic information to tickets, and masking email, on the admin views
2015-12-16 22:27:06 +01:00
Alex Barcelo
fb66fea86e
change basic features of membership into permissions
2015-12-16 22:27:05 +01:00
Alex Barcelo
230d14b3ca
removing QueueMembership mechanisms from admin.py
2015-12-16 22:27:05 +01:00
Alex Barcelo
c1fd47043a
migration for removing semantics from QueueMembership objects
2015-12-16 22:27:05 +01:00
Alex Barcelo
18c7a2e698
adding required model extra info for permissions
2015-12-16 22:27:05 +01:00
Alex Barcelo
c0939d4b38
adding migration for bugfix 'changed max_length given by string to integer;'
2015-12-16 16:37:22 +01:00
Ross Poulton
11467f6e50
Properly check email context keys in newer Python versions. part of #362
2015-12-16 10:48:27 +11:00
Ross Poulton
6187b0568c
Merge pull request #358 from flinz/django-1.9-fixes
...
Django 1.9 compatibility
2015-12-16 10:24:16 +11:00
Alex Seeholzer
54e541230e
Merge branch 'bug/360_max-length-given-by-string' into django-1.9-fixes
...
* bug/360_max-length-given-by-string:
changed max_length given by string to integer;
2015-12-15 10:21:04 +01:00
Alex Seeholzer
905e52e603
changed max_length given by string to integer;
2015-12-15 10:11:47 +01:00
Alex Seeholzer
2da16c511c
updates to remove Django 1.10 deprecation warnings in Django 1.9:
...
- use of patterns() in urls.py is deprecated
- render() functions accept only dicts - introduced checks to ensure downward compatibility back to Django 1.7
2015-12-10 13:36:24 +01:00
Alex Seeholzer
8d55dcb9a0
python 2 & 3 compatibility: changed __unicode__ to __str__ and added python2 decorators ( https://docs.djangoproject.com/en/1.8/topics/python3/#str-and-unicode-methods )
2015-11-18 15:26:08 +01:00
Alex Seeholzer
8390125c01
fixes of python 3 test fails
2015-11-18 15:07:33 +01:00
Alex Seeholzer
71504aa85d
minor changes for python3
2015-11-18 10:41:02 +01:00
Alex Seeholzer
f7f0882f86
Merge branch 'master-upstream' into django-1.9-fixes
...
* master-upstream:
Fix QueueMembership bug revealed by django.test's DiscoverRunner
2015-11-18 10:16:33 +01:00
Alex Seeholzer
e732b511e1
deprecated tags replaced in django 1.9 (ssi and url template tags are removed from the future template tag library)
2015-11-16 16:09:47 +01:00
Alex Seeholzer
307e9446a2
ensure tests for ticket submission run correctly in django 1.9 (URI's no longer include the scheme and domain part of the URLs)
2015-11-16 16:08:52 +01:00
Jonathan Barratt
0610a6645d
Fix QueueMembership bug revealed by django.test's DiscoverRunner
...
If HELPDESK_ENABLE_PER_QUEUE_STAFF_MEMBERSHIP was True but a user had
no QueueMembership entries, then restricting queue access generated
RelatedObjectDoesNotExist exceptions.
- Ask for forgiveness whenever we try to limit a queryset by the
queuemembership related object set.
- Since tests can now be run with the project's settings active,
rather than only with quicktest.py's settings, restore the initial
HELPDESK_ENABLE_PER_QUEUE_MEMBERSHIP value after having tested the
related functionality.
2015-11-16 18:45:27 +07:00
Ross Poulton
ddd5b21b45
Merge pull request #352 from ssadler/static_from_staticfiles
...
use staticfiles app instead of STATIC_URL
2015-11-15 12:25:42 +11:00
Scott Sadler
2663a5e5ba
use staticfiles app instead of STATIC_URL
2015-11-13 16:58:28 +01:00
Alex Seeholzer
0399612e57
bugfix: migration dependency corrected
2015-11-13 16:03:13 +01:00