975 Commits

Author SHA1 Message Date
Ingo Schommer
64af679c35 DOCS Corrected env type docs (fixes #7290) 2017-08-30 08:35:41 +12:00
Martin D
05f34f31e5 Update 01_SiteConfig.md 2017-08-29 14:55:47 -04:00
Simon Erkelens
774d44a574 Authentication documentation rewrite 2017-08-28 16:28:30 +12:00
Damian Mooyman
6b1dfddcb8
Docs for https://github.com/silverstripe/silverstripe-versioned/pull/35/ 2017-08-24 10:46:32 +12:00
Damian Mooyman
323644c7bb
API Implement cascade_deletes 2017-08-09 15:14:00 +12:00
Robbie Averill
5d5fac7450 FIX Throw exception when "value" is used to define indexes. Update docs. 2017-08-09 09:17:28 +12:00
Aaron Carlino
50c8a02bff remove tabs 2017-08-07 15:11:17 +12:00
Aaron Carlino
5d6b7c85d7 Deprecate SS_TemplateManifest 2017-08-07 14:51:27 +12:00
Aaron Carlino
e4935123d8 Remove a few more references 2017-08-07 14:01:38 +12:00
Aaron Carlino
6c0629f025 Remove more deprecated APIs 2017-08-07 14:01:38 +12:00
Aaron Carlino
e4fba5a7b1 add use statements 2017-08-07 14:01:38 +12:00
Aaron Carlino
84feab5a68 Yeah psr2 functions 2017-08-07 14:01:38 +12:00
Aaron Carlino
4c7a068b28 classes psr2 2017-08-07 14:01:38 +12:00
Aaron Carlino
2414eaeafd Yay, clean arrays 2017-08-07 14:01:38 +12:00
Aaron Carlino
eb1695c03d Replace all legacy ::: syntax with GFMD tags 2017-08-07 14:01:38 +12:00
Aaron Carlino
16407b9185 first pass 2017-08-07 14:01:38 +12:00
Damian Mooyman
0681567102 BUG Fix flushing on live mode (#7241)
* BUG Fix flushing on live mode
Fixes #7217

* Clarify injector service documentation
2017-08-07 13:53:23 +12:00
Aaron Carlino
dd189b917e Documentation updates for new Injector / FormStateManager API 2017-07-31 16:55:44 +12:00
Daniel Hensby
79c74006fd Merge pull request #7146 from robbieaverill/pulls/4.0/middleware-docs
DOCS Fix typos and formatting in middleware documentation
2017-07-19 15:20:45 +01:00
Daniel Hensby
c3269e2d15 Merge pull request #7147 from robbieaverill/pulls/4.0/minor-docs-fixes
DOCS Update requirements and error handling, fix typos and markdown rendering bugs
2017-07-19 15:20:23 +01:00
Daniel Hensby
7fd316d405
Merge branch 3 into 4 2017-07-15 13:20:37 +01:00
Aaron Carlino
2b266276c2 API Implement new module sorting pattern 2017-07-13 10:27:27 +12:00
Robbie Averill
ee0bd1a541 DOCS Update requirements and error handling, fix typos and markdown rendering bugs 2017-07-10 11:00:25 +12:00
Robbie Averill
a7bf0e49ec DOCS Fix typos and formatting in middleware documentation 2017-07-10 10:19:17 +12:00
Aaron Carlino
2b1587894a
Documentation updates for new form injector API 2017-07-05 11:09:18 +01:00
Andrew Aitken-Fincham
7812f34a2d remove info div to fix formatting 2017-07-04 12:50:57 +01:00
Damian Mooyman
6f24a16dcd Update docs for new service aliases 2017-07-03 16:04:30 +12:00
Saophalkun Ponlu
63ba092765 FIX Add namespaces in markdown docs (#7088)
* FIX Add namespaces in markdown docs

* FIX Convert doc [link] to [link-text](link-uri)
2017-07-03 13:22:12 +12:00
Andrew Aitken-Fincham
ef8e04a83e Add $fixture_file to the fixtures docs
Currently no mention of it.
2017-06-29 13:58:37 +01:00
Jonathon Menz
b60ccd11c3 DOCS clarify $force_resample behaviour
Fixes https://github.com/silverstripe/silverstripe-assets/issues/21
2017-06-28 14:40:18 -07:00
Chris Joe
9a98655124 Custom redux state in injector, updated docs (#7042)
* Update docs for new Injector js structure and description for injector reducer API

* Injector documentation updates

* updates per ingo

* Update examples and some notes based on feedback

* Updates per ingo

* documentation updates to reflect new injector.component

* Minor doc updates
2017-06-28 21:35:04 +12:00
Damian Mooyman
f699650b5f Update based on feedback 2017-06-27 13:32:39 +12:00
Damian Mooyman
d20ab50f9d API Stronger Injector service unregistration
BUG Fix up test regressions
FIX director references to request object
API Move all middlewares to common namespace
API Implement RequestHandlerMiddlewareAdapter
ENHANCEMENT Improve IP address parsing
Fix up PHPDoc / psr2 linting
BUG Fix property parsing in TrustedProxyMiddleware
BUG Fix Director::is_https()
2017-06-27 13:32:39 +12:00
Sam Minnee
ccc86306b6 NEW: Add TrustedProxyMiddleware
API: SS_TRUSTED_PROXY_HOST_HEADER replace with middleware config
API: SS_TRUSTED_PROXY_PROTOCOL_HEADER replace with middleware config
API: SS_TRUSTED_PROXY_IP_HEADER replace with middleware config
API: Front-End-Https = “on” header no longer supported

This middleware replaces the TRUSTED_PROXY setting and shifts its
configuration out of the env vars and bootstrap and into the Director
flow.
2017-06-27 13:32:39 +12:00
Sam Minnee
e855622890 NEW: Replace FlushRequestFilter with FlushMiddleware 2017-06-27 13:32:39 +12:00
Sam Minnee
c482cd673e DOC: Documentation and upgrade notes for director middleware 2017-06-27 13:32:39 +12:00
Damian Mooyman
0ed1750106 Merge remote-tracking branch 'origin/3'
# Conflicts:
#	.travis.yml
#	.tx/config
#	_config/database.yml
#	admin/code/LeftAndMain.php
#	admin/code/ModelAdmin.php
#	admin/code/SecurityAdmin.php
#	admin/javascript/jquery-changetracker/lib/jquery.changetracker.js
#	admin/javascript/lang/cs.js
#	admin/javascript/lang/de.js
#	admin/javascript/lang/eo.js
#	admin/javascript/lang/es.js
#	admin/javascript/lang/fa_IR.js
#	admin/javascript/lang/fi.js
#	admin/javascript/lang/fr.js
#	admin/javascript/lang/hr.js
#	admin/javascript/lang/id.js
#	admin/javascript/lang/id_ID.js
#	admin/javascript/lang/it.js
#	admin/javascript/lang/ja.js
#	admin/javascript/lang/lt.js
#	admin/javascript/lang/mi.js
#	admin/javascript/lang/nb.js
#	admin/javascript/lang/nl.js
#	admin/javascript/lang/pl.js
#	admin/javascript/lang/ro.js
#	admin/javascript/lang/ru.js
#	admin/javascript/lang/sk.js
#	admin/javascript/lang/sl.js
#	admin/javascript/lang/sl_SI.js
#	admin/javascript/lang/sr.js
#	admin/javascript/lang/sr@latin.js
#	admin/javascript/lang/sr_RS.js
#	admin/javascript/lang/sr_RS@latin.js
#	admin/javascript/lang/src/cs.js
#	admin/javascript/lang/src/de.js
#	admin/javascript/lang/src/eo.js
#	admin/javascript/lang/src/es.js
#	admin/javascript/lang/src/fa_IR.js
#	admin/javascript/lang/src/fi.js
#	admin/javascript/lang/src/fr.js
#	admin/javascript/lang/src/hr.js
#	admin/javascript/lang/src/id.js
#	admin/javascript/lang/src/id_ID.js
#	admin/javascript/lang/src/it.js
#	admin/javascript/lang/src/ja.js
#	admin/javascript/lang/src/lt.js
#	admin/javascript/lang/src/mi.js
#	admin/javascript/lang/src/nb.js
#	admin/javascript/lang/src/nl.js
#	admin/javascript/lang/src/pl.js
#	admin/javascript/lang/src/ro.js
#	admin/javascript/lang/src/ru.js
#	admin/javascript/lang/src/sk.js
#	admin/javascript/lang/src/sl.js
#	admin/javascript/lang/src/sl_SI.js
#	admin/javascript/lang/src/sr.js
#	admin/javascript/lang/src/sr@latin.js
#	admin/javascript/lang/src/sr_RS.js
#	admin/javascript/lang/src/sr_RS@latin.js
#	admin/javascript/lang/src/sv.js
#	admin/javascript/lang/src/zh.js
#	admin/javascript/lang/sv.js
#	admin/javascript/lang/zh.js
#	admin/templates/Includes/ModelAdmin_Content.ss
#	composer.json
#	control/HTTPRequest.php
#	core/Config.php
#	core/Core.php
#	core/Diff.php
#	core/Object.php
#	core/PaginatedList.php
#	core/TempPath.php
#	core/manifest/ConfigStaticManifest.php
#	dev/Profiler.php
#	docs/en/00_Getting_Started/00_Server_Requirements.md
#	docs/en/00_Getting_Started/03_Environment_Management.md
#	docs/en/02_Developer_Guides/01_Templates/03_Requirements.md
#	docs/en/02_Developer_Guides/07_Debugging/03_Template_debugging.md
#	docs/en/02_Developer_Guides/13_i18n/index.md
#	filesystem/File.php
#	filesystem/GD.php
#	filesystem/ImagickBackend.php
#	filesystem/Upload.php
#	forms/DatetimeField.php
#	forms/FormField.php
#	forms/GroupedDropdownField.php
#	forms/TabSet.php
#	forms/gridfield/GridFieldFilterHeader.php
#	javascript/lang/es.js
#	javascript/lang/src/es.js
#	lang/af.yml
#	lang/ar.yml
#	lang/az.yml
#	lang/bg.yml
#	lang/bs.yml
#	lang/ca.yml
#	lang/cs.yml
#	lang/de.yml
#	lang/en.yml
#	lang/eo.yml
#	lang/es.yml
#	lang/es_AR.yml
#	lang/es_MX.yml
#	lang/et_EE.yml
#	lang/fa_IR.yml
#	lang/fi.yml
#	lang/fo.yml
#	lang/fr.yml
#	lang/gl_ES.yml
#	lang/he_IL.yml
#	lang/hr.yml
#	lang/hu.yml
#	lang/id.yml
#	lang/id_ID.yml
#	lang/is.yml
#	lang/it.yml
#	lang/ja.yml
#	lang/lt.yml
#	lang/lv.yml
#	lang/mi.yml
#	lang/ms.yml
#	lang/nb.yml
#	lang/ne.yml
#	lang/nl.yml
#	lang/pl.yml
#	lang/pt.yml
#	lang/pt_BR.yml
#	lang/ro.yml
#	lang/ru.yml
#	lang/si.yml
#	lang/sk.yml
#	lang/sl.yml
#	lang/sl_SI.yml
#	lang/sr.yml
#	lang/sr@latin.yml
#	lang/sr_RS.yml
#	lang/sr_RS@latin.yml
#	lang/sv.yml
#	lang/th.yml
#	lang/tr.yml
#	lang/uk.yml
#	lang/zh.yml
#	lang/zh_CN.yml
#	lang/zh_TW.yml
#	model/DataDifferencer.php
#	model/DataQuery.php
#	model/Image.php
#	model/ManyManyList.php
#	model/connect/DBSchemaManager.php
#	model/connect/PDOConnector.php
#	model/fieldtypes/Bigint.php
#	model/fieldtypes/DBFloat.php
#	model/fieldtypes/DBInt.php
#	model/fieldtypes/Double.php
#	model/fieldtypes/ForeignKey.php
#	model/fieldtypes/PrimaryKey.php
#	parsers/HTML/HTMLBBCodeParser.php
#	security/Member.php
#	security/MemberAuthenticator.php
#	security/RandomGenerator.php
#	security/Security.php
#	tests/control/CookieTest.php
#	tests/control/HTTPRequestTest.php
#	tests/core/CoreTest.php
#	tests/filesystem/UploadTest.php
#	tests/forms/FormFieldTest.php
#	tests/forms/FormTest.php
#	tests/forms/GroupedDropdownFieldTest.php
#	tests/forms/HtmlEditorFieldToolbarTest.php
#	tests/forms/RequirementsTest.php
#	tests/model/DBFieldTest.php
#	tests/model/DataObjectTest.php
#	tests/model/ManyManyListTest.php
#	tests/model/VersionableExtensionsTest.php
#	tests/model/VersionedTest.php
#	tests/parsers/ShortcodeParserTest.php
#	tests/security/MemberAuthenticatorTest.php
#	tests/security/MemberTest.php
#	tests/security/SecurityTest.php
#	tests/view/SSViewerTest.php
#	thirdparty/simpletest/encoding.php
#	thirdparty/simpletest/page.php
#	thirdparty/simpletest/tag.php
#	thirdparty/spyc/spyc.php
#	thirdparty/tinymce-spellchecker/classes/SpellChecker.php
#	thirdparty/tinymce-spellchecker/classes/utils/JSON.php
#	thirdparty/tinymce-spellchecker/classes/utils/Logger.php
#	thirdparty/tinymce/tiny_mce.js
#	thirdparty/tinymce/tiny_mce_gzip.php
#	thirdparty/tinymce/tiny_mce_src.js
#	view/Requirements.php
#	view/SSViewer.php
#	view/ViewableData.php
2017-06-27 13:27:14 +12:00
Daniel Hensby
fea36f2d7b
DOCS Update Image docs to reflect intervention/image changes 2017-06-23 11:18:21 +01:00
Damian Mooyman
3873e4ba00 API Refactor bootstrap, request handling
See https://github.com/silverstripe/silverstripe-framework/pull/7037
and https://github.com/silverstripe/silverstripe-framework/issues/6681

Squashed commit of the following:

commit 8f65e5653211240650eaa4fa65bb83b45aae6d58
Author: Ingo Schommer <me@chillu.com>
Date:   Thu Jun 22 22:25:50 2017 +1200

    Fixed upgrade guide spelling

commit 76f95944fa89b0b540704b8d744329f690f9698c
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 16:38:34 2017 +1200

    BUG Fix non-test class manifest including sapphiretest / functionaltest

commit 9379834cb4b2e5177a2600049feec05bf111c16b
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 15:50:47 2017 +1200

    BUG Fix nesting bug in Kernel

commit 188ce35d82599360c40f0f2de29579c56fb90761
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 15:14:51 2017 +1200

    BUG fix db bootstrapping issues

commit 7ed4660e7a63915e8e974deeaba9807bc4d38b0d
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 14:49:07 2017 +1200

    BUG Fix issue in DetailedErrorFormatter

commit 738f50c497166f81ccbe3f40fbcff895ce71f82f
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 11:49:19 2017 +1200

    Upgrading notes on mysite/_config.php

commit 6279d28e5e455916f902a2f963c014d8899f7fc7
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 11:43:28 2017 +1200

    Update developer documentation

commit 5c90d53a84ef0139c729396949a7857fae60436f
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 22 10:48:44 2017 +1200

    Update installer to not use global databaseConfig

commit f9b2ba4755371f08bd95f6908ac612fcbb7ca205
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Wed Jun 21 21:04:39 2017 +1200

    Fix behat issues

commit 5b59a912b60282b4dad4ef10ed3b97c5d0a761ac
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Wed Jun 21 17:07:11 2017 +1200

    Move HTTPApplication to SilverStripe\Control namespace

commit e2c4a18f637bdd3d276619554de60ee8b4d95ced
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Wed Jun 21 16:29:03 2017 +1200

    More documentation
    Fix up remaining tests
    Refactor temp DB into TempDatabase class so it’s available outside of unit tests.

commit 5d235e64f341d6251bfe9f4833f15cc8593c5034
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Wed Jun 21 12:13:15 2017 +1200

    API HTTPRequestBuilder::createFromEnvironment() now cleans up live globals
    BUG Fix issue with SSViewer
    Fix Security / View tests

commit d88d4ed4e48291cb65407f222f190064b1f1deeb
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 20 16:39:43 2017 +1200

    API Refactor AppKernel into CoreKernel

commit f7946aec3391139ae1b4029c353c327a36552b36
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 20 16:00:40 2017 +1200

    Docs and minor cleanup

commit 12bd31f9366327650b5c0c0f96cd0327d44faf0a
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 20 15:34:34 2017 +1200

    API Remove OutputMiddleware
    API Move environment / global / ini management into Environment class
    API Move getTempFolder into TempFolder class
    API Implement HTTPRequestBuilder / CLIRequestBuilder
    BUG Restore SS_ALLOWED_HOSTS check in original location
    API CoreKernel now requires $basePath to be passed in
    API Refactor installer.php to use application to bootstrap
    API move memstring conversion globals to Convert
    BUG Fix error in CoreKernel nesting not un-nesting itself properly.

commit bba979114624247cf463cf2a8c9e4be9a7c3a772
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 19 18:07:53 2017 +1200

    API Create HTTPMiddleware and standardise middleware for request handling

commit 2a10c2397bdc53001013f607b5d38087ce6c0730
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 19 17:42:42 2017 +1200

    Fixed ORM tests

commit d75a8d1d93398af4bd0432df9e4bc6295c15a3fe
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 19 17:15:07 2017 +1200

    FIx i18n tests

commit 06364af3c379c931889c4cc34dd920fee3db204a
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 19 16:59:34 2017 +1200

    Fix controller namespace
    Move states to sub namespace

commit 2a278e2953d2dbb19f78d91c919048e1fc935436
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 19 12:49:45 2017 +1200

    Fix forms namespace

commit b65c21241bee019730027071d815dbf7571197a4
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 15 18:56:48 2017 +1200

    Update API usages

commit d1d4375c95a264a6b63cbaefc2c1d12f808bfd82
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Thu Jun 15 18:41:44 2017 +1200

    API Refactor $flush into HTPPApplication
    API Enforce health check in Controller::pushCurrent()
    API Better global backup / restore
    Updated Director::test() to use new API

commit b220534f06732db4fa940d8724c2a85c0ba2495a
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 22:05:57 2017 +1200

    Move app nesting to a test state helper

commit 603704165c08d0c1c81fd5e6bb9506326eeee17b
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 21:46:04 2017 +1200

    Restore kernel stack to fix multi-level nesting

commit 2f6336a15bf79dc8c2edd44cec1931da2dd51c28
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 17:23:21 2017 +1200

    API Implement kernel nesting

commit fc7188da7d6ad6785354bab61f08700454c81d91
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 15:43:13 2017 +1200

    Fix core tests

commit a0ae7235148fffd71f2f02d1fe7fe45bf3aa39eb
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 15:23:52 2017 +1200

    Fix manifest tests

commit ca033952513633e182040d3d13e1caa9000ca184
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 15:00:00 2017 +1200

    API Move extension management into test state

commit c66d4339777663a8a04661fea32a0cf35b95d20f
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Tue Jun 13 14:10:59 2017 +1200

    API Refactor SapphireTest state management into SapphireTestState
    API Remove Injector::unregisterAllObjects()
    API Remove FakeController

commit f26ae75c6ecaafa0dec1093264e0187191e6764d
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 12 18:04:34 2017 +1200

    Implement basic CLI application object

commit 001d5596621404892de0a5413392379eff990641
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Mon Jun 12 17:39:38 2017 +1200

    Remove references to SapphireTest::is_running_test()
    Upgrade various code

commit de079c041dacd96bc4f4b66421fa2b2cc4c320f8
Author: Damian Mooyman <damian@silverstripe.com>
Date:   Wed Jun 7 18:07:33 2017 +1200

    API Implement APP object
    API Refactor of Session
2017-06-22 22:50:45 +12:00
Daniel Hensby
6f2b08b962
Merge branch '3.6' into 3 2017-06-14 12:02:27 +01:00
3Dgoo
f0c00bfb78 Fixing language typo in docs 2017-06-13 05:37:07 +09:30
Simon Erkelens
2b26cafcff Separate out the log-out handling.
Repairing tests and regressions
Consistently use `Security::getCurrentUser()` and `Security::setCurrentUser()`
Fix for the logout handler to properly logout, some minor wording updates
Remove the login hashes for the member when logging out.
BasicAuth to use `HTTPRequest`
2017-06-07 21:11:58 +12:00
Antony Thorpe
6348f2e3e8 Updated Form.php & 04_Form_Security.md
Changed the `strictFormMethodCheck` protected property from false to true to step out on the front foot with this security setting.  In the documentation under the title [Cross-Site Request Forgery](https://github.com/silverstripe/silverstripe-framework/blob/master/docs/en/02_Developer_Guides/09_Security/04_Secure_Coding.md#cross-site-request-forgery-csrf) it states, "it is also recommended to limit form submissions to the intended HTTP verb (mostly GET or POST) through [api:Form::setStrictFormMethodCheck()]."  The same advice is noted in [Form Security](c2292a4cc1/docs/en/02_Developer_Guides/03_Forms/04_Form_Security.md (strict-form-submission)).

Why not make this the default behaviour?  Is there a scenario where this would cause a problem?  Have manually tested in the CMS (alpha7) and is working fine.

Note: Original commit that establised the API Form::setStrictFormMethodCheck is 14c59be8.
2017-06-06 21:10:49 +12:00
Justin Brown
ac08e16720 Update to 00_CSV_Import.md
Adding further explanation for using a custom CsvBulkLoader in ModelAdmin instead of the default one. I think some people might be able to guess at this, but others (like me) might benefit from making things a bit more explicit. This a follow up from my [question on StackOverflow](https://stackoverflow.com/questions/44271755/adding-custom-csvbulkuploader-to-modeladmin-in-silverstripe).
2017-05-31 09:05:05 -06:00
Damian Mooyman
e7d87add9f API Remove legacy HTMLEditor classes 2017-05-30 11:01:28 +12:00
Chris Joe
5ec8d40c19 Merge pull request #6957 from open-sausages/pulls/4/react-di-documentation
Docs for React DI
2017-05-26 10:59:42 +12:00
Daniel Hensby
893f19a5ea
DOCS Updating index definition examples 2017-05-25 23:29:12 +01:00
Aaron Carlino
bfc373cf0f update docs with new api 2017-05-25 16:34:32 +12:00
Aaron Carlino
75981989b0 Docs for React DI 2017-05-25 14:58:55 +12:00
Robbie Averill
ad43a82923 API Consistent use of inst() naming across framework 2017-05-19 14:38:06 +12:00