Commit Graph

1248 Commits

Author SHA1 Message Date
Dmitriy Simushev
94f9d71a66 Create function for views rendering 2013-12-17 11:42:17 +00:00
Dmitriy Simushev
87d993da35 Move avatar folder to <mibew_root>/files 2013-12-16 15:27:14 +00:00
80d500413d Set default and safe web server settings 2013-11-14 18:40:42 +04:00
638757879c Disable autocomplete for password fields 2013-11-14 17:35:18 +04:00
64254875f8 Add TODO for future message check 2013-11-14 15:26:30 +04:00
a749b8c000 Improve validation of incoming params 2013-11-07 02:59:24 +04:00
62bb63242b Tiny bugfix 2013-11-07 02:57:27 +04:00
5e28bc91ea Unify UI behaviour for bans management 2013-11-07 02:41:11 +04:00
3215cad462 Increase fixed delay for windows autoclose after save canned messages and translations 2013-11-07 02:39:23 +04:00
5e3eacbb69 Add missed type attribute for embed javascripts 2013-11-07 02:35:27 +04:00
ecb95933aa Add labels for all input fields to improve user experience 2013-11-07 01:17:38 +04:00
f739935096 Add initialization of 'sendmail_from' PHP variable
This is a workaround for some systems that requires this variable to be set explicitly for sending emails (thanks to falcon for the issue)
2013-11-06 23:01:19 +04:00
35cd7c6e67 Switch to the new logo 2013-10-30 20:09:38 +04:00
5fd1b69135 Remove small login form from the login page 2013-10-30 20:04:11 +04:00
88c13f7d7c Fix condition of visibility of the tiny login form 2013-10-29 20:15:49 +04:00
0792bf98bd Implement more secure methods for the generation of tokens 2013-10-29 02:57:43 +04:00
58e8dcd5f6 Make CSRF token more secure 2013-10-29 02:41:17 +04:00
a6d1008242 Mute setting of PHP init parameters 2013-10-29 02:37:31 +04:00
7e4a380320 Secure user session 2013-10-29 02:36:34 +04:00
a4449482e3 Implement additional CSRF checks 2013-10-29 02:27:32 +04:00
7b5caf0e8d Define constants for all cookies' names 2013-10-29 01:44:53 +04:00
5a47fa8074 Secure auth cookie in https mode 2013-10-29 01:03:34 +04:00
b2f43076aa Add missed checks for the failed file openings 2013-10-28 17:42:52 +04:00
a2bfeb72a7 Add new localization constant 2013-10-28 17:23:04 +04:00
12c3e2d60d Sanitize all redirects 2013-10-28 17:10:10 +04:00
4345070720 Secure an avatar's filename 2013-10-28 16:54:55 +04:00
7f4b1fa9cc Secure file paths (second part) 2013-10-28 16:43:24 +04:00
bad9918b98 Improve verification and storing of the values of locale 2013-10-28 16:16:10 +04:00
255ac6220c Secure database tables prefix 2013-10-28 15:54:46 +04:00
0fc7477672 Sanitize mibewroot value 2013-10-28 15:51:11 +04:00
24f1a64fca Restrict opening of files outside the Mibew installation 2013-10-28 15:29:29 +04:00
5de084e63e Update version 2013-10-28 15:15:06 +04:00
8be55e86d7 Secure file paths (use dirname everywhere) 2013-10-28 15:11:38 +04:00
d73922358f Move name of the localization cookie into a variable 2013-10-28 13:10:12 +04:00
5cb3a50642 Switch to a more reliable function for generation of userid 2013-10-22 18:00:40 +04:00
4873d03d42 Improve passwords hashing 2013-10-21 20:14:42 +04:00
c34ce4c17e Improve generation of CAPTCHA images 2013-10-21 20:12:56 +04:00
f1e3006b45 Fix locale code for Norsk nynorsk 2013-10-10 14:13:05 +04:00
b5d74330fe Fix locales' names and codes 2013-10-06 01:51:20 +04:00
5a1c3bf5c8 Remove obsolete whatsnew.txt 2013-09-27 18:54:14 +04:00
Dmitriy Simushev
f133155798 Clean up repository 2013-09-27 17:52:36 +04:00
d310943b0e Add Lithuanian translation (thanks to livechat.lt) 2013-09-26 19:41:44 +04:00
eaba2fb708 Completely wiped out the old application name 2013-09-26 19:33:50 +04:00
a2f78ea9f3 wiped out the old application name 2013-09-26 19:33:17 +04:00
2f42366d0a Unify translations: update localization constants from legacy branch 2013-09-26 18:33:47 +04:00
Dmitriy Simushev
f7f54f8754 Update Dutch translation (thanks to Erik Kerkhoven) 2013-09-22 14:01:34 +04:00
Dmitriy Simushev
90e644e9eb Update Marionette.js to v1.1.0 2013-08-22 14:28:38 +00:00
Dmitriy Simushev
a2b662e2ce Update copyright notice 2013-08-09 11:18:50 +00:00
7016a45312 Mibew Tray 1.1.1 release
Update links to an actual mibew domain in Mibew Tray application (thanks to Nemesis0one)
2013-08-09 09:53:38 +00:00
Dmitriy Simushev
2562abdf4b Pass user_id field of the visitor to the client side 2013-08-06 13:45:20 +00:00
a0a17e6076 Fix steps enumeration in README file 2013-08-06 13:37:43 +00:00
853fecc4a0 Update translations (da, de, fi, it, pt-br) 2013-08-06 13:34:42 +00:00
d62109d72b Improve packaging script 2013-08-06 13:33:26 +00:00
bf860a32ac Update localization constants 2013-08-06 13:32:26 +00:00
Dmitriy Simushev
2565789af7 Fix docs for update_operator function 2013-07-17 08:18:14 +00:00
Dmitriy Simushev
77023f6400 Fix bug with threads queue update
Move user to priority queue when operator has connection problems
2013-07-15 15:09:35 +00:00
Dmitriy Simushev
a899cc2dff Fix bug with old threads closing 2013-07-15 14:33:04 +00:00
Dmitriy Simushev
ab8a889464 Fix bug with docs for chatthread table 2013-07-15 08:51:09 +00:00
Dmitriy Simushev
3c740457f3 Update Marionette.js to v1.0.4 2013-07-14 19:20:19 +00:00
Dmitriy Simushev
6609bf4b16 Update Underscore.js to v1.5.0 2013-07-14 19:17:17 +00:00
Dmitriy Simushev
f4f4e25798 Update jQuery to v1.10.2 2013-07-14 19:12:00 +00:00
Dmitriy Simushev
cbe589f5b7 Fix bug with popup windows with geo info in IE. 2013-07-14 18:51:12 +00:00
Dmitriy Simushev
caa90f9f9c Fix user duplication in visitors and threads lists
User can be either in threads list or in visitors list
but not in both at the same time.
2013-07-12 14:46:31 +00:00
Dmitriy Simushev
862e23e79c Add 'answer' button to invitation 2013-07-12 13:53:37 +00:00
Dmitriy Simushev
bc5c274c8f Fix notice in view/canned.php
Notice was about undefined index 'level' in view/canned.php
on line 48
2013-07-09 09:23:34 +00:00
Dmitriy Simushev
37159eae3b Add 'operatorLogin' and 'operatorLogout' events 2013-07-09 08:43:30 +00:00
Dmitriy Simushev
f96df5ec61 Fix bug with visitors list at operator/users.php page 2013-07-08 14:04:31 +00:00
Dmitriy Simushev
827d9a0b8d Make operator's email unique in the system 2013-07-08 11:04:17 +00:00
Dmitriy Simushev
142d9edb20 Fix bug in operator_by_email function 2013-07-08 10:58:02 +00:00
Dmitriy Simushev
b41405ea09 Make operator's email field required 2013-07-08 10:24:34 +00:00
Dmitriy Simushev
1a0b315365 Add statistics aggregation interval 2013-07-03 08:31:36 +00:00
Dmitriy Simushev
dae493b1a8 Do not use regular expression to check JSON in Mibew API.
It leads to problems with big packages because of limitation on
max backtrack count (see pcre.backtrack_limit for details).
2013-06-25 10:26:17 +00:00
Dmitriy Simushev
13c577d2ae Move plugins' dependences into their classes 2013-06-24 13:01:56 +00:00
Dmitriy Simushev
48ecf35f1a Add field with close timestamp to the Thread class 2013-06-24 11:29:22 +00:00
Dmitriy Simushev
fb6517dc9f Update plugins message system.
Now arbitrary data can be attached to any message.
2013-06-19 14:17:04 +00:00
Dmitriy Simushev
aa38622b8d Add some comments to database structure 2013-06-19 09:52:48 +00:00
Dmitriy Simushev
248847436b Remove messages indexing 2013-06-19 09:15:29 +00:00
Dmitriy Simushev
be536272ca Update Handlebars to v1.0.0 and recompile templates 2013-06-17 13:36:19 +00:00
Dmitriy Simushev
77a3af4d11 Update Marionette.js to v1.0.3 2013-06-17 13:12:31 +00:00
Dmitriy Simushev
7644b9b07c Update jQuery to v1.10.0 2013-06-17 13:02:02 +00:00
Dmitriy Simushev
e01a75faea Add an ability to start chat with specified operator 2013-05-29 15:31:30 +00:00
Dmitriy Simushev
b89e838625 Clean up statistics code 2013-05-29 08:38:23 +00:00
Dmitriy Simushev
62a2176aaa Extend by page statistics 2013-05-28 14:50:13 +00:00
Dmitriy Simushev
734c68a022 Extend by operator statistics 2013-05-28 10:55:58 +00:00
Dmitriy Simushev
cef80ad20b Fix bug with statistics display when there is not enough data 2013-05-28 10:23:42 +00:00
Dmitriy Simushev
475d0e22ae Fix bug with by thread chat statistics 2013-05-28 10:06:25 +00:00
Dmitriy Simushev
08617d41c6 Fix bug with the 1st operator's message in inviation
Now it has correct agentId value
2013-05-28 08:37:39 +00:00
Dmitriy Simushev
b33ccc4a84 Extend by thread statistics 2013-05-27 13:54:30 +00:00
Dmitriy Simushev
18e6862949 Update chat start time when user accept invitation 2013-05-27 09:31:36 +00:00
Dmitriy Simushev
97a76cbd69 Remove unused invitation's localized strings 2013-05-24 12:49:08 +00:00
Dmitriy Simushev
d70ed401cb Send messages about close invitation by timeout 2013-05-24 12:44:24 +00:00
Dmitriy Simushev
644cec05cb Fix bug with invitation state retrieving in widget.php 2013-05-24 12:40:58 +00:00
Dmitriy Simushev
3fc6218332 Update threads history
Do not show threads related with ignored or rejected invitations.
2013-05-24 11:53:12 +00:00
Dmitriy Simushev
bc287f0e11 Update invitation preview 2013-05-24 11:07:09 +00:00
Dmitriy Simushev
545ff7db87 Clean up JavaScript code of the Widget 2013-05-24 10:40:40 +00:00
Dmitriy Simushev
1480519bb2 Fix notice about undefined 'send_shortcut' 2013-05-24 10:17:25 +00:00
Dmitriy Simushev
f7d6971849 Automatically hide invitation popup
Invitation popup will hide if invitation canceled by operator or
closed by timeout.
2013-05-24 10:05:20 +00:00
Dmitriy Simushev
43d731cf72 Update license headers in CSS files 2013-05-23 15:12:27 +00:00
Dmitriy Simushev
3994b924de Completely rewrite invitations 2013-05-23 15:02:10 +00:00
Dmitriy Simushev
a2db90289a Create SoundManager model in Chat JS Application
It help to unbind messages collection view and message form model
2013-05-23 12:12:33 +00:00
Dmitriy Simushev
b3c77aa972 Fix bug with multiple scripts loading by widget 2013-05-21 09:22:48 +00:00
Dmitriy Simushev
11d726867c Fix bug with cookie update in widget
Widget update target site tracking cookie only if it is absent
2013-05-21 08:38:43 +00:00
Dmitriy Simushev
8b025cf8bd Visitors can reject invitations not only hide 2013-05-20 10:25:53 +00:00
Dmitriy Simushev
29baaa700c Upadate widget. It can pass some data to server now 2013-05-20 09:29:14 +00:00
Dmitriy Simushev
9424e48c74 Fix ability to use plugin options at client side 2013-05-17 15:34:58 +00:00
Dmitriy Simushev
d86191d4af Use get_app_location func in cron_get_uri func 2013-05-17 14:51:13 +00:00
Dmitriy Simushev
c64c1a441d Refactor JavaScript invitation and tracking code 2013-05-17 13:59:15 +00:00
Dmitriy Simushev
52f00cbe59 Refactor build_js_response function
Rename it to build_widget_response and move to libs/common/response.php
2013-05-17 09:52:41 +00:00
Dmitriy Simushev
5a3b2916d1 Update license info in license.php 2013-05-16 14:17:28 +00:00
Dmitriy Simushev
6a477d39f0 Update license headers in JavaScript files 2013-05-16 11:12:02 +00:00
Dmitriy Simushev
aa3741a9fa Remove handlebars nested 'if else' bug workaround 2013-05-15 10:06:19 +00:00
Dmitriy Simushev
5c8464520c Update handlebars to v.1.0.0-rc.4 and recompile templates 2013-05-15 09:51:57 +00:00
Dmitriy Simushev
18dd2c01e4 Calculate page statistics that older one day 2013-05-13 09:49:29 +00:00
Dmitriy Simushev
49894f7d9e Calculate operator statistics that older one day 2013-05-13 09:26:45 +00:00
Dmitriy Simushev
1cde50242d Calculate thread statistics that older one day 2013-05-13 09:20:30 +00:00
Dmitriy Simushev
1a4d8e809d Create full statistics description 2013-05-08 11:18:58 +00:00
Dmitriy Simushev
7c648ce829 Force set plugin message id in Chat JS application 2013-05-08 10:54:42 +00:00
Dmitriy Simushev
d77047f62c Add some output to cron.php 2013-05-07 13:38:37 +00:00
Dmitriy Simushev
e6a5f9712d Update notices about cron 2013-05-07 13:20:26 +00:00
Dmitriy Simushev
ba2ede20aa Store time of last cron run 2013-05-07 12:44:16 +00:00
Dmitriy Simushev
663c9119e6 Set Database::throwExceptions back in calculate statistics funcs 2013-05-07 12:18:02 +00:00
Dmitriy Simushev
d3b254fc82 Set Database::throwExceptions back in cron_index_message 2013-05-07 12:17:45 +00:00
Dmitriy Simushev
7bf20e29e7 Update Database::throwException function
Now it returns previous set value.
2013-05-07 11:52:44 +00:00
Dmitriy Simushev
289fb76906 Refactor cron_calculate_statistics function 2013-05-07 11:25:21 +00:00
Dmitriy Simushev
a7ce1ff704 Fix bug with PluginManager in install/dbperform.php 2013-05-07 11:09:08 +00:00
Dmitriy Simushev
c8039ec248 Calculate page statistics by cron 2013-05-07 10:35:38 +00:00
Dmitriy Simushev
b337c689b9 Fix notification about cron at operator/history.php 2013-05-06 14:17:15 +00:00
Dmitriy Simushev
6ad1828079 Calculate threads and operator statistics by cron 2013-05-06 14:12:19 +00:00
Dmitriy Simushev
67de68b28b Add notification about cron to operator/history.php 2013-04-30 14:05:30 +00:00
Dmitriy Simushev
8914f01b3b Create cron_get_uri function 2013-04-30 13:39:49 +00:00
Dmitriy Simushev
ff3bfa545f Update pluginMessageIndex event
Add ability for plugins to alter sender name and operator ID
during message indexing.
2013-04-30 13:20:14 +00:00
Dmitriy Simushev
dfd3b9e615 Create Thread::postPluginMessage method 2013-04-30 13:18:28 +00:00
Dmitriy Simushev
78037e60a3 Update descriptions of ant targets 2013-04-30 10:44:25 +00:00
Dmitriy Simushev
57eb898bfd Remove duplication from install/dbinfo.php 2013-04-30 10:29:36 +00:00
Dmitriy Simushev
fa33342dbc Add messages indexing 2013-04-30 10:22:44 +00:00
Dmitriy Simushev
3594485267 Add ability for plugins to send custom messages 2013-04-29 11:04:17 +00:00
Dmitriy Simushev
00d668a74a Recompile Users JavaScript Application 2013-04-26 13:15:57 +00:00
Dmitriy Simushev
67216c0a83 Fix bug with PluginManager in installation script 2013-04-26 12:47:44 +00:00
Dmitriy Simushev
081c4a88a2 Do not grant all privileges to operators by default 2013-04-26 10:47:32 +00:00
Dmitriy Simushev
2d08fda940 Fix notice about undef $errors in operator/operators.php 2013-04-26 09:57:26 +00:00
Dmitriy Simushev
a23d9fa216 Move update_operator_permissions function to libs/operator.php 2013-04-26 09:39:39 +00:00
Dmitriy Simushev
a31cdfce24 Remove permission related global vars 2013-04-26 09:19:52 +00:00
Dmitriy Simushev
935ad85fd5 Create delete_operator function 2013-04-25 12:39:33 +00:00
Dmitriy Simushev
6954c598a3 Remove default value for id in JS Mibew.Models.Message 2013-04-25 10:01:40 +00:00
Dmitriy Simushev
3c20e8cf5c Update defaults values in JS Mibew.Models.Message 2013-04-24 14:47:49 +00:00
Dmitriy Simushev
5483483031 Update docs for Thread class 2013-04-24 14:00:24 +00:00
Dmitriy Simushev
688591b616 Create 'operatorCheckLoginFail' event, update docs 2013-04-16 11:40:38 +00:00
Dmitriy Simushev
df38a1860f Fix notice about undefined index 'visitorid' in libs/chat.php 2013-04-15 11:59:21 +00:00
Dmitriy Simushev
48d0159a92 Fix notice about undefined index 'visitorid' in client.php 2013-04-15 11:53:45 +00:00
Dmitriy Simushev
c7182e840d Update select_with_pagintation function logic
It always create $page['pagination.items'] as array
2013-04-11 12:46:18 +00:00
Dmitriy Simushev
8ceb695d43 Fix bug with filtration at threads history page 2013-04-11 12:41:57 +00:00
Dmitriy Simushev
d14a778831 Fix bug with history for search in messages 2013-04-11 12:33:49 +00:00
Dmitriy Simushev
545bb19896 Update docs for Thread class 2013-04-11 10:33:05 +00:00
Dmitriy Simushev
5798c2399d Add ability for client-side plugins to use own locale strings 2013-04-11 10:04:19 +00:00
Dmitriy Simushev
438824fa36 Fix bug with flatten global $page array 2013-04-10 15:09:57 +00:00
Dmitriy Simushev
441316b9f5 Add 'threadChanged' event 2013-04-10 13:35:03 +00:00
Dmitriy Simushev
58fd82ca36 Add the ability to add locale strings in plugins 2013-04-10 11:42:42 +00:00
Dmitriy Simushev
803f2ba075 Clean up load_messages function 2013-04-10 10:29:44 +00:00
Dmitriy Simushev
db1b51ae8a Add an ability to run cron job 2013-04-09 15:45:57 +00:00
Dmitriy Simushev
2f89219756 Update Marionette.js to v1.0.2 2013-04-08 15:15:15 +00:00
Dmitriy Simushev
9e9dbf8e2a Create default config files and stop indexing actual configs 2013-04-08 13:41:55 +00:00
Dmitriy Simushev
cf412e049f Update Backbone.js to v1.0.0 2013-04-08 12:51:32 +00:00
Dmitriy Simushev
d7c3e297ed Add hidden file to plugins directory to keep it in git 2013-04-08 12:12:58 +00:00
Dmitriy Simushev
8869a560ed Fix bug with client side plugins initialization
Fix prechat survey and leave message page initialization for client
2013-04-08 11:53:37 +00:00
Dmitriy Simushev
71c327f14c Fix bug with client side plugins initialization 2013-04-08 09:59:52 +00:00
Dmitriy Simushev
0f0743bd52 Update JavaScript files in default dialog theme.
Use 'jQuery' instead of '$' in arguments of immediatly
called function.
2013-03-13 15:38:28 +00:00
Dmitriy Simushev
0b5c5d5aba Add ajax loader for Survey and LeaveMessage chat modules 2013-03-13 15:38:28 +00:00
Dmitriy Simushev
a3c6141ab7 Update docs for Mibew.Views.LeaveMessageFrom.submitError 2013-03-13 15:38:28 +00:00
Dmitriy Simushev
3804d26cab Recompile templates for Users JavaScript Application 2013-03-13 15:38:28 +00:00
Dmitriy Simushev
88fffc078b Build select group box at client side 2013-03-13 15:38:28 +00:00
Dmitriy Simushev
f1803662a8 Create some usefull groups functions
Create group_is_online and get_group_description functions.
2013-03-13 15:38:28 +00:00
Dmitriy Simushev
3c080e4725 Fix bug with header for compiled templates in build.xml 2013-03-13 15:38:28 +00:00
Dmitriy Simushev
23ac4ef88a Fix permissions for build scripts 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
4d9c33ed1c Rename ant 'compile_js' task to 'core_js' 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
ff92bca633 Move build scripts to tools dir 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
1cf83dcd34 Move 'compiled_templates_header.txt' to tools dir 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
7091d7b326 Remove old JavaScript compilation script 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
a32cf9128b Update structure of Chat Handlebars templates.
Recompile templates.
2013-03-13 15:38:27 +00:00
Dmitriy Simushev
97ca21d295 Update build system.
Add ability to use complex directory structure of Handlebars
templates in dialog styles.
2013-03-13 15:38:27 +00:00
Dmitriy Simushev
4b7614caec Completely remove prototype.js from Mibew 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
6c1852e094 Update JavaScript code at install pages 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
4f47218a13 Use playSound JS function instead of sound model 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
a4d12d7b65 Add 'msgjs:' and 'pagejs:' prefixies to template engine 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
33f30bd1c6 Add refresh updater after Chat Module started 2013-03-13 15:38:27 +00:00
Dmitriy Simushev
e7f8779ba8 Fix bug with auto start chat chat window resizer 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
2a3a9dec9d Replace 'tplimage' css class by 'tpl-image' 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
a570ed75d0 Update Chat JavaScript Application
Make prechat survey and leave message parts of the Chat
JavaScript Application
2013-03-13 15:38:26 +00:00
Dmitriy Simushev
9436b486f9 Fix bug in groups saving 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
f72a0187be Build system not strip comments from JS templates anymore 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
ba7eb96e8a Update build system in templates compilation.
Use closure compiler instead of handlebars built in minifier and
recompile all templates.
2013-03-13 15:38:26 +00:00
Dmitriy Simushev
709623dfc5 Fix bug with errorCode in Mibew API execution context 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
8fc9b85bfa Do not support old browsers at all 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
d2805afc9f Remove '.bgbody' css class 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
faac427cc7 Remove layout initialization options in Chat JS app 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
372bae4203 Build Chat JavaScript application options mostly not in template 2013-03-13 15:38:26 +00:00
Dmitriy Simushev
9cde3262d6 Use 'chat.user.name' var instead of 'ct.user.name' in templates 2013-03-13 15:38:25 +00:00
Dmitriy Simushev
fead1b65a1 Use 'chat.thread.token' var instead of 'ct.token' in templates 2013-03-13 15:38:25 +00:00
Dmitriy Simushev
f77021b82b Use 'chat.thread.id' var instead of 'ct.chatThreadId' in templates 2013-03-13 15:38:25 +00:00
Dmitriy Simushev
2c9e65b518 Use 'company.*' vars instead of 'ct.company.*' in tempates 2013-03-13 15:38:25 +00:00
Dmitriy Simushev
0cfd1df846 Flatten $page array before expand templates 2013-03-13 15:38:25 +00:00