-To customize the markup that the `$Breadcrumbs` generates, copy `cms/templates/BreadcrumbsTemplate.ss` to
+To customise the markup that the `$Breadcrumbs` generates, copy `cms/templates/BreadcrumbsTemplate.ss` to
`mysite/templates/BreadcrumbsTemplate.ss`, modify the newly copied template and flush your SilverStripe cache.
diff --git a/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md b/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md
index 844d93348..9b213d25f 100644
--- a/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md
+++ b/docs/en/02_Developer_Guides/01_Templates/05_Template_Inheritance.md
@@ -5,7 +5,7 @@ summary: Override and extend module and core markup templates from your applicat
Bundled within SilverStripe are default templates for any markup the framework outputs for things like Form templates,
Emails or RSS Feeds. These templates are provided to make getting your site up and running quick with sensible defaults
-but it's easy to replace and customize SilverStripe (and add-on's) by providing custom templates in your own
+but it's easy to replace and customise SilverStripe (and add-on's) by providing custom templates in your own
`mysite/templates` folder or in your `themes/your_theme/templates` folder.
Take for instance the `GenericEmail` template in SilverStripe. This is the HTML default template that any email created
diff --git a/docs/en/02_Developer_Guides/01_Templates/06_Themes.md b/docs/en/02_Developer_Guides/01_Templates/06_Themes.md
index 7f6d44325..80cc8a1b4 100644
--- a/docs/en/02_Developer_Guides/01_Templates/06_Themes.md
+++ b/docs/en/02_Developer_Guides/01_Templates/06_Themes.md
@@ -75,7 +75,7 @@ themes
If you want to submit your theme to the SilverStripe directory then check
-* You should ensure your templates are well structured, modular and commented so it's easy for other people to customize
+* You should ensure your templates are well structured, modular and commented so it's easy for other people to customise
* Templates should not contain text inside images and all images provided must be open source and not break any
copyright or license laws. This includes any icons your template uses.
* A theme does not include any PHP files. Only CSS, HTML, Images and javascript.
diff --git a/docs/en/02_Developer_Guides/01_Templates/index.md b/docs/en/02_Developer_Guides/01_Templates/index.md
index 6055e1d8f..ffc17b2b7 100644
--- a/docs/en/02_Developer_Guides/01_Templates/index.md
+++ b/docs/en/02_Developer_Guides/01_Templates/index.md
@@ -1,6 +1,6 @@
title: Templates and Views
summary: This guide showcases the SilverStripe template engine and learn how to build your own themes.
-introduction: SilverStripe comes with it's own templating engine. This guide walks you through the features of the template engine, how to create custom templates and ways to customize your data output.
+introduction: SilverStripe comes with it's own templating engine. This guide walks you through the features of the template engine, how to create custom templates and ways to customise your data output.
Most of what will be public on your website comes from template files that are defined in SilverStripe. Either in the
core framework, the modules or themes you install, and your own custom templates.
@@ -14,4 +14,4 @@ templates from your controllers.
## How to's
-[CHILDREN Folder=How_Tos]
\ No newline at end of file
+[CHILDREN Folder=How_Tos]
diff --git a/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md b/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md
index 91c717ce6..3026c3d57 100644
--- a/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md
+++ b/docs/en/02_Developer_Guides/02_Controllers/01_Introduction.md
@@ -109,7 +109,7 @@ Action methods can return one of four main things:
* We can render HTML and leave SilverStripe to set the response code and body.
*/
public function htmlaction() {
- return $this->customize(new ArrayData(array(
+ return $this->customise(new ArrayData(array(
'Title' => 'HTML Action'
)))->renderWith('MyCustomTemplate');
}
diff --git a/docs/en/02_Developer_Guides/02_Controllers/03_Access_Control.md b/docs/en/02_Developer_Guides/02_Controllers/03_Access_Control.md
index e8bb04e6a..f5ce5fc61 100644
--- a/docs/en/02_Developer_Guides/02_Controllers/03_Access_Control.md
+++ b/docs/en/02_Developer_Guides/02_Controllers/03_Access_Control.md
@@ -30,7 +30,7 @@ directly calling methods that they shouldn't.
'cmsrestrictedaction' => 'CMS_ACCESS_CMSMain',
// complexaction can only be accessed if $this->canComplexAction() returns true.
- 'complexaction' '->canComplexAction'
+ 'complexaction' => '->canComplexAction',
// complexactioncheck can only be accessed if $this->canComplexAction("MyRestrictedAction", false, 42) is true.
'complexactioncheck' => '->canComplexAction("MyRestrictedAction", false, 42)',
@@ -200,4 +200,4 @@ execution. This behavior can be used to implement permission checks.
## API Documentation
-* [api:Controller]
\ No newline at end of file
+* [api:Controller]
diff --git a/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md b/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md
index 78d03bea9..0172fae70 100644
--- a/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md
+++ b/docs/en/02_Developer_Guides/03_Forms/00_Introduction.md
@@ -126,13 +126,17 @@ A field can be appended to the [api:FieldList].
$fields = $form->Fields();
// add a field
- $fields->push(new TextField(..));
+ $fields->push(TextField::create(..));
// insert a field before another one
- $fields->insertBefore(new TextField(..), 'Email');
+ $fields->insertBefore(TextField::create(..), 'Email');
// insert a field after another one
- $fields->insertAfter(new TextField(..), 'Name');
+ $fields->insertAfter(TextField::create(..), 'Name');
+
+ // insert a tab before the main content tab (used to position tabs in the CMS)
+ $fields->insertBefore(Tab::create(...), 'Main');
+ // Note: you need to create and position the new tab prior to adding fields via addFieldToTab()
Fields can be fetched after they have been added in.
@@ -153,7 +157,7 @@ information on the CMS interface.
## Modifying FormFields
-Each [api:FormField] subclass has a number of methods you can call on it to customize its' behavior or HTML markup. The
+Each [api:FormField] subclass has a number of methods you can call on it to customise its' behavior or HTML markup. The
default `FormField` object has several methods for doing common operations.
diff --git a/docs/en/02_Developer_Guides/03_Forms/Field_types/04_GridField.md b/docs/en/02_Developer_Guides/03_Forms/Field_types/04_GridField.md
index 5965f010f..e63f9821d 100644
--- a/docs/en/02_Developer_Guides/03_Forms/Field_types/04_GridField.md
+++ b/docs/en/02_Developer_Guides/03_Forms/Field_types/04_GridField.md
@@ -232,7 +232,7 @@ database.
## GridFieldDetailForm
The `GridFieldDetailForm` component drives the record viewing and editing form. It takes its' fields from
-`DataObject->getCMSFields()` method but can be customized to accept different fields via the
+`DataObject->getCMSFields()` method but can be customised to accept different fields via the
[api:GridFieldDetailForm::setFields()] method.
:::php
diff --git a/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md b/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md
index fe825245b..e872a092c 100644
--- a/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md
+++ b/docs/en/02_Developer_Guides/05_Extending/01_Extensions.md
@@ -113,7 +113,7 @@ we added a `SayHi` method which is unique to our extension.
## Modifying Existing Methods
If the `Extension` needs to modify an existing method it's a little trickier. It requires that the method you want to
-customize has provided an *Extension Hook* in the place where you want to modify the data. An *Extension Hook* is done
+customise has provided an *Extension Hook* in the place where you want to modify the data. An *Extension Hook* is done
through the [api:Object::extend()] method.
**framework/security/Member.php**
diff --git a/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md b/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md
index 5d8c2b7e6..c6fea5b3f 100644
--- a/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md
+++ b/docs/en/02_Developer_Guides/06_Testing/00_Unit_Testing.md
@@ -96,7 +96,7 @@ environments. If for some reason you don't have access to the command line, you
### Via the CLI
-The [sake](../cli) executable that comes with SilverStripe can trigger a customized [api:TestRunner] class that
+The [sake](../cli) executable that comes with SilverStripe can trigger a customised [api:TestRunner] class that
handles the PHPUnit configuration and output formatting. While the custom test runner a handy tool, it's also more
limited than using `phpunit` directly, particularly around formatting test output.
@@ -176,7 +176,7 @@ databases on your machine. To get rid of them is a call to `http://yoursite.com/
## Custom PHPUnit Configuration
The `phpunit` executable can be configured by command line arguments or through an XML file. SilverStripe comes with a
-default `phpunit.xml.dist` that you can use as a starting point. Copy the file into `phpunit.xml` and customize to your
+default `phpunit.xml.dist` that you can use as a starting point. Copy the file into `phpunit.xml` and customise to your
needs.
**phpunit.xml**
diff --git a/docs/en/02_Developer_Guides/06_Testing/04_Fixtures.md b/docs/en/02_Developer_Guides/06_Testing/04_Fixtures.md
index 757041aa0..bca0afcc5 100644
--- a/docs/en/02_Developer_Guides/06_Testing/04_Fixtures.md
+++ b/docs/en/02_Developer_Guides/06_Testing/04_Fixtures.md
@@ -231,7 +231,7 @@ After we've created this object in the factory, `getId` is used to retrieve it b
### Default Properties
-Blueprints can be overwritten in order to customize their behavior. For example, if a Fixture does not provide a Team
+Blueprints can be overwritten in order to customise their behavior. For example, if a Fixture does not provide a Team
name, we can set the default to be `Unknown Team`.
:::php
diff --git a/docs/en/02_Developer_Guides/06_Testing/index.md b/docs/en/02_Developer_Guides/06_Testing/index.md
index 190c2798f..3c7ca43f2 100644
--- a/docs/en/02_Developer_Guides/06_Testing/index.md
+++ b/docs/en/02_Developer_Guides/06_Testing/index.md
@@ -41,7 +41,7 @@ of course this information can be version controlled and shared with other team
**Note: This doesn't apply for running tests through the "sake" wrapper**
SilverStripe comes with a default `phpunit.xml.dist` that you can use as a starting point. Copy the file into a new
-`phpunit.xml` and customize to your needs - PHPUnit will auto-detect its existence, and prioritize it over the default
+`phpunit.xml` and customise to your needs - PHPUnit will auto-detect its existence, and prioritize it over the default
file.
There's nothing stopping you from creating multiple XML files (see the `--configuration` flag in
@@ -99,7 +99,7 @@ All command-line arguments are documented on
### Via the "sake" Wrapper on Command Line
-The [sake](/developer_guides/cli/) executable that comes with SilverStripe can trigger a customized
+The [sake](/developer_guides/cli/) executable that comes with SilverStripe can trigger a customised
[api:TestRunner] class that handles the PHPUnit configuration and output formatting.
While the custom test runner a handy tool, its also more limited than using `phpunit` directly,
particularly around formatting test output.
diff --git a/docs/en/02_Developer_Guides/09_Security/04_Secure_Coding.md b/docs/en/02_Developer_Guides/09_Security/04_Secure_Coding.md
index 87d4eedbe..ff434df04 100644
--- a/docs/en/02_Developer_Guides/09_Security/04_Secure_Coding.md
+++ b/docs/en/02_Developer_Guides/09_Security/04_Secure_Coding.md
@@ -156,7 +156,7 @@ passing data through, escaping should happen at the end of the chain.
}
}
-This might not be applicable in all cases - especially if you are building an API thats likely to be customized. If
+This might not be applicable in all cases - especially if you are building an API thats likely to be customised. If
you're passing unescaped data, make sure to be explicit about it by writing *phpdoc*-documentation and *prefixing* your
variables ($RAW_data instead of $data).
diff --git a/docs/en/02_Developer_Guides/10_Email/index.md b/docs/en/02_Developer_Guides/10_Email/index.md
index edccf9573..1c495e704 100644
--- a/docs/en/02_Developer_Guides/10_Email/index.md
+++ b/docs/en/02_Developer_Guides/10_Email/index.md
@@ -3,7 +3,7 @@ summary: Send HTML and plain text email from your SilverStripe application.
# Email
Creating and sending email in SilverStripe is done through the [api:Email] and [api:Mailer] classes. This document
-covers how to create an `Email` instance, customize it with a HTML template, then send it through a custom `Mailer`.
+covers how to create an `Email` instance, customise it with a HTML template, then send it through a custom `Mailer`.
## Configuration
@@ -32,7 +32,7 @@ to `*text*`).
The default HTML template for emails is named `GenericEmail` and is located in `framework/templates/email/`. To
-customize this template, copy it to the `mysite/templates/Email/` folder or use `setTemplate` when you create the
+customise this template, copy it to the `mysite/templates/Email/` folder or use `setTemplate` when you create the
`Email` instance.
diff --git a/docs/en/02_Developer_Guides/11_Integration/00_CSV_Import.md b/docs/en/02_Developer_Guides/11_Integration/00_CSV_Import.md
index 09745940e..21018130e 100644
--- a/docs/en/02_Developer_Guides/11_Integration/00_CSV_Import.md
+++ b/docs/en/02_Developer_Guides/11_Integration/00_CSV_Import.md
@@ -5,7 +5,7 @@
CSV import can be easily achieved through PHP's built-in `fgetcsv()` method,
but this method doesn't know anything about your datamodel. In SilverStripe,
this can be handled through the a specialized CSV importer class that can
-be customized to fit your data.
+be customised to fit your data.
## The CsvBulkLoader class
@@ -63,7 +63,7 @@ below the search form on the left.
## Import through a custom controller
-You can have more customized logic and interface feedback through a custom controller.
+You can have more customised logic and interface feedback through a custom controller.
Let's create a simple upload form (which is used for `MyDataObject` instances).
You'll need to add a route to your controller to make it accessible via URL
(see [director](/reference/director)).
diff --git a/docs/en/02_Developer_Guides/11_Integration/02_RSSFeed.md b/docs/en/02_Developer_Guides/11_Integration/02_RSSFeed.md
index 23c740d62..e27da7790 100644
--- a/docs/en/02_Developer_Guides/11_Integration/02_RSSFeed.md
+++ b/docs/en/02_Developer_Guides/11_Integration/02_RSSFeed.md
@@ -144,7 +144,7 @@ Then in our controller, we add a new action which returns a the XML list of `Pla
### Customizing the RSS Feed template
The default template used for XML view is `framework/templates/RSSFeed.ss`. This template displays titles and links to
-the object. To customize the XML produced use `setTemplate`.
+the object. To customise the XML produced use `setTemplate`.
Say from that last example we want to include the Players Team in the XML feed we might create the following XML file.
diff --git a/docs/en/02_Developer_Guides/11_Integration/How_Tos/Import_CSV_through_a_Controller.md b/docs/en/02_Developer_Guides/11_Integration/How_Tos/Import_CSV_through_a_Controller.md
index 11aaff8a8..d7337db5a 100644
--- a/docs/en/02_Developer_Guides/11_Integration/How_Tos/Import_CSV_through_a_Controller.md
+++ b/docs/en/02_Developer_Guides/11_Integration/How_Tos/Import_CSV_through_a_Controller.md
@@ -2,7 +2,7 @@ title: Import CSV Data through a Controller
# Import CSV Data through a Controller
-You can have more customized logic and interface feedback through a custom controller. Let's create a simple upload
+You can have more customised logic and interface feedback through a custom controller. Let's create a simple upload
form (which is used for `MyDataObject` instances). You can access it through
`http://yoursite.com/MyController/?flush=all`.
diff --git a/docs/en/02_Developer_Guides/14_Files/02_Images.md b/docs/en/02_Developer_Guides/14_Files/02_Images.md
index d2055f452..724f3ad90 100644
--- a/docs/en/02_Developer_Guides/14_Files/02_Images.md
+++ b/docs/en/02_Developer_Guides/14_Files/02_Images.md
@@ -157,7 +157,11 @@ and whenever you upload or modify an Image through SilverStripe.
If you encounter problems with images not appearing, or have mysteriously
disappeared, you can try manually flushing the image cache.
- http://localhost/dev/tasks/FlushGeneratedImagesTask
+ http://localhost/dev/tasks/RegenerateCachedImagesTask
+
+
+This task was renamed to `RegenerateCachedImagesTask` (originally `FlushGeneratedImagesTask`) circa SilverStripe 3.2.
+
## API Documentation
[api:Image]
diff --git a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md
index 28eb60f57..1ed899546 100644
--- a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md
+++ b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/01_ModelAdmin.md
@@ -169,7 +169,7 @@ model class, where you can add or remove columns. To change the title, use [api:
The results list are retrieved from [api:SearchContext::getResults()], based on the parameters passed through the search
form. If no search parameters are given, the results will show every record. Results are a [api:DataList] instance, so
-can be customized by additional SQL filters, joins.
+can be customised by additional SQL filters, joins.
For example, we might want to exclude all products without prices in our sample `MyAdmin` implementation.
@@ -192,7 +192,7 @@ For example, we might want to exclude all products without prices in our sample
}
}
-You can also customize the search behavior directly on your `ModelAdmin` instance. For example, we might want to have a
+You can also customise the search behavior directly on your `ModelAdmin` instance. For example, we might want to have a
checkbox which limits search results to expensive products (over $100).
**mysite/code/MyAdmin.php**
@@ -300,7 +300,7 @@ with a more specific importer implementation, use the [api:ModelAdmin::$model_im
Export is available as a CSV format through a button at the end of a results list. You can also export search results.
This is handled through the [api:GridFieldExportButton] component.
-To customize the exported columns, create a new method called `getExportFields` in your `ModelAdmin`:
+To customise the exported columns, create a new method called `getExportFields` in your `ModelAdmin`:
:::php
-New actions will need associated controller handlers to work. You can use a
-`LeftAndMainExtension` to provide one. Refer to [Controller documentation](../../controllers)
-for instructions on setting up handlers.
-
To make the actions more user-friendly you can also use alternating buttons as
detailed in the [CMS Alternating Button](cms_alternating_button)
how-to.
+### Implementing handlers
+
+Your newly created buttons need handlers to bind to before they will do anything.
+To implement these handlers, you will need to create a `LeftAndMainExtension` and add
+applicable controller actions to it:
+
+ :::php
+ class CustomActionsExtension extends LeftAndMainExtension {
+
+ private static $allowed_actions = array(
+ 'sampleAction'
+ );
+
+ public function sampleAction()
+ {
+ // Create the web
+ }
+
+ }
+
+The extension then needs to be registered:
+
+ :::yaml
+ LeftAndMain:
+ extensions:
+ - CustomActionsExtension
+
+You can now use these handlers with your buttons:
+
+ :::php
+ $fields->push(FormAction::create('sampleAction', 'Perform Sample Action'));
+
## Summary
-In a few lines of code, we've customized the look and feel of the CMS.
+In a few lines of code, we've customised the look and feel of the CMS.
While this example is only scratching the surface, it includes most building
blocks and concepts for more complex extensions as well.
diff --git a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/How_Tos/Extending_An_Existing_ModelAdmin.md b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/How_Tos/Extending_An_Existing_ModelAdmin.md
index d0b087821..dec2bed63 100644
--- a/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/How_Tos/Extending_An_Existing_ModelAdmin.md
+++ b/docs/en/02_Developer_Guides/15_Customising_the_Admin_Interface/How_Tos/Extending_An_Existing_ModelAdmin.md
@@ -1,6 +1,6 @@
## Extending existing ModelAdmin
-Sometimes you'll work with ModelAdmins from other modules. To customize these interfaces, you can always subclass. But there's
+Sometimes you'll work with ModelAdmins from other modules. To customise these interfaces, you can always subclass. But there's
also another tool at your disposal: The [api:Extension] API.
:::php
diff --git a/docs/en/04_Changelogs/2.3.0.md b/docs/en/04_Changelogs/2.3.0.md
index 3220e9320..7d70ed146 100644
--- a/docs/en/04_Changelogs/2.3.0.md
+++ b/docs/en/04_Changelogs/2.3.0.md
@@ -1154,7 +1154,7 @@ See http://open.silverstripe.com/changeset/69688
* ![rev:63652] Added Controller->render($params) as a shortcut for Controller->customise($params)->renderWith(array('MyTemplate','MySubTemplate')) - templates are auto-detected by Controller->getViewer() and Controller->getAction()
* ![rev:63651] Consistently allowing for $restrictFields and $fieldClasses parameters passed to DataObject->scaffoldFormFields(), DataObject->scaffoldSearchFields(), DataObject->scaffoldCMSFields()
* ![rev:63650] Added RequestHandlingTest->testNestedBase()
- * ![rev:63648] Added support for customize parameters to ViewableData->renderWith() to avoid unnecessary chaining ($this->customize($params)->renderWith($template))
+ * ![rev:63648] Added support for customise parameters to ViewableData->renderWith() to avoid unnecessary chaining ($this->customise($params)->renderWith($template))
* ![rev:63633] Better i18n for TableField and ComplexTableField
* ![rev:63632] Using DataObject->Title for has_one dropdowns generated in DataObject->scaffoldFormFields()
* ![rev:63630] Added DataObject->fieldLabel() and removed $fieldname parameter from DataObject->fieldLabels($fieldName) to simplify overloading of fieldLabels() for i18n
@@ -1788,7 +1788,7 @@ See http://open.silverstripe.com/changeset/69688
* ![rev:64863] Changed default # of rows on HTMLEditorField from 15 to 30
* ![rev:64862] Fixed TinyMCE stylihg
* ![rev:64839] Fixed CMS uploading
- * ![rev:64814] call $this->extend('updateFieldLabels', $labels) in FieldLabels() to get its decorator's customized field labels
+ * ![rev:64814] call $this->extend('updateFieldLabels', $labels) in FieldLabels() to get its decorator's customised field labels
* ![rev:64778] Removed scrubbing of the HTML
* ![rev:64768] #2957 - Fixed entity decoding in Convert::html2raw
* ![rev:64760] Fixed bug in tinymce_ssbuttons plugin inclusion
diff --git a/docs/en/04_Changelogs/2.4.1.md b/docs/en/04_Changelogs/2.4.1.md
index 4c359466f..32cc61a5f 100644
--- a/docs/en/04_Changelogs/2.4.1.md
+++ b/docs/en/04_Changelogs/2.4.1.md
@@ -206,7 +206,7 @@ existing pages when their title is changed.
* [rev:106200] added prefix and suffix support to !ContextSummary
* [rev:106194] Prevent image search queries all images in the site initially when the page is loaded
* [rev:106178] Enable switch between legacy image search and new version
- * [rev:106118] added setRows() and setColumns() to customize the size of the textarea field outside of the controller
+ * [rev:106118] added setRows() and setColumns() to customise the size of the textarea field outside of the controller
* [rev:105890] Added method for $this->request->latestParam() backwards compatibility with Director::urlParam()
* [rev:105732] Ability to hide form by className or for the whole !ModelAdmin
* [rev:105712] Added !MySQLDatabaseConfigurationHelper::getDatabaseVersion() which abstracts the version number away from the version check the installer requires
diff --git a/docs/en/04_Changelogs/2.4.2.md b/docs/en/04_Changelogs/2.4.2.md
index 40a2cfd77..bcee1e049 100644
--- a/docs/en/04_Changelogs/2.4.2.md
+++ b/docs/en/04_Changelogs/2.4.2.md
@@ -2,7 +2,7 @@
* Fixed a security issue where pages in draft mode might be visible to unauthenticated users
* Fixed a security issue where users with access to admin/security (but limited privileges) can take over a known administrator account by changing its password
- * Allow Apache webserver to customized error pages in HTML, rather than Apache default styling
+ * Allow Apache webserver to customised error pages in HTML, rather than Apache default styling
* Testing harness improvements: More verbose testing output, fixed coverage report generation
* Fixed installer logic for SQLite database drivers
* All unit tests pass on Windows OS/SQL Server
@@ -156,4 +156,4 @@
* [109163]
* [109163] This reverts commit 1e7781ba2b8ac30333a20d9a1b0bcb9b4ba5b0b0.
* [109099] Added dev/tests/emptydb to clear out test session databases.
- * [108417] Using htmlentities($keywords,ENT_NOQUOTES) instead of proposed solution
\ No newline at end of file
+ * [108417] Using htmlentities($keywords,ENT_NOQUOTES) instead of proposed solution
diff --git a/docs/en/04_Changelogs/3.0.0.md b/docs/en/04_Changelogs/3.0.0.md
index 6c3123ea0..2f97d2fc8 100644
--- a/docs/en/04_Changelogs/3.0.0.md
+++ b/docs/en/04_Changelogs/3.0.0.md
@@ -348,7 +348,7 @@ See the [template reference](/developer_guides/templates) for a list of method r
Most aspects of the interface have been redesigned, which necessitated a substantial
redevelopment of the underlying logic and presentation.
-If you have customized the admin interface in any way, please review
+If you have customised the admin interface in any way, please review
the detailed changelog for this release. Many interface components have changed completely,
unfortunately there is no clear upgrade path for every interface detail.
As a starting point, have a look at the new templates in `cms/templates`
diff --git a/docs/en/04_Changelogs/3.1.0.md b/docs/en/04_Changelogs/3.1.0.md
index d0225f488..7d161864b 100644
--- a/docs/en/04_Changelogs/3.1.0.md
+++ b/docs/en/04_Changelogs/3.1.0.md
@@ -421,7 +421,7 @@ you can enable those warnings and future-proof your code already.
have custom code relying on these two libraries, please update your code to include the files yourself
* Removed `SiteTree.MetaKeywords` since they are irrelevant in terms of SEO
([seomoz article](http://www.mattcutts.com/blog/keywords-meta-tag-in-web-search/)) and general page informancy
- * Removed `SiteTree.MetaTitle` as a means to customize the window title, use `SiteTree.Title` instead
+ * Removed `SiteTree.MetaTitle` as a means to customise the window title, use `SiteTree.Title` instead
* Deprecated `Profiler` class, use third-party solutions like [xhprof](https://github.com/facebook/xhprof/)
* Removed defunct or unnecessary debug GET parameters:
`debug_profile`, `debug_memory`, `profile_trace`, `debug_javascript`, `debug_behaviour`
diff --git a/docs/en/04_Changelogs/3.2.0.md b/docs/en/04_Changelogs/3.2.0.md
index 0ff12c46f..935fc6524 100644
--- a/docs/en/04_Changelogs/3.2.0.md
+++ b/docs/en/04_Changelogs/3.2.0.md
@@ -826,7 +826,7 @@ In order to remove the new "archive" action and restore the old "delete" action
* 2015-07-10 [560f9a6](https://github.com/silverstripe/silverstripe-framework/commit/560f9a6e39df4f09dfe4bed5978f6dcddc0bb299) respect custom attributes on OptionsetField and CheckboxSetField (Damian Mooyman)
* 2015-06-15 [f3e1472](https://github.com/silverstripe/silverstripe-cms/commit/f3e1472493b15758c67bb2c8814bc28765eac401) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman)
* 2015-06-15 [58cc3da](https://github.com/silverstripe/silverstripe-framework/commit/58cc3da8d8005d6a367d88fb7c5d41c96dd8946f) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman)
- * 2015-06-13 [e766658](https://github.com/silverstripe/silverstripe-framework/commit/e766658ee3b9e70988b79d99d75124857f2a7ccc) Allow HTTP Cache Headers to be customized (Jeremy Shipman)
+ * 2015-06-13 [e766658](https://github.com/silverstripe/silverstripe-framework/commit/e766658ee3b9e70988b79d99d75124857f2a7ccc) Allow HTTP Cache Headers to be customised (Jeremy Shipman)
* 2015-06-12 [8389260](https://github.com/silverstripe/silverstripe-framework/commit/838926085cac00ec65ee5aecb67e6102ea8b6f20) and renamed image functions (Jonathon Menz)
* 2015-06-09 [914d734](https://github.com/silverstripe/silverstripe-framework/commit/914d734df004947eb869de2abb6fb2fc463be574) Disable deprecation notices by default (Damian Mooyman)
* 2015-06-09 [a8ace75](https://github.com/silverstripe/silverstripe-framework/commit/a8ace7534194b5e1a636c96eca4607d08726dfeb) Support for multiple HTMLEditorConfig per page (Damian Mooyman)
diff --git a/docs/en/04_Changelogs/alpha/2.4.0-alpha1.md b/docs/en/04_Changelogs/alpha/2.4.0-alpha1.md
index 83d173ce9..1556cb4ef 100644
--- a/docs/en/04_Changelogs/alpha/2.4.0-alpha1.md
+++ b/docs/en/04_Changelogs/alpha/2.4.0-alpha1.md
@@ -43,7 +43,7 @@
* [rev:88474] Refactored ViewableData. The main changes are:
* [rev:88472] Added the Shortcode API (ShortcodeParser) to allow you to replace simple BBCode-like tags in a string with the results of a callback. From: Andrew Short
* [rev:88468] Added utility methods to enable and disable nested URLs to SiteTree. From: Andrew Short
- * [rev:88104] added extend() call to enable FieldHolder() html to be customized via extensions.
+ * [rev:88104] added extend() call to enable FieldHolder() html to be customised via extensions.
* [rev:85789] Added Widget_Controller class to enable nested forms within Wiget class.
@@ -382,4 +382,4 @@
* [rev:84981] Ensure that DataObject->ClassName is set on object instantiation
* [rev:84970] Made timing code for test runner more accurate (includes initial db build):
* [rev:84814] ENHANCMENT: get svn merged revision 84806:84808 from branches/iss
- * [rev:84163] ENHANCMENT: Low-level performance improvements in database access.
\ No newline at end of file
+ * [rev:84163] ENHANCMENT: Low-level performance improvements in database access.
diff --git a/docs/en/04_Changelogs/alpha/3.0.0-alpha1.md b/docs/en/04_Changelogs/alpha/3.0.0-alpha1.md
index 5994ae8d2..d2637d9d9 100644
--- a/docs/en/04_Changelogs/alpha/3.0.0-alpha1.md
+++ b/docs/en/04_Changelogs/alpha/3.0.0-alpha1.md
@@ -222,7 +222,7 @@ See [3.0.0 upgrading guide](../3.0.0) for further details.
* 2011-07-05 [a1b8698](https://github.com/silverstripe/sapphire/commit/a1b8698) Removed '.LeftAndMain' selector from rules in order to avoid DOM hierarchy confusion (.LeftAndMain contains .cms-content vs .LeftAndMain equals .cms-content) (Ingo Schommer)
* 2011-07-05 [19b9edb](https://github.com/silverstripe/sapphire/commit/19b9edb) Clearer CSS classes in CMS controller templates. Fixed JS loading of ModelAdmin panels. Added $BaseCSSClasses to content templates in order to support partial template loads through ajax (instead of relying on stale CSS classes on the <body> tag). Leaving $BaseCSSClasses in LeftAndMain.ss base template for legacy reasons. (Ingo Schommer)
* 2011-07-05 [38db63c](https://github.com/silverstripe/silverstripe-cms/commit/38db63c) Clearer CSS classes in CMS controller templates, added $BaseCSSClasses to content templates in order to support partial template loads through ajax (instead of relying on stale CSS classes on the <body> tag) (Ingo Schommer)
- * 2011-07-04 [1dc9457](https://github.com/silverstripe/sapphire/commit/1dc9457) Using LeftAndMain->BaseCSSClasses() instead of ViewableData->CSSClasses() to avoid conflicts with customized controller objects (e.g. ModelAdmin_RecordController->edit()) (Ingo Schommer)
+ * 2011-07-04 [1dc9457](https://github.com/silverstripe/sapphire/commit/1dc9457) Using LeftAndMain->BaseCSSClasses() instead of ViewableData->CSSClasses() to avoid conflicts with customised controller objects (e.g. ModelAdmin_RecordController->edit()) (Ingo Schommer)
* 2011-07-04 [c4a99df](https://github.com/silverstripe/silverstripe-cms/commit/c4a99df) Redirecting page links in CMSPagesController to CMSPageEditController (admin/pages/show/99 to admin/page/show/99) (Ingo Schommer)
* 2011-07-04 [2e9ea1d](https://github.com/silverstripe/sapphire/commit/2e9ea1d) Disable ping until jQuery.entwine _super() confusion is resolved (Ingo Schommer)
* 2011-06-25 [ebb1e0f](https://github.com/silverstripe/silverstripe-cms/commit/ebb1e0f) Additional HTML for tree styling in SiteTree->getTreeTitle() (Ed)
@@ -281,4 +281,4 @@ See [3.0.0 upgrading guide](../3.0.0) for further details.
* 2011-06-23 [bb09555](https://github.com/silverstripe/sapphire/commit/bb09555) Forgot to remove this line in my last commit. (Colby Klein)
* 2011-06-23 [1460789](https://github.com/silverstripe/sapphire/commit/1460789) Fix tabindex being present on read only form fields instead of regular ones. (Colby Klein)
* 2011-06-08 [047d256](https://github.com/silverstripe/sapphire/commit/047d256) Updated return types for createTag and describe in documentation (Marijn Kampf)
- * 2011-03-18 [cae7791](https://github.com/silverstripe/sapphire/commit/cae7791) Allowing success and error callbacks in refresh() (Ingo Schommer)
\ No newline at end of file
+ * 2011-03-18 [cae7791](https://github.com/silverstripe/sapphire/commit/cae7791) Allowing success and error callbacks in refresh() (Ingo Schommer)
diff --git a/docs/en/04_Changelogs/beta/2.4.0-beta2.md b/docs/en/04_Changelogs/beta/2.4.0-beta2.md
index 5a1af5f8d..c39138d41 100644
--- a/docs/en/04_Changelogs/beta/2.4.0-beta2.md
+++ b/docs/en/04_Changelogs/beta/2.4.0-beta2.md
@@ -488,7 +488,7 @@
* [rev:99112] migrated headers in SiteConfig to i18n'd (from r86429)
* [rev:99111] Localized File->uploadMetadataFields()
* [rev:99110] Documentation
- * [rev:99099] ability to customize the text that comes out of Member->Title
+ * [rev:99099] ability to customise the text that comes out of Member->Title
* [rev:99099] updated workflow reports (from r96352)
* [rev:99098] Added Requirements for SilverStripeNavigator (see r99080)
* [rev:99097] Added Requirements for SilverStripeNavigator (see r99080)
@@ -552,4 +552,4 @@
* [rev:99848] This reverts commit a0d2f7b3e289d12dedcdbd02ae52eec3e6718340.
* [rev:99732] BUFGFIX: Prevent selection of self as parent (see #5106)
* [rev:99084] Add missing JS file (from r97410)
- * [rev:98873] REVERT: reverse merging the change, it breaks some tests.
\ No newline at end of file
+ * [rev:98873] REVERT: reverse merging the change, it breaks some tests.
diff --git a/docs/en/04_Changelogs/beta/3.2.0-beta1.md b/docs/en/04_Changelogs/beta/3.2.0-beta1.md
index 9e6333434..8e10ebd4d 100644
--- a/docs/en/04_Changelogs/beta/3.2.0-beta1.md
+++ b/docs/en/04_Changelogs/beta/3.2.0-beta1.md
@@ -789,7 +789,7 @@ In order to remove the new "archive" action and restore the old "delete" action
* 2015-06-16 [f3e1472](https://github.com/silverstripe/silverstripe-cms/commit/f3e1472) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman)
* 2015-06-16 [58cc3da](https://github.com/silverstripe/sapphire/commit/58cc3da) Revert DataObject::validate to 3.1 method signature (protected) (Damian Mooyman)
- * 2015-06-13 [e766658](https://github.com/silverstripe/sapphire/commit/e766658) Allow HTTP Cache Headers to be customized (Jeremy Shipman)
+ * 2015-06-13 [e766658](https://github.com/silverstripe/sapphire/commit/e766658) Allow HTTP Cache Headers to be customised (Jeremy Shipman)
* 2015-06-12 [8389260](https://github.com/silverstripe/sapphire/commit/8389260) New and renamed image functions (Jonathon Menz)
* 2015-06-09 [a8ace75](https://github.com/silverstripe/sapphire/commit/a8ace75) Support for multiple HTMLEditorConfig per page (Damian Mooyman)
* 2015-05-15 [b169823](https://github.com/silverstripe/silverstripe-cms/commit/b169823) Deprecate delete in favour of archive Remove "delete from live" duplicate action in favour of existing "unpublish" which is more consistent with current terminology Add pop-up verification to destructive actions Fix bug preventing side-by-side preview of archived pages Fix bug in reporting publishing of error pages Restoring a page without an available parent will restore to root (Damian Mooyman)
diff --git a/docs/en/04_Changelogs/pr/3.0.0-pr1.md b/docs/en/04_Changelogs/pr/3.0.0-pr1.md
index 194a55cf9..07d3b82d1 100644
--- a/docs/en/04_Changelogs/pr/3.0.0-pr1.md
+++ b/docs/en/04_Changelogs/pr/3.0.0-pr1.md
@@ -297,7 +297,7 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2009-11-21 [5f8a164](https://github.com/silverstripe/silverstripe-cms/commit/5f8a164) Defaulting to action_save button in ajaxSubmit() javascript logic in CMS form ENHANCEMENT Making ajax options overrideable in ajaxSubmit() javascript logic in CMS form (Ingo Schommer)
* 2009-11-21 [b6dc2de](https://github.com/silverstripe/silverstripe-cms/commit/b6dc2de) Added initial implementation of jquery-changetracker as a replacement for the existing ChangeTracker behaviour/prototype javascript class (Ingo Schommer)
* 2009-11-21 [bc2cad4](https://github.com/silverstripe/silverstripe-cms/commit/bc2cad4) Floating tinymce toolbar icons in CMS to allow for smaller widths without having tinymce hide the tabset scrollbars (Ingo Schommer)
- * 2009-11-21 [c2d24f9](https://github.com/silverstripe/silverstripe-cms/commit/c2d24f9) Changed CMSMain and LeftAndMain form submissions to return raw HTML instead of using FormResponse logic and evaluated javascript. This allows a more customizeable UI layer that is decoupled from the serverside logic. Any state changes should be propagated through the form itself. ENHANCEMENT Using new 'X-STATUS' HTTP response header for CMS form responses, as it is more robust for submitting variable length strings than the original 'Status' header. The status is evaluated in LeftAndMain.EditForm.js API CHANGE Removed CMSMain->tellBrowserAboutPublicationChange(), LeftAndMain->returnItemToUser(), LeftAndMain->getActionUpdateJS(), LeftAndMain->addTreeNodeJS(), LeftAndMain->deleteTreeNodeJS(). Use javascript to respond to state changes API CHANGE Removed CMSForm and CMSRightForm javascript classes, superseded by LeftAndMain.EditForm.js ENHANCEMENT Removed custom change detection in LeftAndMain->save(), this should be handled by DataObject->write() ENHANCEMENT Removed switch in LeftAndMain->save() which doesnt process saving if the record hasn't been altered, to simplify the saving logic ENHANCEMENT Removed custom add/remove tree node logic in LeftAndMain->save() which was retrieving state from DataObjectLog. This was never actively used, and should be handled by custom clientside logic. (Ingo Schommer)
+ * 2009-11-21 [c2d24f9](https://github.com/silverstripe/silverstripe-cms/commit/c2d24f9) Changed CMSMain and LeftAndMain form submissions to return raw HTML instead of using FormResponse logic and evaluated javascript. This allows a more customiseable UI layer that is decoupled from the serverside logic. Any state changes should be propagated through the form itself. ENHANCEMENT Using new 'X-STATUS' HTTP response header for CMS form responses, as it is more robust for submitting variable length strings than the original 'Status' header. The status is evaluated in LeftAndMain.EditForm.js API CHANGE Removed CMSMain->tellBrowserAboutPublicationChange(), LeftAndMain->returnItemToUser(), LeftAndMain->getActionUpdateJS(), LeftAndMain->addTreeNodeJS(), LeftAndMain->deleteTreeNodeJS(). Use javascript to respond to state changes API CHANGE Removed CMSForm and CMSRightForm javascript classes, superseded by LeftAndMain.EditForm.js ENHANCEMENT Removed custom change detection in LeftAndMain->save(), this should be handled by DataObject->write() ENHANCEMENT Removed switch in LeftAndMain->save() which doesnt process saving if the record hasn't been altered, to simplify the saving logic ENHANCEMENT Removed custom add/remove tree node logic in LeftAndMain->save() which was retrieving state from DataObjectLog. This was never actively used, and should be handled by custom clientside logic. (Ingo Schommer)
* 2009-11-21 [41c1c49](https://github.com/silverstripe/silverstripe-cms/commit/41c1c49) Better response handling in LeftAndMain.EditForm BUGFIX Fixed event cancellation in LeftAndMain.EditForm javascript buttons (Ingo Schommer)
* 2009-11-21 [87a6e33](https://github.com/silverstripe/silverstripe-cms/commit/87a6e33) Disabling validator in CMSMain->getCMSFields() unless its explicitly set through SiteTree->getCMSValidator(). We don't fully support validation in the CMS (yet), and it causes unnecessary bloat in the document body for now. (Ingo Schommer)
* 2009-11-21 [021c8d4](https://github.com/silverstripe/silverstripe-cms/commit/021c8d4) Initialize the east layout panel in CMSMain.js as hidden, so users can't toggle it without going through tinyMCE buttons (Ingo Schommer)
@@ -320,7 +320,7 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2009-11-21 [d95f867](https://github.com/silverstripe/sapphire/commit/d95f867) Triggering jQuery events in TreeSelectorField.js in preparation to switching the tree logic to jQuery. This prevents developers from using the soon-to-be-deprecated Observable prototype (Ingo Schommer)
* 2009-11-21 [28109df](https://github.com/silverstripe/sapphire/commit/28109df) Removed UniqueField.js dependency to CMS-related statusMessage() javascript class, and using jQuery even triggers instead (Ingo Schommer)
* 2009-11-21 [0b25cb9](https://github.com/silverstripe/sapphire/commit/0b25cb9) Removed UpdateURL.js, moved logic to CMSMain.js ENHANCEMENT Using plain TextField for URLSegment in SiteTree->getCMSFields(), and using custom logic in CMSMain.js. The field didn't have any serverside validation anyway, and the remaining parts are quite custom (Ingo Schommer)
- * 2009-11-21 [f60e94b](https://github.com/silverstripe/sapphire/commit/f60e94b) Using native jQuery.getScript() in customized jQuery.ondemand plugin. Moved processDemandHeaders() into jQuery namespace, and adjusted customized prototype.js library (Ingo Schommer)
+ * 2009-11-21 [f60e94b](https://github.com/silverstripe/sapphire/commit/f60e94b) Using native jQuery.getScript() in customised jQuery.ondemand plugin. Moved processDemandHeaders() into jQuery namespace, and adjusted customised prototype.js library (Ingo Schommer)
* 2009-11-21 [0abe472](https://github.com/silverstripe/sapphire/commit/0abe472) Added SiteTree->getStageURLSegment() and SiteTree->getLiveURLSegment() to allow auto-population in the CMS edit form. This information is necessary to keep clientside UI state consistent. (Ingo Schommer)
* 2009-11-21 [9ecd359](https://github.com/silverstripe/sapphire/commit/9ecd359) Setting proper text/javascript content-type in FormResponse so clientside ajax-handling knows how to deal with it. (Ingo Schommer)
* 2009-11-21 [beb4efe](https://github.com/silverstripe/sapphire/commit/beb4efe) Disabling form validation for right-panel forms in CMS in HtmlEditorField. None of the fields have validation attached to them at the moment, so the generic validation output is unnecessary bloat. (Ingo Schommer)
@@ -1238,7 +1238,7 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2010-04-14 [4703aa6](https://github.com/silverstripe/sapphire/commit/4703aa6) Fixed SapphireTest->logInWithPermission() spelling (from r99491) (Ingo Schommer)
* 2010-04-14 [76d57b6](https://github.com/silverstripe/sapphire/commit/76d57b6) Temporarily disabled nested url specific cases inTranslatableTest->testAlternateGetByLink(), unclear functionality requirements (from r99350) (Ingo Schommer)
* 2010-04-14 [e99d56d](https://github.com/silverstripe/sapphire/commit/e99d56d) Localized File->uploadMetadataFields() (from r99111) (Ingo Schommer)
- * 2010-04-14 [ae7439a](https://github.com/silverstripe/sapphire/commit/ae7439a) ability to customize the text that comes out of Member->Title MINOR updated workflow reports (from r96352) (from r99099) (Ingo Schommer)
+ * 2010-04-14 [ae7439a](https://github.com/silverstripe/sapphire/commit/ae7439a) ability to customise the text that comes out of Member->Title MINOR updated workflow reports (from r96352) (from r99099) (Ingo Schommer)
* 2010-04-14 [3dc4486](https://github.com/silverstripe/sapphire/commit/3dc4486) Added Requirements for SilverStripeNavigator (see r99080) (from r99097) (Ingo Schommer)
* 2010-04-14 [ec983ae](https://github.com/silverstripe/sapphire/commit/ec983ae) make static caching smarter around cacheSubdirs (from r99076) (Ingo Schommer)
* 2010-04-14 [7c057cb](https://github.com/silverstripe/sapphire/commit/7c057cb) adjustments to ensure that the cached permissions were actually hit (from r98835) (from r99068) (Ingo Schommer)
@@ -1398,7 +1398,7 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2009-11-21 [e3a51fe](https://github.com/silverstripe/silverstripe-cms/commit/e3a51fe) Bugfixes for SWFUpload (Ingo Schommer)
* 2009-11-21 [394e0c0](https://github.com/silverstripe/silverstripe-cms/commit/394e0c0) Removed cms/thirdparty/swfupload, moved to sapphire/thirdparty (Ingo Schommer)
* 2009-11-21 [683dfa9](https://github.com/silverstripe/silverstripe-cms/commit/683dfa9) Styling of side reports and tree area in CMS (Ingo Schommer)
- * 2009-11-21 [1bc268e](https://github.com/silverstripe/silverstripe-cms/commit/1bc268e) Only fetching EditForm in LeftAndMain->show() if called by ajax, the customize() call for non-ajax views confuses the renderer otherwise (Ingo Schommer)
+ * 2009-11-21 [1bc268e](https://github.com/silverstripe/silverstripe-cms/commit/1bc268e) Only fetching EditForm in LeftAndMain->show() if called by ajax, the customise() call for non-ajax views confuses the renderer otherwise (Ingo Schommer)
* 2009-11-21 [32d6342](https://github.com/silverstripe/silverstripe-cms/commit/32d6342) Fixed merge errors (Ingo Schommer)
* 2009-11-21 [8f92ee3](https://github.com/silverstripe/silverstripe-cms/commit/8f92ee3) Fixed Requirements paths in LeftAndMain.php (Ingo Schommer)
* 2009-11-21 [c189230](https://github.com/silverstripe/silverstripe-cms/commit/c189230) Fixed merge error (Ingo Schommer)
@@ -1561,8 +1561,8 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2009-11-21 [9889ba5](https://github.com/silverstripe/sapphire/commit/9889ba5) Moved Function.prototype.create from tree.js into behaviour.js (Ingo Schommer)
* 2009-11-21 [146979b](https://github.com/silverstripe/sapphire/commit/146979b) Documentation and code formatting for jquery.ondemand.js (Ingo Schommer)
* 2009-11-21 [073ebbe](https://github.com/silverstripe/sapphire/commit/073ebbe) Moved sapphire/javascript/core to sapphire/javascript/jquery-ondemand to fit with patterns in sapphire/thirdparty (Ingo Schommer)
- * 2009-11-21 [fd1cb12](https://github.com/silverstripe/sapphire/commit/fd1cb12) Removed unused sapphire/thirdparty/jquery.ondemand.js library, we use a heavily customized version in sapphire/javascript/jquery-ondemand instead (Ingo Schommer)
- * 2009-11-21 [5d6233a](https://github.com/silverstripe/sapphire/commit/5d6233a) Indentation in customized jquery.ondemand.js (Ingo Schommer)
+ * 2009-11-21 [fd1cb12](https://github.com/silverstripe/sapphire/commit/fd1cb12) Removed unused sapphire/thirdparty/jquery.ondemand.js library, we use a heavily customised version in sapphire/javascript/jquery-ondemand instead (Ingo Schommer)
+ * 2009-11-21 [5d6233a](https://github.com/silverstripe/sapphire/commit/5d6233a) Indentation in customised jquery.ondemand.js (Ingo Schommer)
* 2009-11-21 [1b138d6](https://github.com/silverstripe/sapphire/commit/1b138d6) Removed layout_helpers.js dependency (Ingo Schommer)
* 2009-11-21 [df1766b](https://github.com/silverstripe/sapphire/commit/df1766b) Removed unused css/CalendarDateField.css (Ingo Schommer)
* 2009-11-21 [2fc966c](https://github.com/silverstripe/sapphire/commit/2fc966c) Removed loader.js dependencies (Ingo Schommer)
@@ -1676,4 +1676,4 @@ See [3.0.0 upgrading guide](../3.0.0)
* 2009-11-19 [19c7e11](https://github.com/silverstripe/silverstripe-installer/commit/19c7e11) added mysite theme (from r71148) (ischommer)
* 2009-11-19 [e361bea](https://github.com/silverstripe/silverstripe-installer/commit/e361bea) removed tutorial files (from r71147) (ischommer)
* 2009-11-19 [3c07e8b](https://github.com/silverstripe/silverstripe-installer/commit/3c07e8b) ... (from r71146) (ischommer)
- * 2009-11-19 [5bb0d9b](https://github.com/silverstripe/silverstripe-installer/commit/5bb0d9b) Removed DirectorySlash update from installer's default htaccess as it breaks some installation targets (from r67085) (ischommer)
\ No newline at end of file
+ * 2009-11-19 [5bb0d9b](https://github.com/silverstripe/silverstripe-installer/commit/5bb0d9b) Removed DirectorySlash update from installer's default htaccess as it breaks some installation targets (from r67085) (ischommer)
diff --git a/docs/en/04_Changelogs/rc/2.4.1-rc1.md b/docs/en/04_Changelogs/rc/2.4.1-rc1.md
index 639b1883c..1462bbe85 100644
--- a/docs/en/04_Changelogs/rc/2.4.1-rc1.md
+++ b/docs/en/04_Changelogs/rc/2.4.1-rc1.md
@@ -47,7 +47,7 @@
* [rev:106200] added prefix and suffix support to ContextSummary
* [rev:106194] Prevent image search queries all images in the site initially when the page is loaded
* [rev:106178] Enable switch between legacy image search and new version
- * [rev:106118] added setRows() and setColumns() to customize the size of the textarea field outside of the controller
+ * [rev:106118] added setRows() and setColumns() to customise the size of the textarea field outside of the controller
* [rev:105890] Added method for $this->request->latestParam() backwards compatibility with Director::urlParam()
* [rev:105732] Ability to hide form by className or for the whole ModelAdmin
* [rev:105712] Added MySQLDatabaseConfigurationHelper::getDatabaseVersion() which abstracts the version number away from the version check the installer requires
@@ -325,4 +325,4 @@
* [rev:104667] Added explicit bash handler to sake
* [rev:104442] Multi-use redemption page created
-`./sscreatechangelog --version 2.4.1-rc1 --branch branches/2.4 --stopbranch tags/2.4.0`
\ No newline at end of file
+`./sscreatechangelog --version 2.4.1-rc1 --branch branches/2.4 --stopbranch tags/2.4.0`
diff --git a/filesystem/File.php b/filesystem/File.php
index 571aa0699..6b66319ac 100644
--- a/filesystem/File.php
+++ b/filesystem/File.php
@@ -752,7 +752,9 @@ class File extends DataObject {
if($this->ParentID) {
// Don't use the cache, the parent has just been changed
$p = DataObject::get_by_id('Folder', $this->ParentID, false);
- if($p && $p->exists()) return $p->getRelativePath() . $this->getField("Name");
+ if($p && $p->isInDB()) {
+ return $p->getRelativePath() . $this->getField("Name");
+ }
else return ASSETS_DIR . "/" . $this->getField("Name");
} else if($this->getField("Name")) {
return ASSETS_DIR . "/" . $this->getField("Name");
diff --git a/filesystem/Folder.php b/filesystem/Folder.php
index 08610eeca..64b59bc5a 100644
--- a/filesystem/Folder.php
+++ b/filesystem/Folder.php
@@ -165,6 +165,7 @@ class Folder extends File {
// Check allowed extensions, unless admin users are allowed to bypass these exclusions
if($checkExtensions
+ && !is_dir($baseDir . $actualChild)
&& ($extension = self::get_file_extension($actualChild))
&& !in_array(strtolower($extension), $allowedExtensions)
) {
diff --git a/forms/gridfield/GridField.php b/forms/gridfield/GridField.php
index 653108926..27ed34010 100644
--- a/forms/gridfield/GridField.php
+++ b/forms/gridfield/GridField.php
@@ -501,11 +501,14 @@ class GridField extends FormField {
$header . "\n" . $footer . "\n" . $body
);
- return DBField::create_field('HTMLText', FormField::create_tag(
+ $field = DBField::create_field('HTMLText', FormField::create_tag(
'fieldset',
$fieldsetAttributes,
$content['before'] . $table . $content['after']
));
+ $field->setOptions(array('shortcodes' => false));
+
+ return $field;
}
/**
diff --git a/main.php b/main.php
index 0883be1d4..3c62c9514 100644
--- a/main.php
+++ b/main.php
@@ -94,6 +94,7 @@ if (isset($_GET['url']) && php_sapi_name() !== 'cli-server') {
// Lighttpd and PHP 5.4's built-in webserver use this
} else {
+ // Get raw URL -- still needs to be decoded below (after parsing out query string).
$url = $_SERVER['REQUEST_URI'];
// Querystring args need to be explicitly parsed
@@ -102,6 +103,9 @@ if (isset($_GET['url']) && php_sapi_name() !== 'cli-server') {
$parseQuery($query);
}
+ // Decode URL now that it has been separated from query string.
+ $url = urldecode($url);
+
// Pass back to the webserver for files that exist
if(php_sapi_name() === 'cli-server' && file_exists(BASE_PATH . $url) && is_file(BASE_PATH . $url)) {
return false;
diff --git a/model/Image.php b/model/Image.php
index 651fcbf9e..1003e4f87 100644
--- a/model/Image.php
+++ b/model/Image.php
@@ -1044,7 +1044,9 @@ class Image extends File implements Flushable {
}
protected function onBeforeDelete() {
- $backend = Injector::inst()->create(self::get_backend());
+ $backend = Injector::inst()->createWithArgs(self::config()->backend, array(
+ Director::baseFolder()."/" . $this->Filename
+ ));
$backend->onBeforeDelete($this);
$this->deleteFormattedImages();
diff --git a/model/Versioned.php b/model/Versioned.php
index 1b2a686dd..d342896ed 100644
--- a/model/Versioned.php
+++ b/model/Versioned.php
@@ -818,9 +818,14 @@ class Versioned extends DataExtension implements TemplateGlobalProvider {
return true;
}
+ // If there are less than 2 stages, we can exit early since comparing stages is not needed
+ if(count($this->stages) < 2){
+ return true;
+ }
+
// If we weren't definitely loaded from live, and we can't view non-live content, we need to
- // check to make sure this version is the live version and so can be viewed
- $latestVersion = Versioned::get_versionnumber_by_stage($this->owner->class, 'Live', $this->owner->ID);
+ // check to make sure this version is the live version and so can be viewed.
+ $latestVersion = Versioned::get_versionnumber_by_stage($this->owner->class, $this->liveStage, $this->owner->ID);
if ($latestVersion == $this->owner->Version) {
// Even if this is loaded from a non-live stage, this is the live version
return true;
diff --git a/model/connect/DBSchemaManager.php b/model/connect/DBSchemaManager.php
index 6b1fffd1f..ec75b5207 100644
--- a/model/connect/DBSchemaManager.php
+++ b/model/connect/DBSchemaManager.php
@@ -310,15 +310,14 @@ abstract class DBSchemaManager {
// Check if options changed
$tableOptionsChanged = false;
- if (isset($options[get_class($this)]) || true) {
- if (isset($options[get_class($this)])) {
- if (preg_match('/ENGINE=([^\s]*)/', $options[get_class($this)], $alteredEngineMatches)) {
- $alteredEngine = $alteredEngineMatches[1];
- $tableStatus = $this->query(sprintf(
- 'SHOW TABLE STATUS LIKE \'%s\'', $table
- ))->first();
- $tableOptionsChanged = ($tableStatus['Engine'] != $alteredEngine);
- }
+ // Check for DB constant on the schema class
+ $dbIDName = sprintf('%s::ID', get_class($this));
+ $dbID = defined($dbIDName) ? constant($dbIDName) : null;
+ if ($dbID && isset($options[$dbID])) {
+ if (preg_match('/ENGINE=([^\s]*)/', $options[$dbID], $alteredEngineMatches)) {
+ $alteredEngine = $alteredEngineMatches[1];
+ $tableStatus = $this->query(sprintf('SHOW TABLE STATUS LIKE \'%s\'', $table))->first();
+ $tableOptionsChanged = ($tableStatus['Engine'] != $alteredEngine);
}
}
diff --git a/model/connect/MySQLSchemaManager.php b/model/connect/MySQLSchemaManager.php
index 7487f4db7..8acae7a58 100644
--- a/model/connect/MySQLSchemaManager.php
+++ b/model/connect/MySQLSchemaManager.php
@@ -84,7 +84,8 @@ class MySQLSchemaManager extends DBSchemaManager {
}
}
- if ($alteredOptions && isset($alteredOptions[get_class($this)])) {
+ $dbID = self::ID;
+ if ($alteredOptions && isset($alteredOptions[$dbID])) {
$indexList = $this->indexList($tableName);
$skip = false;
foreach ($indexList as $index) {
@@ -98,14 +99,14 @@ class MySQLSchemaManager extends DBSchemaManager {
sprintf(
"Table %s options not changed to %s due to fulltextsearch index",
$tableName,
- $alteredOptions[get_class($this)]
+ $alteredOptions[$dbID]
),
"changed"
);
} else {
- $this->query(sprintf("ALTER TABLE \"%s\" %s", $tableName, $alteredOptions[get_class($this)]));
+ $this->query(sprintf("ALTER TABLE \"%s\" %s", $tableName, $alteredOptions[$dbID]));
$this->alterationMessage(
- sprintf("Table %s options changed: %s", $tableName, $alteredOptions[get_class($this)]),
+ sprintf("Table %s options changed: %s", $tableName, $alteredOptions[$dbID]),
"changed"
);
}
diff --git a/model/queries/SQLSelect.php b/model/queries/SQLSelect.php
index ee388d4f4..24bd51016 100644
--- a/model/queries/SQLSelect.php
+++ b/model/queries/SQLSelect.php
@@ -568,14 +568,12 @@ class SQLSelect extends SQLConditionalExpression {
/**
- * Return the number of rows in this query if the limit were removed. Useful in paged data sets.
- *
- * @todo Respect HAVING and GROUPBY, which can affect the result-count
+ * Return the number of rows in this query, respecting limit and offset.
*
* @param string $column Quoted, escaped column name
* @return int
*/
- public function count( $column = null) {
+ public function count($column = null) {
// we can't clear the select if we're relying on its output by a HAVING clause
if(!empty($this->having)) {
$records = $this->execute();
diff --git a/tests/control/HTTPRequestTest.php b/tests/control/HTTPRequestTest.php
index 3016f0c8b..d4ff9c8f6 100644
--- a/tests/control/HTTPRequestTest.php
+++ b/tests/control/HTTPRequestTest.php
@@ -254,4 +254,23 @@ class HTTPRequestTest extends SapphireTest {
$this->assertEquals('home?test=1', $req->getURL(true));
$this->assertEquals('home', $req->getURL());
}
+
+ public function testGetIPFromHeaderValue() {
+ $req = new SS_HTTPRequest('GET', '/');
+ $reflectionMethod = new ReflectionMethod($req, 'getIPFromHeaderValue');
+ $reflectionMethod->setAccessible(true);
+
+ $headers = array(
+ '80.79.208.21, 149.126.76.1, 10.51.0.68' => '80.79.208.21',
+ '52.19.19.103, 10.51.0.49' => '52.19.19.103',
+ '10.51.0.49, 52.19.19.103' => '52.19.19.103',
+ '10.51.0.49' => '10.51.0.49',
+ '127.0.0.1, 10.51.0.49' => '127.0.0.1',
+ );
+
+ foreach ($headers as $header => $ip) {
+ $this->assertEquals($ip, $reflectionMethod->invoke($req, $header));
+ }
+
+ }
}
diff --git a/tests/core/startup/ErrorControlChainTest.php b/tests/core/startup/ErrorControlChainTest.php
index b5d9031fc..a6c2c2496 100644
--- a/tests/core/startup/ErrorControlChainTest.php
+++ b/tests/core/startup/ErrorControlChainTest.php
@@ -63,7 +63,11 @@ require_once '$classpath';
class ErrorControlChainTest extends SapphireTest {
+ protected $displayErrors = null;
+
function setUp() {
+ $this->displayErrors = (bool)ini_get('display_errors');
+
// Check we can run PHP at all
$null = is_writeable('/dev/null') ? '/dev/null' : 'NUL';
exec("php -v 2> $null", $out, $rv);
@@ -76,8 +80,48 @@ class ErrorControlChainTest extends SapphireTest {
parent::setUp();
}
+ public function tearDown() {
+ if($this->displayErrors !== null) {
+ ini_set('display_errors', $this->displayErrors);
+ $this->displayErrors = null;
+ }
+ parent::tearDown(); // TODO: Change the autogenerated stub
+ }
+
function testErrorSuppression() {
+ // Errors disabled by default
+ ini_set('display_errors', false);
+ $chain = new ErrorControlChain();
+ $whenNotSuppressed = null;
+ $whenSuppressed = null;
+ $chain->then(function($chain) use(&$whenNotSuppressed, &$whenSuppressed) {
+ $chain->setSuppression(true);
+ $whenSuppressed = ini_get('display_errors');
+ $chain->setSuppression(false);
+ $whenNotSuppressed = ini_get('display_errors');
+ })->execute();
+
+ // Disabled errors never un-disable
+ $this->assertFalse((bool)$whenNotSuppressed);
+ $this->assertFalse((bool)$whenSuppressed);
+
+ // Errors enabled by default
+ ini_set('display_errors', true);
+ $chain = new ErrorControlChain();
+ $whenNotSuppressed = null;
+ $whenSuppressed = null;
+ $chain->then(function($chain) use(&$whenNotSuppressed, &$whenSuppressed) {
+ $chain->setSuppression(true);
+ $whenSuppressed = ini_get('display_errors');
+ $chain->setSuppression(false);
+ $whenNotSuppressed = ini_get('display_errors');
+ })->execute();
+
+ // Errors can be suppressed an un-suppressed when initially enabled
+ $this->assertTrue((bool)$whenNotSuppressed);
+ $this->assertFalse((bool)$whenSuppressed);
+
// Fatal error
$chain = new ErrorControlChainTest_Chain();
diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php
index 43ff72eb1..1d25a4c52 100644
--- a/tests/model/VersionedTest.php
+++ b/tests/model/VersionedTest.php
@@ -812,6 +812,7 @@ class VersionedTest extends SapphireTest {
$public1ID = $this->idFromFixture('VersionedTest_PublicStage', 'public1');
$public2ID = $this->idFromFixture('VersionedTest_PublicViaExtension', 'public2');
$privateID = $this->idFromFixture('VersionedTest_DataObject', 'page1');
+ $singleID = $this->idFromFixture('VersionedTest_SingleStage', 'single');
// Test that all (and only) public pages are viewable in stage mode
Session::clear("loggedInAs");
@@ -819,16 +820,21 @@ class VersionedTest extends SapphireTest {
$public1 = Versioned::get_one_by_stage('VersionedTest_PublicStage', 'Stage', array('"ID"' => $public1ID));
$public2 = Versioned::get_one_by_stage('VersionedTest_PublicViaExtension', 'Stage', array('"ID"' => $public2ID));
$private = Versioned::get_one_by_stage('VersionedTest_DataObject', 'Stage', array('"ID"' => $privateID));
+ // Also test an object that has just a single-stage (eg. is only versioned)
+ $single = Versioned::get_one_by_stage('VersionedTest_SingleStage', 'Stage', array('"ID"' => $singleID));
+
$this->assertTrue($public1->canView());
$this->assertTrue($public2->canView());
$this->assertFalse($private->canView());
+ $this->assertFalse($single->canView());
// Adjusting the current stage should not allow objects loaded in stage to be viewable
Versioned::reading_stage('Live');
$this->assertTrue($public1->canView());
$this->assertTrue($public2->canView());
$this->assertFalse($private->canView());
+ $this->assertFalse($single->canView());
// Writing the private page to live should be fine though
$private->publish("Stage", "Live");
@@ -854,6 +860,7 @@ class VersionedTest extends SapphireTest {
$this->assertTrue($public1->canView());
$this->assertTrue($public2->canView());
$this->assertTrue($private->canView());
+ $this->assertTrue($single->canView());
}
diff --git a/tests/model/VersionedTest.yml b/tests/model/VersionedTest.yml
index 2b3495c77..c4560044d 100644
--- a/tests/model/VersionedTest.yml
+++ b/tests/model/VersionedTest.yml
@@ -30,3 +30,7 @@ VersionedTest_AnotherSubclass:
subclass1:
Title: 'Subclass Page 1'
AnotherField: 'Bob'
+
+VersionedTest_SingleStage:
+ single:
+ Title: 'Singlestage Title'
diff --git a/tests/security/MemberTest.php b/tests/security/MemberTest.php
index 474dfd89a..de930f5d3 100644
--- a/tests/security/MemberTest.php
+++ b/tests/security/MemberTest.php
@@ -185,16 +185,42 @@ class MemberTest extends FunctionalTest {
* Test that changed passwords will send an email
*/
public function testChangedPasswordEmaling() {
+ Config::inst()->update('Member', 'notify_password_change', true);
+
$this->clearEmails();
$member = $this->objFromFixture('Member', 'test');
$this->assertNotNull($member);
$valid = $member->changePassword('32asDF##$$%%');
$this->assertTrue($valid->valid());
- /*
- $this->assertEmailSent("sam@silverstripe.com", null, "/changed password/",
- '/sam@silverstripe\.com.*32asDF##\$\$%%/');
- */
+
+ $this->assertEmailSent('testuser@example.com', null, 'Your password has been changed',
+ '/testuser@example\.com/');
+
+ }
+
+ /**
+ * Test that triggering "forgotPassword" sends an Email with a reset link
+ */
+ public function testForgotPasswordEmaling() {
+ $this->clearEmails();
+ $this->autoFollowRedirection = false;
+
+ $member = $this->objFromFixture('Member', 'test');
+ $this->assertNotNull($member);
+
+ // Initiate a password-reset
+ $response = $this->post('Security/LostPasswordForm', array('Email' => $member->Email));
+
+ $this->assertEquals($response->getStatusCode(), 302);
+
+ // We should get redirected to Security/passwordsent
+ $this->assertContains('Security/passwordsent/testuser@example.com',
+ urldecode($response->getHeader('Location')));
+
+ // Check existance of reset link
+ $this->assertEmailSent("testuser@example.com", null, 'Your password reset link',
+ '/Security\/changepassword\?m='.$member->ID.'&t=[^"]+/');
}
/**
diff --git a/tests/security/MemberTest.yml b/tests/security/MemberTest.yml
index 344325704..3e46bf785 100644
--- a/tests/security/MemberTest.yml
+++ b/tests/security/MemberTest.yml
@@ -42,7 +42,7 @@ Member:
test:
FirstName: Test
Surname: User
- Email: sam@silverstripe.com
+ Email: testuser@example.com
Password: 1nitialPassword
PasswordExpiry: 2030-01-01
Groups: =>Group.securityadminsgroup
diff --git a/tests/security/SecurityTest.php b/tests/security/SecurityTest.php
index e824cb6f3..45463d6fe 100644
--- a/tests/security/SecurityTest.php
+++ b/tests/security/SecurityTest.php
@@ -301,13 +301,13 @@ class SecurityTest extends FunctionalTest {
*/
public function testExpiredPassword() {
/* BAD PASSWORDS ARE LOCKED OUT */
- $badResponse = $this->doTestLoginForm('sam@silverstripe.com' , 'badpassword');
+ $badResponse = $this->doTestLoginForm('testuser@example.com' , 'badpassword');
$this->assertEquals(302, $badResponse->getStatusCode());
$this->assertRegExp('/Security\/login/', $badResponse->getHeader('Location'));
$this->assertNull($this->session()->inst_get('loggedInAs'));
/* UNEXPIRED PASSWORD GO THROUGH WITHOUT A HITCH */
- $goodResponse = $this->doTestLoginForm('sam@silverstripe.com' , '1nitialPassword');
+ $goodResponse = $this->doTestLoginForm('testuser@example.com' , '1nitialPassword');
$this->assertEquals(302, $goodResponse->getStatusCode());
$this->assertEquals(
Controller::join_links(Director::absoluteBaseURL(), 'test/link'),
@@ -336,7 +336,7 @@ class SecurityTest extends FunctionalTest {
}
public function testChangePasswordForLoggedInUsers() {
- $goodResponse = $this->doTestLoginForm('sam@silverstripe.com' , '1nitialPassword');
+ $goodResponse = $this->doTestLoginForm('testuser@example.com' , '1nitialPassword');
// Change the password
$this->get('Security/changepassword?BackURL=test/back');
@@ -349,7 +349,7 @@ class SecurityTest extends FunctionalTest {
$this->assertEquals($this->idFromFixture('Member', 'test'), $this->session()->inst_get('loggedInAs'));
// Check if we can login with the new password
- $goodResponse = $this->doTestLoginForm('sam@silverstripe.com' , 'changedPassword');
+ $goodResponse = $this->doTestLoginForm('testuser@example.com' , 'changedPassword');
$this->assertEquals(302, $goodResponse->getStatusCode());
$this->assertEquals(
Controller::join_links(Director::absoluteBaseURL(), 'test/link'),
@@ -368,9 +368,9 @@ class SecurityTest extends FunctionalTest {
// Request new password by email
$response = $this->get('Security/lostpassword');
- $response = $this->post('Security/LostPasswordForm', array('Email' => 'sam@silverstripe.com'));
+ $response = $this->post('Security/LostPasswordForm', array('Email' => 'testuser@example.com'));
- $this->assertEmailSent('sam@silverstripe.com');
+ $this->assertEmailSent('testuser@example.com');
// Load password link from email
$admin = DataObject::get_by_id('Member', $admin->ID);
@@ -390,7 +390,7 @@ class SecurityTest extends FunctionalTest {
$this->assertEquals($this->idFromFixture('Member', 'test'), $this->session()->inst_get('loggedInAs'));
// Check if we can login with the new password
- $goodResponse = $this->doTestLoginForm('sam@silverstripe.com' , 'changedPassword');
+ $goodResponse = $this->doTestLoginForm('testuser@example.com' , 'changedPassword');
$this->assertEquals(302, $goodResponse->getStatusCode());
$this->assertEquals($this->idFromFixture('Member', 'test'), $this->session()->inst_get('loggedInAs'));
@@ -408,7 +408,7 @@ class SecurityTest extends FunctionalTest {
// Login with a wrong password for more than the defined threshold
for($i = 1; $i <= Member::config()->lock_out_after_incorrect_logins+1; $i++) {
- $this->doTestLoginForm('sam@silverstripe.com' , 'incorrectpassword');
+ $this->doTestLoginForm('testuser@example.com' , 'incorrectpassword');
$member = DataObject::get_by_id("Member", $this->idFromFixture('Member', 'test'));
if($i < Member::config()->lock_out_after_incorrect_logins) {
@@ -438,7 +438,7 @@ class SecurityTest extends FunctionalTest {
}
}
- $this->doTestLoginForm('sam@silverstripe.com' , '1nitialPassword');
+ $this->doTestLoginForm('testuser@example.com' , '1nitialPassword');
$this->assertNull(
$this->session()->inst_get('loggedInAs'),
'The user can\'t log in after being locked out, even with the right password'
@@ -448,7 +448,7 @@ class SecurityTest extends FunctionalTest {
$member = DataObject::get_by_id("Member", $this->idFromFixture('Member', 'test'));
$member->LockedOutUntil = date('Y-m-d H:i:s', time() - 30);
$member->write();
- $this->doTestLoginForm('sam@silverstripe.com' , '1nitialPassword');
+ $this->doTestLoginForm('testuser@example.com' , '1nitialPassword');
$this->assertEquals(
$this->session()->inst_get('loggedInAs'),
$member->ID,
@@ -460,7 +460,7 @@ class SecurityTest extends FunctionalTest {
// Login again with wrong password, but less attempts than threshold
for($i = 1; $i < Member::config()->lock_out_after_incorrect_logins; $i++) {
- $this->doTestLoginForm('sam@silverstripe.com' , 'incorrectpassword');
+ $this->doTestLoginForm('testuser@example.com' , 'incorrectpassword');
}
$this->assertNull($this->session()->inst_get('loggedInAs'));
$this->assertContains(
@@ -469,7 +469,7 @@ class SecurityTest extends FunctionalTest {
'The user can retry with a wrong password after the lockout expires'
);
- $this->doTestLoginForm('sam@silverstripe.com' , '1nitialPassword');
+ $this->doTestLoginForm('testuser@example.com' , '1nitialPassword');
$this->assertEquals(
$this->session()->inst_get('loggedInAs'),
$member->ID,
@@ -484,8 +484,8 @@ class SecurityTest extends FunctionalTest {
// ATTEMPTING LOG-IN TWICE WITH ONE ACCOUNT AND TWICE WITH ANOTHER SHOULDN'T LOCK ANYBODY OUT
- $this->doTestLoginForm('sam@silverstripe.com' , 'incorrectpassword');
- $this->doTestLoginForm('sam@silverstripe.com' , 'incorrectpassword');
+ $this->doTestLoginForm('testuser@example.com' , 'incorrectpassword');
+ $this->doTestLoginForm('testuser@example.com' , 'incorrectpassword');
$this->doTestLoginForm('noexpiry@silverstripe.com' , 'incorrectpassword');
$this->doTestLoginForm('noexpiry@silverstripe.com' , 'incorrectpassword');
@@ -499,7 +499,7 @@ class SecurityTest extends FunctionalTest {
// BUT, DOING AN ADDITIONAL LOG-IN WITH EITHER OF THEM WILL LOCK OUT, SINCE THAT IS THE 3RD FAILURE IN
// THIS SESSION
- $this->doTestLoginForm('sam@silverstripe.com' , 'incorrectpassword');
+ $this->doTestLoginForm('testuser@example.com' , 'incorrectpassword');
$member1 = DataObject::get_by_id("Member", $this->idFromFixture('Member', 'test'));
$this->assertNotNull($member1->LockedOutUntil);
@@ -512,16 +512,16 @@ class SecurityTest extends FunctionalTest {
Security::config()->login_recording = true;
/* UNSUCCESSFUL ATTEMPTS WITH WRONG PASSWORD FOR EXISTING USER ARE LOGGED */
- $this->doTestLoginForm('sam@silverstripe.com', 'wrongpassword');
+ $this->doTestLoginForm('testuser@example.com', 'wrongpassword');
$attempt = DataObject::get_one('LoginAttempt', array(
- '"LoginAttempt"."Email"' => 'sam@silverstripe.com'
+ '"LoginAttempt"."Email"' => 'testuser@example.com'
));
$this->assertTrue(is_object($attempt));
$member = DataObject::get_one('Member', array(
- '"Member"."Email"' => 'sam@silverstripe.com'
+ '"Member"."Email"' => 'testuser@example.com'
));
$this->assertEquals($attempt->Status, 'Failure');
- $this->assertEquals($attempt->Email, 'sam@silverstripe.com');
+ $this->assertEquals($attempt->Email, 'testuser@example.com');
$this->assertEquals($attempt->Member(), $member);
/* UNSUCCESSFUL ATTEMPTS WITH NONEXISTING USER ARE LOGGED */
@@ -541,16 +541,16 @@ class SecurityTest extends FunctionalTest {
Security::config()->login_recording = true;
/* SUCCESSFUL ATTEMPTS ARE LOGGED */
- $this->doTestLoginForm('sam@silverstripe.com', '1nitialPassword');
+ $this->doTestLoginForm('testuser@example.com', '1nitialPassword');
$attempt = DataObject::get_one('LoginAttempt', array(
- '"LoginAttempt"."Email"' => 'sam@silverstripe.com'
+ '"LoginAttempt"."Email"' => 'testuser@example.com'
));
$member = DataObject::get_one('Member', array(
- '"Member"."Email"' => 'sam@silverstripe.com'
+ '"Member"."Email"' => 'testuser@example.com'
));
$this->assertTrue(is_object($attempt));
$this->assertEquals($attempt->Status, 'Success');
- $this->assertEquals($attempt->Email, 'sam@silverstripe.com');
+ $this->assertEquals($attempt->Email, 'testuser@example.com');
$this->assertEquals($attempt->Member(), $member);
}