Normann Lou
92f3d62d70
ENHANCEMENT: add extra <span> DOM with 'jstree-foldericon' class for tree view of folders
2012-04-26 11:17:16 +02:00
Ingo Schommer
473d3a66b8
MINOR Fixed controller contexts in LeftAndMain->SiteTreeAsUL() - needs different context for edit links and determining "current page" (not applicable for CMSPagesController)
2012-04-17 22:33:30 +02:00
Simon Welsh
f07258f3cf
MINOR Update @package values to match renaming sapphire
2012-04-15 10:50:19 +12:00
Simon Welsh
3a6341a251
API-CHANGE sapphire folder can now be renamed.
2012-04-15 10:50:19 +12:00
Ingo Schommer
8ba9c3ca6b
API CHANGE Removed $params argument to DataObject->getCMSFields(), please use FormScaffolder directly ( fixes #7135 )
2012-04-13 15:46:47 +02:00
Sam Minnee
adf658c91f
BUGFIX: Removed obsolete field File.Sort
2012-04-11 18:13:13 +12:00
Ingo Schommer
40d73127ae
MINOR Using late static binding instead of Object::create() calls
2012-04-04 17:10:31 +02:00
Sean Harvey
e097f6e1a8
MINOR Fixes to method arguments in core classes for E_STRICT support.
...
API CHANGE Remove abstract static function and just use static functions
in Authenticator (PHP 5.3+ doesn't support abstract static functions)
2012-03-28 22:41:42 +13:00
Sam Minnee
adfdd068e2
Merge branch 'ereg-to-preg' of https://github.com/AngryPHPNerd/sapphire
...
Conflicts:
model/fieldtypes/Date.php
2012-03-05 13:54:20 +13:00
Ingo Schommer
ef77b709c2
MINOR Fixed field label in Folder->getCMSFields()
2012-03-02 20:46:22 +01:00
AngryPHPNerd
0e2cbb0b88
Replace ereg with preg_*
2012-02-27 22:14:02 +01:00
Ingo Schommer
27cdc40c7a
API CHANGE Moved AssetAdmin-specific fields from Folder->getCMSFields() to AssetAdmin->getEditForm(). For modifying those fields via DataExtension, please use AssetAdmin->updateEditForm() instead
2012-02-23 23:29:57 +01:00
Ingo Schommer
cbc2891c80
MINOR Metadata for GridField and Folder->getCMSFields() to allow opening folder references in the UI
2012-02-23 18:39:42 +01:00
Ingo Schommer
abfa16fa70
ENHANCEMENT Using native jQuery UI buttons and icon styling for a less coupled implementation (e.g. assuming that a "constructive" button always has a specific icon, or one at all). All CMS UI buttons switched to use <button> markup, which allows for inline icons and correctly aligned multi-line button labels.
2012-02-17 15:58:32 +01:00
Ingo Schommer
f2717f0788
ENHANCEMENT GridField-based file listing
2012-02-17 13:33:39 +01:00
Ingo Schommer
4f49c452ac
BUGFIX Return zero file size for folders (mainly to avoid listing it in AssetAdmin tables, but also because it doesn't make sense for folders)
2012-02-17 13:33:39 +01:00
Sam Minnee
b260c63bab
ENHANCEMENT: Use Folder's Form Tabs to provide the top 3 tabs in the CMS.
2012-02-15 14:26:45 +01:00
Felipe Skroski
586ae4ab6e
MINOR GridField column header and sorting styles
2012-02-03 15:27:18 +01:00
Russell Michell
0090009703
BUGFIX: Added default args to GridFieldPopupForms for AssetAdmin which was casing errors
...
BUGFIX: Added GridFieldFilter() to new GridFieldConfig whuch adds filters and fixes the display
MINOR: Added gridfield specific margins to form div to push GridField display down-page (due to GF's sort-fields which will be refactored from new designs)
2012-01-30 09:26:39 +13:00
Stig Lindqvist
32b067f7d6
BUGIX: Cant rename folders in AssetAdmin
2012-01-10 15:09:50 +13:00
Stig Lindqvist
7d87fa0600
ENHANCEMENT Show 10 images per page in the AssetAdmin
2012-01-10 15:09:20 +13:00
Ingo Schommer
a06300f0b4
ENHANCEMENT GridFieldItemEditView (and specific view and behaviour for usage in CMS)
2012-01-09 21:17:56 +01:00
Ingo Schommer
d9538d3085
ENHANCEMENT Migrating AssetAdmin fields to File/Folder/Image->getCMSFields()
2012-01-09 21:17:53 +01:00
Ingo Schommer
5a0eef5bab
ENHANCEMENT Replaced AssetTableField with GridField in Folder->getCMSFields() (and thereby in AssetAdmin)
2012-01-09 11:50:53 +01:00
Stig Lindqvist
3c516b7b97
API CHANGE: Refactored GridField modifiers into GridField_ColumnProvider, GridField_HTMLProvider, GridField_ActionProvider, and GridField_DataModifier interfaces, all added as components in the config.
...
API CHANGE: Simplified state handling so that it's just a key store. Affectors are replaced with GridField_ActionProviders. API CHANGE: Removed GridField state manipulation actions instead opting for GridField_ActionProvider actions.
API CHANGE: Removed support for modifiers that add "body" rows, instead having core support for generating the body rows hardcoded into the GridField.
API CHANGE: Allow modification of columns across the whole GridField with the GridField_ColumnProvider interface.
API CHANGE: Renamed GridField_AlterAction to GridField_Action, and added actionName/args parameters, since it can be used for all actions (including batch actions and row actions)
API CHANGE: Removed GridFieldRow class.
2012-01-09 13:30:34 +13:00
Hamish Friedlander
0a3e0f15de
MINOR: Replace references to FieldSet (now deprecated) with references to FieldList
2011-10-28 15:58:55 +13:00
Ingo Schommer
da0ac49d5f
API CHANGE Rewriting underscores to dashes in files uploaded through Upload->load(), Folder->addUploadToFolder() or Image->loadUploadedImage(). Transliterating non-ASCII characters automatically (turn off via FileNameFilter::$default_use_transliterator=false)
...
ENHANCEMENT New FileNameFilter class for a more customisable way to influence filename filtering in Upload->load(), Folder->addUploadToFolder() or Image->loadUploadedImage()
2011-10-07 14:12:46 +02:00
Ingo Schommer
afeccbc9cb
ENHANCEMENT Added File::get_class_for_file_extension() instead of hardcoding it in Folder->constructChild(). Allows for custom classes in files uploaded through core functionality like the Upload and FileField logic.
2011-10-07 14:12:45 +02:00
Will Rossiter
1732a17114
Merged new-orm into datagrid
2011-09-26 16:47:54 +13:00
Ingo Schommer
ce8e72cf0e
MINOR Removing executable flag from all files (thanks miiihi)
2011-09-18 22:04:02 +02:00
Ingo Schommer
c776a1cd67
BUGFIX Consistently using Convert::raw2sql() instead of DB::getConn()->addslashes() or PHP's deprecated addslashes() for database escaping
2011-09-15 14:24:46 +02:00
ajshort
1f6f7f0862
API CHANGE: Deprecated CompositeField->FieldSet() in favour of CompositeField->FieldList().
...
MINOR: Replaced usage of FieldSet with FieldList.
MINOR: Renamed FieldSetTest to FieldListTest.
2011-05-11 17:51:54 +10:00
ajshort
3a1c2df4e7
API CHANGE: Renamed DataObjectDecorator to DataExtension.
...
API CHANGE: Renamed LeftAndMainDecorator to LeftAndMainExtension.
MINOR: Replaced all references to decorators with extension.
2011-04-26 11:01:38 +10:00
Julian Seidenberg
6f1eab18c1
BUGFIX: fixing naming of folders when created a new folder. The title now no longer includes the full path.
2011-03-30 18:16:17 +13:00
Julian Seidenberg
5efdc60029
API-CHANGE: Renaming a folder did not update the folder's filename on the disk. This is now fixed. There is now a one-to-one mapping between a folder and its "Title" label. Files still can have a Title that is different from the Filename ( fixes #6088 , thanks Pike)
2011-03-30 18:16:16 +13:00
Ingo Schommer
50e8467535
MINOR Moved Folder->getUnusedFilesListFilter() to new SiteTreeFolderDecorator class in 'cms' module
...
MINOR Moved Folder_UnusedAssetsField to 'cms' module
2011-03-29 18:07:57 +13:00
Ingo Schommer
c6b7b1dc28
BUGFIX Fixed SQL injection in Folder::findOrMake() parameter. Exploitable through Upload::, although unlikely to be set via user input.
2011-03-21 16:12:37 +13:00
Ingo Schommer
31d7a00eb7
MINOR Fixed merge errors
2011-03-16 13:31:46 +13:00
Sam Minnee
27246ce982
MINOR: Fixed 2.4 mergeback
2011-02-22 10:53:58 +13:00
Sam Minnee
1e0c4ae8d1
Merge branch '2.4'
...
Conflicts:
cache/Cache.php
cli/CliController.php
core/Convert.php
core/Core.php
core/ManifestBuilder.php
core/Object.php
core/SSViewer.php
core/control/ContentController.php
core/control/ContentNegotiator.php
core/control/FormResponse.php
core/control/RequestHandler.php
core/control/SilverStripeNavigatorItem.php
core/i18n.php
core/i18nTextCollector.php
core/model/DataObjectSet.php
core/model/Hierarchy.php
core/model/Image.php
core/model/MySQLDatabase.php
core/model/SiteConfig.php
core/model/SiteTree.php
core/model/Translatable.php
core/model/VirtualPage.php
dev/Debug.php
dev/SapphireTest.php
dev/TestRunner.php
dev/YamlFixture.php
dev/install/MySQLDatabaseConfigurationHelper.php
docs/en/installation/from-source.md
docs/en/topics/themes.md
docs/en/tutorials/4-site-search.md
email/Mailer.php
filesystem/File.php
filesystem/Folder.php
forms/ComplexTableField.php
forms/CurrencyField.php
forms/DateField.php
forms/FieldSet.php
forms/FileField.php
forms/FileIFrameField.php
forms/HtmlEditorConfig.php
forms/HtmlEditorField.php
forms/SelectionGroup.php
forms/SimpleImageField.php
forms/TabSet.php
forms/TableField.php
forms/TableListField.php
forms/TreeDropdownField.php
forms/TreeMultiselectField.php
integration/Geoip.php
javascript/SelectionGroup.js
javascript/TreeSelectorField.js
javascript/UpdateURL.js
javascript/core/jquery.ondemand.js
javascript/tiny_mce_improvements.js
javascript/tree/tree.js
lang/en_US.php
search/ContentControllerSearchExtension.php
security/Group.php
security/Member.php
security/PermissionCheckboxSetField.php
security/PermissionRole.php
security/Security.php
static-main.php
templates/RelationComplexTableField.ss
templates/TableListField.ss
tests/ConvertTest.php
tests/DataObjectSetTest.php
tests/DataObjectTest.php
tests/DataObjectTest.yml
tests/RequestHandlingTest.php
tests/SSViewerTest.php
tests/SiteTreePermissionsTest.php
tests/SiteTreeTest.php
tests/TransactionTest.php
tests/api/RestfulServiceTest.php
tests/control/DirectorTest.php
tests/control/ModelAsControllerTest.php
tests/fieldtypes/WidgetAreaEditorTest.php
tests/forms/CurrencyFieldTest.php
tests/forms/FormTest.php
tests/model/DatabaseTest.php
tests/model/ImageTest.php
tests/search/ContentControllerSearchExtensionTest.php
tests/security/MemberAuthenticatorTest.php
thirdparty/.gitignore
thirdparty/behaviour/behaviour.js
thirdparty/firebug-lite/firebug.js
thirdparty/firebug-lite/firebugx.js
thirdparty/jquery-form/jquery.form.js
thirdparty/jquery-livequery/jquery.livequery.js
thirdparty/jquery-livequery/test/jquery.js
thirdparty/jquery-livequery/test/test.html
thirdparty/jquery-livequery/test/test2.html
thirdparty/jquery-metadata/META.json
thirdparty/jquery-metadata/README
thirdparty/jquery-metadata/jquery.metadata.js
thirdparty/jquery-metadata/test/index.html
thirdparty/jquery-metadata/test/jquery.js
thirdparty/jquery-metadata/test/test.js
thirdparty/jquery-metadata/test/testrunner.js
thirdparty/jquery-metadata/test/testsuite.css
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
thirdparty/jquery-ui-themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
thirdparty/jquery-ui-themes/smoothness/images/ui-icons_222222_256x240.png
thirdparty/jquery-ui-themes/smoothness/images/ui-icons_2e83ff_256x240.png
thirdparty/jquery-ui-themes/smoothness/images/ui-icons_454545_256x240.png
thirdparty/jquery-ui-themes/smoothness/images/ui-icons_888888_256x240.png
thirdparty/jquery-ui-themes/smoothness/images/ui-icons_cd0a0a_256x240.png
thirdparty/jquery-ui/i18n/jquery-ui-i18n.js
thirdparty/jquery-ui/i18n/ui.datepicker-ar.js
thirdparty/jquery-ui/i18n/ui.datepicker-bg.js
thirdparty/jquery-ui/i18n/ui.datepicker-ca.js
thirdparty/jquery-ui/i18n/ui.datepicker-cs.js
thirdparty/jquery-ui/i18n/ui.datepicker-da.js
thirdparty/jquery-ui/i18n/ui.datepicker-de.js
thirdparty/jquery-ui/i18n/ui.datepicker-el.js
thirdparty/jquery-ui/i18n/ui.datepicker-eo.js
thirdparty/jquery-ui/i18n/ui.datepicker-es.js
thirdparty/jquery-ui/i18n/ui.datepicker-fa.js
thirdparty/jquery-ui/i18n/ui.datepicker-fi.js
thirdparty/jquery-ui/i18n/ui.datepicker-fr.js
thirdparty/jquery-ui/i18n/ui.datepicker-he.js
thirdparty/jquery-ui/i18n/ui.datepicker-hr.js
thirdparty/jquery-ui/i18n/ui.datepicker-hu.js
thirdparty/jquery-ui/i18n/ui.datepicker-hy.js
thirdparty/jquery-ui/i18n/ui.datepicker-id.js
thirdparty/jquery-ui/i18n/ui.datepicker-is.js
thirdparty/jquery-ui/i18n/ui.datepicker-it.js
thirdparty/jquery-ui/i18n/ui.datepicker-ja.js
thirdparty/jquery-ui/i18n/ui.datepicker-ko.js
thirdparty/jquery-ui/i18n/ui.datepicker-lt.js
thirdparty/jquery-ui/i18n/ui.datepicker-lv.js
thirdparty/jquery-ui/i18n/ui.datepicker-ms.js
thirdparty/jquery-ui/i18n/ui.datepicker-nl.js
thirdparty/jquery-ui/i18n/ui.datepicker-no.js
thirdparty/jquery-ui/i18n/ui.datepicker-pl.js
thirdparty/jquery-ui/i18n/ui.datepicker-pt-BR.js
thirdparty/jquery-ui/i18n/ui.datepicker-ro.js
thirdparty/jquery-ui/i18n/ui.datepicker-ru.js
thirdparty/jquery-ui/i18n/ui.datepicker-sk.js
thirdparty/jquery-ui/i18n/ui.datepicker-sl.js
thirdparty/jquery-ui/i18n/ui.datepicker-sq.js
thirdparty/jquery-ui/i18n/ui.datepicker-sr-SR.js
thirdparty/jquery-ui/i18n/ui.datepicker-sr.js
thirdparty/jquery-ui/i18n/ui.datepicker-sv.js
thirdparty/jquery-ui/i18n/ui.datepicker-th.js
thirdparty/jquery-ui/i18n/ui.datepicker-tr.js
thirdparty/jquery-ui/i18n/ui.datepicker-uk.js
thirdparty/jquery-ui/i18n/ui.datepicker-zh-CN.js
thirdparty/jquery-ui/i18n/ui.datepicker-zh-TW.js
thirdparty/jquery/jquery.js
thirdparty/jsmin/.piston.yml
thirdparty/jsmin/jsmin.php
thirdparty/prototype/prototype.js
thirdparty/scriptaculous/dragdrop.js
thirdparty/simplepie/.piston.yml
thirdparty/spyc/.piston.yml
thirdparty/spyc/README
thirdparty/spyc/php4/spyc.php4
thirdparty/spyc/php4/test.php4
thirdparty/spyc/spyc.php
thirdparty/spyc/spyc.yaml
thirdparty/tinymce-advcode/dialog.html
thirdparty/tinymce-advcode/editor_plugin_src.js
thirdparty/tinymce-advcode/js/dialog.js
thirdparty/tinymce/langs/en.js
thirdparty/tinymce/plugins/advhr/langs/en_dlg.js
thirdparty/tinymce/plugins/advhr/rule.htm
thirdparty/tinymce/plugins/advimage/image.htm
thirdparty/tinymce/plugins/advimage/langs/en_dlg.js
thirdparty/tinymce/plugins/advlink/langs/en_dlg.js
thirdparty/tinymce/plugins/advlink/link.htm
thirdparty/tinymce/plugins/emotions/emotions.htm
thirdparty/tinymce/plugins/emotions/langs/en_dlg.js
thirdparty/tinymce/plugins/example/dialog.htm
thirdparty/tinymce/plugins/fullpage/fullpage.htm
thirdparty/tinymce/plugins/fullpage/langs/en_dlg.js
thirdparty/tinymce/plugins/fullscreen/fullscreen.htm
thirdparty/tinymce/plugins/inlinepopups/template.htm
thirdparty/tinymce/plugins/media/langs/en_dlg.js
thirdparty/tinymce/plugins/media/media.htm
thirdparty/tinymce/plugins/paste/js/pasteword.js
thirdparty/tinymce/plugins/paste/langs/en_dlg.js
thirdparty/tinymce/plugins/paste/pastetext.htm
thirdparty/tinymce/plugins/paste/pasteword.htm
thirdparty/tinymce/plugins/searchreplace/langs/en_dlg.js
thirdparty/tinymce/plugins/searchreplace/searchreplace.htm
thirdparty/tinymce/plugins/spellchecker/editor_plugin.js
thirdparty/tinymce/plugins/spellchecker/editor_plugin_src.js
thirdparty/tinymce/plugins/style/langs/en_dlg.js
thirdparty/tinymce/plugins/style/props.htm
thirdparty/tinymce/plugins/table/cell.htm
thirdparty/tinymce/plugins/table/langs/en_dlg.js
thirdparty/tinymce/plugins/table/merge_cells.htm
thirdparty/tinymce/plugins/table/row.htm
thirdparty/tinymce/plugins/table/table.htm
thirdparty/tinymce/plugins/template/langs/en_dlg.js
thirdparty/tinymce/plugins/template/template.htm
thirdparty/tinymce/plugins/xhtmlxtras/abbr.htm
thirdparty/tinymce/plugins/xhtmlxtras/acronym.htm
thirdparty/tinymce/plugins/xhtmlxtras/attributes.htm
thirdparty/tinymce/plugins/xhtmlxtras/cite.htm
thirdparty/tinymce/plugins/xhtmlxtras/del.htm
thirdparty/tinymce/plugins/xhtmlxtras/ins.htm
thirdparty/tinymce/plugins/xhtmlxtras/langs/en_dlg.js
thirdparty/tinymce/themes/advanced/about.htm
thirdparty/tinymce/themes/advanced/anchor.htm
thirdparty/tinymce/themes/advanced/charmap.htm
thirdparty/tinymce/themes/advanced/color_picker.htm
thirdparty/tinymce/themes/advanced/image.htm
thirdparty/tinymce/themes/advanced/langs/en.js
thirdparty/tinymce/themes/advanced/langs/en_dlg.js
thirdparty/tinymce/themes/advanced/link.htm
thirdparty/tinymce/themes/advanced/source_editor.htm
thirdparty/tinymce/themes/simple/langs/en.js
thirdparty/tinymce/tiny_mce.js
thirdparty/tinymce/tiny_mce_src.js
widgets/Widget.php
2011-02-14 18:47:53 +13:00
Sam Minnee
cf0bf20e26
BUGFIX: Don't include web.config in the assets tracked in the File table.
...
MINOR: Add documentation to File::$allowed_extensions explaining that there are config files to edit in assets/
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@112961 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:58 +13:00
Ingo Schommer
d55e38b6ab
MINOR Checking that Folder::findOrMake() can create an assets/assets/ folder
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@107276 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:35 +13:00
Ingo Schommer
9a1c997818
MINOR Using Filesystem::makeFolder() instead of mkdir() in Folder for file operations
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@107275 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:35 +13:00
Ingo Schommer
c82f0335f0
API CHANGE Don't reflect changes in File and Folder property setters on filesystem before write() is called, to ensure that validate() applies in all cases. This fixes a problem where File->setName() would circumvent restrictions in File::$allowed_extensions ( fixes #5693 )
...
API CHANGE Removed File->resetFilename(), use File->updateFilesystem() to update the filesystem, and File->getRelativePath() to just update the "Filename" property without any filesystem changes (emulating the old $renamePhysicalFile method argument in resetFilename())
API CHANGE Removed File->autosetFilename(), please set the "Filename" property via File->getRelativePath()
MINOR Added unit tests to FileTest and FolderTest (some of them copied from FileTest, to test Folder behaviour separately)
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@107273 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:34 +13:00
Ingo Schommer
7e65d3c5af
MINOR Documentation in File and Folder class
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@107265 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:33 +13:00
Ingo Schommer
1f1dda8643
MINOR Fixed phpdoc documentation
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@103398 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:15 +13:00
Geoff Munn
d21e7b0623
BUGFIX: default sort column now quoted
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@103182 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:13 +13:00
Ingo Schommer
70ac42c577
MINOR Respecting folder sort order in admin/assets by adding Folder::$default_sort="Sort" ( #5235 )
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@101698 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:07 +13:00
Michael Andrewartha
1baae6723b
BUGFIX: disabling unused file list as feature is still buggy.
...
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@101380 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:05 +13:00
Ingo Schommer
1e9aeaef3e
BUGFIX Fixed Folder writing by overloading validate() (was inheriting File->validate() which does extension checks)
...
BUGFIX Fixed Folder::findOrMake() not to create "new-folder" through File->setName() if using a trailing slash in the path (which causes an empty name). Added FolderTest to verify this.
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@101266 467b73ca-7a2a-4603-9d3b-597d59a354a9
2011-02-02 14:19:04 +13:00