diff --git a/README.md b/README.md
index 478fcb19..28bf193d 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
## SilverStripe CMS
-[![Build Status](https://secure.travis-ci.org/silverstripe/silverstripe-cms.png)](http://travis-ci.org/silverstripe/silverstripe-cms)
+[![Build Status](https://secure.travis-ci.org/silverstripe/silverstripe-cms.png?branch=3.0)](http://travis-ci.org/silverstripe/silverstripe-cms)
PHP5 Content Management System (CMS), see [http://silverstripe.org](http://silverstripe.org). Requires the [`framework`](http://github.com/silverstripe/sapphire) module and a [`silverstripe-installer`](http://github.com/silverstripe/silverstripe-installer) base project.
@@ -19,7 +19,7 @@ and [installation from source](http://doc.silverstripe.org/framework/en/installa
## License ##
- Copyright (c) 2007-2011, SilverStripe Limited - www.silverstripe.com
+ Copyright (c) 2007-2012, SilverStripe Limited - www.silverstripe.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
diff --git a/code/controllers/AssetAdmin.php b/code/controllers/AssetAdmin.php
index 8d8d46f2..e678a9cd 100644
--- a/code/controllers/AssetAdmin.php
+++ b/code/controllers/AssetAdmin.php
@@ -120,11 +120,17 @@ JS
// Category filter
if(isset($params['AppCategory'])) {
- $exts = File::$app_categories[$params['AppCategory']];
+ if(isset(File::$app_categories[$params['AppCategory']])) {
+ $exts = File::$app_categories[$params['AppCategory']];
+ } else {
+ $exts = array();
+ }
$categorySQLs = array();
foreach($exts as $ext) $categorySQLs[] = '"File"."Name" LIKE \'%.' . $ext . '\'';
// TODO Use DataList->filterAny() once OR connectives are implemented properly
- $list = $list->where('(' . implode(' OR ', $categorySQLs) . ')');
+ if (count($categorySQLs) > 0) {
+ $list = $list->where('(' . implode(' OR ', $categorySQLs) . ')');
+ }
}
return $list;
diff --git a/code/forms/SiteTreeURLSegmentField.php b/code/forms/SiteTreeURLSegmentField.php
index 2da57893..3345b77c 100644
--- a/code/forms/SiteTreeURLSegmentField.php
+++ b/code/forms/SiteTreeURLSegmentField.php
@@ -27,6 +27,8 @@ class SiteTreeURLSegmentField extends TextField {
public function Field($properties = array()) {
Requirements::javascript(CMS_DIR . '/javascript/SiteTreeURLSegmentField.js');
+ Requirements::add_i18n_javascript(CMS_DIR . '/javascript/lang', false, true);
+ Requirements::css(CMS_DIR . "/css/screen.css");
return parent::Field($properties);
}
diff --git a/code/model/SiteConfig.php b/code/model/SiteConfig.php
index 4f5b38d5..0fff4f9f 100644
--- a/code/model/SiteConfig.php
+++ b/code/model/SiteConfig.php
@@ -44,7 +44,6 @@ class SiteConfig extends DataObject implements PermissionProvider {
* @return FieldList
*/
public function getCMSFields() {
- Requirements::javascript(CMS_DIR . "/javascript/SitetreeAccess.js");
$groupsMap = Group::get()->map('ID', 'Breadcrumbs')->toArray();
asort($groupsMap);
diff --git a/composer.json b/composer.json
index 4e8fbc59..f0959808 100644
--- a/composer.json
+++ b/composer.json
@@ -24,5 +24,8 @@
"branch-alias": {
"dev-master": "3.1.x-dev"
}
+ },
+ "autoload": {
+ "classmap": ["tests/behat/"]
}
}
\ No newline at end of file
diff --git a/javascript/SiteTreeURLSegmentField.js b/javascript/SiteTreeURLSegmentField.js
index 55599928..7971b934 100644
--- a/javascript/SiteTreeURLSegmentField.js
+++ b/javascript/SiteTreeURLSegmentField.js
@@ -166,7 +166,7 @@
// edit button
editAction = $('', {
'class': 'ss-ui-button ss-ui-button-small edit',
- 'text': ss.i18n._t('URLSEGMENT.Edit'),
+ 'text': ss.i18n._t('URLSEGMENT.Edit', 'Edit'),
'click': function(e) {
e.preventDefault();
self.edit();
@@ -177,7 +177,7 @@
// update button
updateAction = $('', {
'class': 'update ss-ui-button-small',
- 'text': ss.i18n._t('URLSEGMENT.OK'),
+ 'text': ss.i18n._t('URLSEGMENT.OK', 'OK'),
'click': function(e) {
e.preventDefault();
self.update();
@@ -188,7 +188,7 @@
cancelAction = $('', {
'class': 'cancel ss-ui-action-minor ss-ui-button-small',
'href': '#',
- 'text': ss.i18n._t('URLSEGMENT.Cancel'),
+ 'text': ss.i18n._t('URLSEGMENT.Cancel', 'Cancel'),
'click': function(e) {
e.preventDefault();
self.cancel();
diff --git a/lang/en.yml b/lang/en.yml
index 7c539828..473b816a 100644
--- a/lang/en.yml
+++ b/lang/en.yml
@@ -1,6 +1,7 @@
en:
AssetAdmin:
ADDFILES: 'Add Files'
+ ALLOWEDEXTS: 'Allowed extensions'
ActionAdd: 'Add folder'
AppCategoryArchive: Archive
AppCategoryAudio: Audio
@@ -138,7 +139,6 @@ en:
MENUTITLE: Pages
TreeView: 'Tree View'
CMSPagesController_ContentToolbar.ss:
- ENABLEDRAGGING: 'Drag''n''drop'
MULTISELECT: Multi-selection
CMSPagesController_Tools.ss:
FILTER: Filter
@@ -173,7 +173,7 @@ en:
PUBLISHEDSITE: 'Published Site'
Password: Password
PostInstallTutorialIntro: 'This website is a simplistic version of a SilverStripe 3 site. To extend this, please take a look at {link}.'
- StartEditing: 'You can start editing your site\''s content by opening the CMS.'
+ StartEditing: 'You can start editing your content by opening the CMS.'
UnableDeleteInstall: 'Unable to delete installation files. Please delete the files below manually'
VIEWPAGEIN: 'View Page in:'
ErrorPage:
@@ -323,9 +323,9 @@ en:
LINKCHANGENOTE: 'Changing this page''s link will also affect the links of all child pages.'
MENUTITLE: 'Navigation label'
METADESC: 'Meta Description'
- METADESCHELP: 'Search engines use this content for displaying search results (although it will not influence their ranking).'
METAEXTRA: 'Custom Meta Tags'
- METAEXTRAHELP: 'HTML tags for additional meta information. For example <meta name="customName" content="your custom content here" />'
+ METAKEYWORDS: 'Meta Keywords'
+ METATITLE: 'Meta Title'
MODIFIEDONDRAFTHELP: 'Page has unpublished changes'
MODIFIEDONDRAFTSHORT: Modified
MetadataToggle: Metadata
@@ -387,8 +387,6 @@ en:
VIEWLAST: 'View last'
VIEWNEXT: 'View next'
VIEWPREVIOUS: 'View previous'
- TreeTools:
- DisplayLabel: 'Display:'
ViewArchivedEmail.ss:
CANACCESS: 'You can access the archived site at this link:'
HAVEASKED: 'You have asked to view the content of our site on'
diff --git a/tests/behat/README.md b/tests/behat/README.md
new file mode 100644
index 00000000..e072aec9
--- /dev/null
+++ b/tests/behat/README.md
@@ -0,0 +1 @@
+See https://github.com/silverstripe-labs/silverstripe-behat-extension
\ No newline at end of file
diff --git a/tests/behat/_manifest_exclude b/tests/behat/_manifest_exclude
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/behat/behat.yml b/tests/behat/behat.yml
new file mode 100644
index 00000000..0bf9097f
--- /dev/null
+++ b/tests/behat/behat.yml
@@ -0,0 +1,34 @@
+default:
+ context:
+ class: SilverStripe\Cms\Test\Behaviour\FeatureContext
+ extensions:
+ SilverStripe\BehatExtension\Extension: ~
+ Behat\MinkExtension\Extension:
+ # Adjust this to your local environment
+ base_url: http://localhost/
+ files_path: %behat.paths.features%/files/
+ default_session: selenium2
+ javascript_session: selenium2
+ goutte: ~
+ selenium2:
+ browser: firefox
+
+# Alternative profile, use with "vendor/bin/behat --profile chrome"
+chrome:
+ extensions:
+ Behat\MinkExtension\Extension:
+ selenium2:
+ browser: chrome
+
+# Saucelabs.com sample setup, use with "vendor/bin/behat --profile saucelabs"
+saucelabs:
+ extensions:
+ Behat\MinkExtension\Extension:
+ selenium2:
+ browser: firefox
+ # Add your own username and API token here
+ wd_host: :@ondemand.saucelabs.com/wd/hub
+ capabilities:
+ platform: "Windows 2008"
+ browser: "firefox"
+ version: "15"
\ No newline at end of file
diff --git a/tests/behat/features/bootstrap/FeatureContext.php b/tests/behat/features/bootstrap/FeatureContext.php
new file mode 100644
index 00000000..859dc5e0
--- /dev/null
+++ b/tests/behat/features/bootstrap/FeatureContext.php
@@ -0,0 +1,38 @@
+useContext('BasicContext', new BasicContext($parameters));
+ $this->useContext('LoginContext', new LoginContext($parameters));
+ $this->useContext('CmsFormsContext', new CmsFormsContext($parameters));
+ $this->useContext('CmsUiContext', new CmsUiContext($parameters));
+
+ parent::__construct($parameters);
+ }
+}
diff --git a/tests/behat/features/create-a-page.feature b/tests/behat/features/create-a-page.feature
new file mode 100644
index 00000000..a1df9adc
--- /dev/null
+++ b/tests/behat/features/create-a-page.feature
@@ -0,0 +1,15 @@
+@database-defaults
+Feature: Create a page
+ As an author
+ I want to create a page in the CMS
+ So that I can grow my website
+
+ @javascript
+ Scenario: I can create a page from the pages section
+ Given I am logged in with "ADMIN" permissions
+ And I go to "/admin/pages"
+ And I should see a "Add new" button in CMS Content Toolbar
+ When I press the "Add new" button
+ And I check "Page"
+ And I press the "Create" button
+ Then I should see an edit page form
diff --git a/tests/behat/features/edit-a-page.feature b/tests/behat/features/edit-a-page.feature
new file mode 100644
index 00000000..0be2ba39
--- /dev/null
+++ b/tests/behat/features/edit-a-page.feature
@@ -0,0 +1,29 @@
+@database-defaults
+Feature: Edit a page
+ As an author
+ I want to edit a page in the CMS
+ So that I correct errors and provide new information
+
+ Background:
+ Given I am logged in with "ADMIN" permissions
+ And I go to "/admin/pages"
+ Then I should see "About Us" in CMS Tree
+
+ @javascript
+ Scenario: I can open a page for editing from the pages tree
+ When I follow "About Us"
+ Then I should see an edit page form
+
+ @javascript
+ Scenario: I can edit title and content and see the changes on draft
+ When I follow "About Us"
+ Then I should see an edit page form
+
+ When I fill in "Title" with "About Us!"
+ And I fill in the content form with "my new content"
+ And I press the "Save Draft" button
+ Then I should see a "Saved." notice
+
+ When I follow "About Us"
+ Then the "Title" field should contain "About Us!"
+ And the content form should contain "my new content"
\ No newline at end of file
diff --git a/tests/behat/features/preview-a-page.feature b/tests/behat/features/preview-a-page.feature
new file mode 100644
index 00000000..279fdb27
--- /dev/null
+++ b/tests/behat/features/preview-a-page.feature
@@ -0,0 +1,41 @@
+@database-defaults
+Feature: Preview a page
+ As an author
+ I want to preview the page I'm editing in the CMS
+ So that I can see how it would look like to my visitors
+
+ @javascript
+ Scenario: I can show a preview of the current page from the pages section
+ Given I am logged in with "ADMIN" permissions
+ And I go to "/admin/pages"
+ Then I should see "About Us" in CMS Tree
+
+ When I follow "About Us"
+ And I press the "Preview »" button
+ Then I can see the preview panel
+ And the preview contains "About Us"
+
+ # TODO:
+ # - Only tests correctly on fresh database
+ # - We should continue testing against it after we have fixtures ready
+ @javascript
+ Scenario: I can see an updated preview when editing content
+ Given I am logged in with "ADMIN" permissions
+ And I go to "/admin/pages"
+ Then I should see "About Us" in CMS Tree
+
+ When I follow "About Us"
+ And I fill in the content form with "my new content"
+ And I press the "Save Draft" button
+ And I press the "Preview »" button
+
+ When I follow "Published Site"
+ Then the preview does not contain "my new content"
+ And the preview contains "You can fill"
+
+ When I follow "Draft Site"
+ Then the preview does not contain "You can fill"
+ And the preview contains "my new content"
+
+ When I press the "« Edit" button
+ Then I should see an edit page form
\ No newline at end of file
diff --git a/tests/behat/features/publish-a-page.feature b/tests/behat/features/publish-a-page.feature
new file mode 100644
index 00000000..ee7e1060
--- /dev/null
+++ b/tests/behat/features/publish-a-page.feature
@@ -0,0 +1,4 @@
+Feature: Create a page
+ As a site owner
+ I want content to go to a draft site before being published
+ So that only high quality changes are seen by our visitors
\ No newline at end of file
diff --git a/tests/behat/features/search-for-a-page.feature b/tests/behat/features/search-for-a-page.feature
new file mode 100644
index 00000000..23e51931
--- /dev/null
+++ b/tests/behat/features/search-for-a-page.feature
@@ -0,0 +1,18 @@
+@database-defaults
+Feature: Search for a page
+ As an author
+ I want to search for a page in the CMS
+ So that I can efficiently navigate nested content structures
+
+ @javascript
+ Scenario: I can search for a page by its title
+ Given I am logged in with "ADMIN" permissions
+ And I go to "/admin/pages"
+ Then I should see "About Us" in CMS Tree
+ And I should see "Contact Us" in CMS Tree
+
+ When I expand the "Filter" CMS Panel
+ And I fill in "Content" with "About Us"
+ And I press the "Apply Filter" button
+ Then I should see "About Us" in CMS Tree
+ But I should not see "Contact Us" in CMS Tree