API-CHANGE Update docs to match renaming of sapphire to framework

This commit is contained in:
Simon Welsh 2012-03-25 10:16:59 +13:00 committed by Sean Harvey
parent 3a6341a251
commit 656369008c
36 changed files with 142 additions and 141 deletions

View File

@ -7,7 +7,8 @@
* "Page Content" and "Page Settings" are split into two interfaces
* Image/Link insertion moved into a modal dialog instead of a sidebar
* "Add pages" dropdown moved to a more descriptive modal dialog
* Allow usage of "sapphire" framework without the "cms" module
* Renaming of sapphire to SilverStripe framework
* Allow usage of SilverStripe framework without the "cms" module
* CMS JavaScript moved to [jQuery.entwine](https://github.com/hafriedlander/jquery.entwine)
* CMS stylesheets are generated by SCSS to provide more flexible and robust styling
@ -207,7 +208,7 @@ If you have customized 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`
and `sapphire/admin/templates`, as well as the new [jQuery.entwine](https://github.com/hafriedlander/jquery.entwine)
and `framework/admin/templates`, as well as the new [jQuery.entwine](https://github.com/hafriedlander/jquery.entwine)
based JavaScript logic. Have a look at the new ["Extending the CMS" guide](../howto/extending-the-cms),
["CSS" guide](../topics/css), ["JavaScript" guide](../topics/javascript) and
["CMS Architecture" guide](/reference/cms-architecture) to get you started.
@ -250,7 +251,7 @@ on details for how to achieve the same goals in the new class.
### Stylesheet preprocessing via SCSS and the "compass" module ###
CSS files in the `cms` and `sapphire/admin` modules are now generated through
CSS files in the `cms` and `framework/admin` modules are now generated through
the ["compass" SilverStripe module](http://silverstripe.org/compass-module), which uses
the ["Compass" framework](http://compass-style.org/) and the ["SCSS" language](http://sass-lang.com/).
This allows us to build more flexible and expressive stylesheets as a foundation for any
@ -300,14 +301,14 @@ Please use the appropriate setters on the form field instance instead.
### Restructured files and folders ###
In order to make the `sapphire` framework useable without the `cms` module,
In order to make the SilverStripe framework useable without the `cms` module,
we've moved some files around.
CMS base functionality which is not directly related to content pages (`SiteTree`)
has been moved from the `cms` module into a new "sub-module" located in `sapphire/admin`.
has been moved from the `cms` module into a new "sub-module" located in `framework/admin`.
This includes generic management interfaces like "Files & Images" (`AssetAdmin`),
"Security" (`SecurityAdmin`) and the `ModelAdmin` class.
On the other hand, `SiteTree` related features were moved from `sapphire` to the `cms` module.
On the other hand, `SiteTree` related features were moved from `framework` to the `cms` module.
Due to the built-in PHP class autoloader,
this usually won't have any effect on your own code (unless you're including direct file paths).
@ -382,7 +383,7 @@ There is a new deprecation API that generates deprecation notices. Calls to Dep
will only produce errors if the API was deprecated in the release equal to or earlier than the
"notification version".
`sapphire/_config.php` currently contains a call to throw notices calls to all methods deprecated
`framework/_config.php` currently contains a call to throw notices calls to all methods deprecated
in 3.0.
Deprecation::notification_version('3.0.0');

View File

@ -17,7 +17,7 @@ First of all, create a new folder structure in your SilverStripe webroot, which
form our module for this example.
cms/
sapphire/
framework/
zzz_admin/
_config.php
code/
@ -34,7 +34,7 @@ the common `Page` object (a new PHP class `MyPage` will look for a `MyPage.ss` t
We can use this to create a different base template with `LeftAndMain.ss`
(which corresponds to the `LeftAndMain` PHP controller class).
Copy the template markup of the base implementation at `sapphire/admin/templates/LeftAndMain.ss` into `zzz_admin/admin/templates/LeftAndMain.ss`. It will automatically be picked up by the CMS logic. Add a new section after the `$Content` tag:
Copy the template markup of the base implementation at `framework/admin/templates/LeftAndMain.ss` into `zzz_admin/admin/templates/LeftAndMain.ss`. It will automatically be picked up by the CMS logic. Add a new section after the `$Content` tag:
:::ss
...
@ -144,4 +144,4 @@ blocks and concepts for more complex extensions as well.
## Related
* [CMS Architecture](../reference/cms-architecture)
* [Topics: Rich Text Editing](../topics/rich-text-editing)
* [Topics: Rich Text Editing](../topics/rich-text-editing)

View File

@ -25,10 +25,10 @@ All command-line arguments are documented on [phpunit.de](http://www.phpunit.de/
## Usage of "phpunit" executable
* `phpunit`: Runs all tests in all folders
* `phpunit sapphire/tests/`: Run all tests of the sapphire module
* `phpunit sapphire/tests/filesystem`: Run all filesystem tests within the sapphire module
* `phpunit sapphire/tests/filesystem/FolderTest.php`: Run a single test
* `phpunit sapphire/tests '' flush=all`: Run tests with optional `$_GET` parameters (you need an empty second argument)
* `phpunit framework/tests/`: Run all tests of the framework module
* `phpunit framework/tests/filesystem`: Run all filesystem tests within the framework module
* `phpunit framework/tests/filesystem/FolderTest.php`: Run a single test
* `phpunit framework/tests '' flush=all`: Run tests with optional `$_GET` parameters (you need an empty second argument)
## Coverage reports
@ -61,7 +61,7 @@ for unit and functional tests.
Example `phpunit-unittests-only.xml`:
<phpunit bootstrap="/sapphire/tests/bootstrap.php" colors="true">
<phpunit bootstrap="framework/tests/bootstrap.php" colors="true">
<testsuites>
<testsuite>
<directory>mysite/tests/unit</directory>
@ -83,8 +83,8 @@ This applies for all thirdparty code
<filter>
<blacklist>
<directory suffix=".php">sapphire/dev/</directory>
<directory suffix=".php">sapphire/thirdparty/</directory>
<directory suffix=".php">framework/dev/</directory>
<directory suffix=".php">framework/thirdparty/</directory>
<directory suffix=".php">cms/thirdparty/</directory>
<!-- Add your custom rules here -->
@ -101,7 +101,7 @@ particularly if you have a lot of database write operations.
This is a problem when you're trying to to "[Test Driven Development](http://en.wikipedia.org/wiki/Test-driven_development)".
To speed things up a bit, you can simply use a faster database just for executing tests.
The sapphire database layer makes this relatively easy, most likely
The SilverStripe database layer makes this relatively easy, most likely
you won't need to adjust any project code or alter SQL statements.
The [SQLite3 module](http://www.silverstripe.org/sqlite-database/) provides an interface
@ -122,7 +122,7 @@ Example `mysite/_config.php`:
You can either use the database on a single invocation:
phpunit sapphire/tests "" db=sqlite3
phpunit framework/tests "" db=sqlite3
or through a `<php>` flag in your `phpunit.xml` (see [Appenix C: "Setting PHP INI settings"](http://www.phpunit.de/manual/current/en/appendixes.configuration.html)):
@ -136,4 +136,4 @@ or through a `<php>` flag in your `phpunit.xml` (see [Appenix C: "Setting PHP IN
<div class="hint" markdown="1">
It is recommended that you still run your tests with the original database driver (at least on continuous integration)
to ensure a realistic test scenario.
</div>
</div>

View File

@ -24,7 +24,7 @@ See [frequently asked questions](/installation/from-source#frequently-asked-ques
SilverStripe core is currently hosted on [github.com/silverstripe](http://github.com/silverstripe). The core consists of four parts:
* The `installer` project ([github.com/silverstripe/silverstripe-installer](http://github.com/silverstripe/silverstripe-installer))
* The `sapphire` module ([github.com/silverstripe/sapphire](http://github.com/silverstripe/sapphire))
* The `framework` module ([github.com/silverstripe/sapphire](http://github.com/silverstripe/sapphire))
* The `cms` module ([github.com/silverstripe/silverstripe-cms](http://github.com/silverstripe/silverstripe-cms))
* A sample theme called `simple` ([github.com/silverstripe-themes/silverstripe-simple](http://github.com/silverstripe-themes/silverstripe-simple))
@ -72,7 +72,7 @@ Run the following command to download all core dependencies via [Piston](http://
cd my-silverstripe-project/
tools/new-project
This will add `sapphire`, `cms` and the `simple` theme to your project.
This will add `framework`, `cms` and the `simple` theme to your project.
As a fallback solution, you can simply download all necessary files without any dependency management through piston.
This is handy if you have an existing project in version control, and want a one-off snapshot
@ -144,7 +144,7 @@ Please replace `<username>` below with your github username.
git clone git@github.com:<username>/silverstripe-installer.git my-silverstripe-project
cd my-silverstripe-project
git clone git@github.com:<username>/sapphire.git sapphire
git clone git@github.com:<username>/sapphire.git framework
git clone git@github.com:<username>/silverstripe-cms.git cms
git clone git@github.com:<username>/silverstripe-simple.git themes/simple
@ -152,7 +152,7 @@ Now you need to add the original repository as `upstream`, so you can keep your
cd my-silverstripe-project
(git remote add upstream git://github.com/silverstripe/silverstripe-installer.git && git fetch upstream)
(cd sapphire && git remote add upstream git://github.com/silverstripe/sapphire.git && git fetch upstream)
(cd framework && git remote add upstream git://github.com/silverstripe/sapphire.git && git fetch upstream)
(cd cms && git remote add upstream git://github.com/silverstripe/silverstripe-cms.git && git fetch upstream)
(cd themes/simple && git remote add upstream git://github.com/silverstripe-themes/silverstripe-simple.git)
@ -172,7 +172,7 @@ You can optionally select a ["release branch"](https://github.com/silverstripe/s
cd my-silverstripe-project
git checkout -b 2.4 origin/2.4
(cd sapphire && git checkout -b 2.4 origin/2.4)
(cd framework && git checkout -b 2.4 origin/2.4)
(cd cms && git checkout -b 2.4 origin/2.4)
(cd themes/simple && git checkout -b 2.4 origin/2.4)
# repeat for all modules in your project...
@ -181,7 +181,7 @@ After creating the local branch, you can simply switch between branches:
cd my-silverstripe-project
git checkout 2.4
(cd sapphire && git checkout 2.4)
(cd framework && git checkout 2.4)
(cd cms && git checkout 2.4)
(cd themes/simple && git checkout 2.4)
# repeat for all modules in your project...
@ -190,7 +190,7 @@ To switch back to master:
cd my-silverstripe-project
git checkout master
(cd sapphire && git checkout master)
(cd framework && git checkout master)
(cd cms && git checkout master)
(cd themes/simple && git checkout master)
# repeat for all modules in your project...
@ -223,19 +223,19 @@ If you have copied the installer files into a new project, we recommend to repea
In case you chose the "Installation for contributions" option, all modules in your project
will be standard git repositories, and you can update them as usual.
cd my-silverstripe-project/sapphire
cd my-silverstripe-project/framework
git pull
### Updating modules via piston or download ###
For the "Installation for a new project" option, modules like `sapphire` or `cms`
For the "Installation for a new project" option, modules like `framework` or `cms`
are added as plain files without a direct link to their originating repository.
If these plain files are managed by piston, the update process is simple:
cd my-silverstripe-project
piston update sapphire
piston update framework
# Use "svn" instead of "git" for subversion repositories
git add sapphire/*
git add framework/*
git commit -m "udpated dependencies"
For file downloads without piston, you can simply download the source code again and replace it.
@ -283,4 +283,4 @@ See [piston.rubyforge.org](http://piston.rubyforge.org/import.html).
* [Collaboration on Git](/misc/collaboration-on-git)
* [Pro git - free online book](http://progit.org/book/)
* [Git cheat sheet - github.com](https://github.com/guides/git-cheat-sheet)
* [Git - SVN Crash Course - git.or.cz](http://git.or.cz/course/svn.html)
* [Git - SVN Crash Course - git.or.cz](http://git.or.cz/course/svn.html)

View File

@ -14,8 +14,8 @@ Silverstripe. Replace "yoursite.com" and "/home/yoursite/public_html/" below.
url.access-deny += ( ".ss" )
static-file.exclude-extensions += ( ".ss" )
# Deny access to Sapphire command-line interface
$HTTP["url"] =~ "^/sapphire/cli-script.php" {
# Deny access to SilverStripe command-line interface
$HTTP["url"] =~ "^/framework/cli-script.php" {
url.access-deny = ( "" )
}
@ -27,11 +27,11 @@ Silverstripe. Replace "yoursite.com" and "/home/yoursite/public_html/" below.
# Rewrite URLs so they are nicer
url.rewrite-once = (
"^/.*\.[A-Za-z0-9]+.*?$" => "$0",
"^/(.*?)(\?|$)(.*)" => "/sapphire/main.php?url=$1&$3"
"^/(.*?)(\?|$)(.*)" => "/framework/main.php?url=$1&$3"
)
# Show SilverStripe error page
server.error-handler-404 = "/sapphire/main.php"
server.error-handler-404 = "/framework/main.php"
}
@ -53,14 +53,14 @@ of Silverstripe on the same host, you can use something like this (be warned, it
url.rewrite-once = (
"(?i)(/copy1/.*\.([A-Za-z0-9]+))(.*?)$" => "$0",
"(?i)(/copy2/.*\.([A-Za-z0-9]+))(.*?)$" => "$0",
"^/copy1/(.*?)(\?|$)(.*)" => "/copy1/sapphire/main.php?url=$1&$3",
"^/copy2/(.*?)(\?|$)(.*)" => "/copy2/sapphire/main.php?url=$1&$3"
"^/copy1/(.*?)(\?|$)(.*)" => "/copy1/framework/main.php?url=$1&$3",
"^/copy2/(.*?)(\?|$)(.*)" => "/copy2/framework/main.php?url=$1&$3"
)
$HTTP["url"] =~ "^/copy1/" {
server.error-handler-404 = "/copy1/sapphire/main.php"
server.error-handler-404 = "/copy1/framework/main.php"
}
$HTTP["url"] =~ "^/copy2/" {
server.error-handler-404 = "/copy2/sapphire/main.php"
server.error-handler-404 = "/copy2/framework/main.php"
}
}

View File

@ -15,10 +15,10 @@ Now you need to setup a virtual host in Nginx with the following configuration s
index index.html index.php;
if (!-f $request_filename) {
rewrite ^/(.*?)(\?|$)(.*)$ /sapphire/main.php?url=$1&$3 last;
rewrite ^/(.*?)(\?|$)(.*)$ /framework/main.php?url=$1&$3 last;
}
error_page 404 /sapphire/main.php;
error_page 404 /framework/main.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;

View File

@ -12,7 +12,7 @@ Never update a website on the live server without trying it on a development cop
* Backup your website
* Download the new release and uncompress it to a temporary folder
* Leave custom folders like *mysite* or *themes* in place.
* Identify system folders in your webroot (`cms`, `sapphire` and any additional modules).
* Identify system folders in your webroot (`cms`, `framework` and any additional modules).
* Delete existing system folders (or move them outside of your webroot)
* Extract and replace system folders from your download (Deleting instead of "copying over" existing folders
ensures that files removed from the new SilverStripe release are not persisting in your installation)
@ -37,4 +37,4 @@ upgrade than customisations that use sneaky tricks, such as the subsites module.
## Related
* [Release Announcements](http://groups.google.com/group/silverstripe-announce/)
* [Blog posts about releases on silverstripe.org](http://silverstripe.org/blog/tag/release)
* [Blog posts about releases on silverstripe.org](http://silverstripe.org/blog/tag/release)

View File

@ -138,13 +138,13 @@ At the moment, all URLs will have index.php in them. This is because IIS does no
# URLs with query strings
# Don't catch successful file references
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\?(.+)$ /sapphire/main.php?url=$1&$2
RewriteRule ^(.*)\?(.+)$ /framework/main.php?url=$1&$2
# URLs without query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /sapphire/main.php?url=$1
RewriteRule ^(.*)$ /framework/main.php?url=$1
Friendly URLs should now be working when you browse to your site.
Remember that IIRF works on a per-virtual host basis. This means for each site you want IIRF to work for, you need to add a new entry to **Web Sites** in **inetmgr.exe**.
Thanks to **kcd** for the rules: [http://www.silverstripe.org/installing-silverstripe/show/10488#post294415](http://www.silverstripe.org/installing-silverstripe/show/10488#post294415)
Thanks to **kcd** for the rules: [http://www.silverstripe.org/installing-silverstripe/show/10488#post294415](http://www.silverstripe.org/installing-silverstripe/show/10488#post294415)

View File

@ -2,7 +2,7 @@
This document provides guidelines for code formatting and documentation
to developers contributing to SilverStripe. It applies to all PHP files
in the sapphire/ and cms/ modules, as well as any supported additional modules.
in the framework/ and cms/ modules, as well as any supported additional modules.
Coding standards are an important aspect for every software project,
and facilitate collaboration by making code more consistent and readable.
@ -440,4 +440,4 @@ See [security](/topics/security) for conventions related to handing security per
## License
Parts of these coding conventions were adapted from [Zend Framework](http://framework.zend.com/manual/en/coding-standard.overview.html),
which are licensed under BSD (see [license](http://framework.zend.com/license)).
which are licensed under BSD (see [license](http://framework.zend.com/license)).

View File

@ -52,7 +52,7 @@ there are any problems they will follow up with you, so please ensure they have
### Sending git pull requests
The SilverStripe core modules (`sapphire` and `cms`), as well as some of the more popular modules are in
The SilverStripe core modules (`framework` and `cms`), as well as some of the more popular modules are in
git version control. SilverStripe hosts its modules on [github.com/silverstripe](http://github.com/silverstripe) and [github.com/silverstripe-labs](http://github.com/silverstripe-labs).
After [installing git](http://help.github.com/git-installation-redirect) and creating a [free github.com account](https://github.com/signup/free), you can "fork" a module,
which creates a copy that you can commit to (see github's [guide to "forking"](http://help.github.com/forking/)).
@ -137,7 +137,7 @@ Its contents are fetched from different releases automatically every couple of m
### Source Control
In order to balance editorial control with effective collaboration, we keep
documentation alongside the module source code, e.g. in `sapphire/docs/`,
documentation alongside the module source code, e.g. in `framework/docs/`,
or as code comments within PHP code.
Contributing documentation is the same process as providing any other patch
(see [Patches and Bugfixes](contributing#submitting-patches-bugfixes-and-enhancements)).
@ -230,9 +230,9 @@ on placing HTML blocks inside Markdown.
### Translating Documentation
Documentation is kept alongside the source code, typically in a module subdirectory like `sapphire/docs/en/`.
Documentation is kept alongside the source code, typically in a module subdirectory like `framework/docs/en/`.
Each language has its own subfolder, which can duplicate parts or the whole body of documentation.
German documentation would for example live in `sapphire/docs/de/`.
German documentation would for example live in `framework/docs/de/`.
The [sapphiredocs](https://github.com/silverstripe/silverstripe-sapphiredocs) module that drives
[doc.silverstripe.org](http://doc.silverstripe.org) automatically resolves these subfolders into a language dropdown.
@ -257,4 +257,4 @@ a free translator account to get started, even if you just feel like fixing up a
## Related
* [Installation: From Source](/installation/from-source)
* [Collaboration on Git](/misc/collaboration-on-git)
* [Collaboration on Git](/misc/collaboration-on-git)

View File

@ -6,7 +6,7 @@ sections.
* [Coding conventions](coding-conventions): Guidelines and standards for code formatting and documentation
* [Contributing](contributing): How you can be a part of the SilverStripe Open Source community
* [Module release process](module-release-process): Creating and looking after a module
* [Release process](release-process): Describes the Sapphire and CMS release process
* [Release process](release-process): Describes the Framework and CMS release process
* [SS markdown](ss-markdown): Markdown syntax for our technical documentation
* [Subversion](subversion): Describes SilverStripe-specific information on how to handle subversion

View File

@ -1,6 +1,6 @@
# Release Process
Describes the process followed for "core" releases (mainly the `sapphire` and `cms` modules).
Describes the process followed for "core" releases (mainly the `framework` and `cms` modules).
For other modules, we've compiled a helpful guide for a good [module release process](module-release-process).
## Release Maintainer
@ -18,7 +18,7 @@ Release dates are usually not published prior to the release, but you can get a
reviewing the [release milestone](http://open.silverstripe.com/roadmap) on open.silverstripe.org. Releases will be
announced on the [release announcements mailing list](http://groups.google.com/group/silverstripe-announce).
Releases of the *cms* and *sapphire* modules are coupled at the moment, they follow the same numbering scheme. Module
Releases of the *cms* and *framework* modules are coupled at the moment, they follow the same numbering scheme. Module
releases are documented separately in [module-release-process](module-release-process).
## Release Numbering
@ -146,4 +146,4 @@ Each [security release](http://www.silverstripe.org/security-releases/) includes
| **Critical** | Critical releases require immediate actions. Such vulnerabilities allow attackers to take control of your site and you should upgrade on the day of release. *Example: Directory traversal, privilege escalation* |
| **Important** | Important releases should be evaluated immediately. These issues allow an attacker to compromise a site's data and should be fixed within days. *Example: SQL injection.* |
| **Moderate** | Releases of moderate severity should be applied as soon as possible. They allow the unauthorized editing or creation of content. *Examples: Cross Site Scripting (XSS) in template helpers.* |
| **Low** | Low risk releases fix information disclosure and read-only privilege escalation vulnerabilities. These updates should also be applied as soon as possible, but with an impact-dependent priority. *Example: Exposure of the core version number, Cross Site Scripting (XSS) limited to the admin interface.* |
| **Low** | Low risk releases fix information disclosure and read-only privilege escalation vulnerabilities. These updates should also be applied as soon as possible, but with an impact-dependent priority. *Example: Exposure of the core version number, Cross Site Scripting (XSS) limited to the admin interface.* |

View File

@ -27,7 +27,7 @@ on our [blog](http://www.silverstripe.org/the-3-0-ui-a-better-framework-for-your
All CSS in the CMS UI is written in the [SCSS language extensions](http://sass-lang.com/)
and the [Compass framework](http://compass-style.org/), which helps
us maintain expressive and concise style declarations. The files are located in `sapphire/admin/scss`
us maintain expressive and concise style declarations. The files are located in `framework/admin/scss`
(and if you have the `cms` module installed, in `cms/scss`), and are compiled to a `css` folder on the
same directory path. Changes to the SCSS files can be automatically converted by installing
the ["compass" module](http://www.silverstripe.org/compass-module/) for SilverStripe,
@ -138,8 +138,8 @@ Due to the procedural and selector-driven style of UI programming in jQuery.entw
it can be difficult to find the piece of code responsible for a certain behaviour.
Therefore it is important to adhere to file naming conventions.
E.g. a feature only applicable to `ModelAdmin` should be placed in
`sapphire/admin/javascript/ModelAdmin.js`, while something modifying all forms (including ModelAdmin forms)
would be better suited in `sapphire/admin/javascript/LeftAndMain.EditForm.js`.
`framework/admin/javascript/ModelAdmin.js`, while something modifying all forms (including ModelAdmin forms)
would be better suited in `framework/admin/javascript/LeftAndMain.EditForm.js`.
Selectors used in these files should mirrow the "scope" set by its filename,
so don't place a rule applying to all form buttons inside `ModelAdmin.js`.
@ -151,7 +151,7 @@ and [jQuery.delegate](http://api.jquery.com/delegate/), so takes care of dynamic
Most interfaces will require their own JavaScript and CSS files, so the Ajax loading has
to ensure they're loaded unless already present. A custom-built library called
`jQuery.ondemand` (located in `sapphire/thirdparty`) takes care of this transparently -
`jQuery.ondemand` (located in `framework/thirdparty`) takes care of this transparently -
so as a developer just declare your dependencies through the `[api:Requirements]` API.
## Ajax Loading and Browser History
@ -231,11 +231,11 @@ To avoid repetition, we've written some helpers for various use cases:
SilverStripe automatically applies a [jQuery UI button style](http://jqueryui.com/demos/button/)
to all elements with the class `.ss-ui-button`. We've extended the jQuery UI widget a bit
to support defining icons via HTML5 data attributes (see `ssui.core.js`).
These icon identifiers relate to icon files in `sapphire/admin/images/btn-icons`,
These icon identifiers relate to icon files in `framework/admin/images/btn-icons`,
and are sprited into a single file through SCSS and the Compass framework
(see [tutorial](http://compass-style.org/help/tutorials/spriting/)).
Compass also creates the correct CSS classes to show those sprites via background images
(see `sapphire/admin/scss/_sprites.scss`).
(see `framework/admin/scss/_sprites.scss`).
Input: `<a href="..." class="ss-ui-button" data-icon="add" />Button text</a>`
@ -276,4 +276,4 @@ Note: You can see any additional HTTP headers through the web developer tools in
* [Howto: Extend the CMS Interface](../howto/extend-cms-interface)
* [Howto: Customize the CMS tree](../howto/customize-cms-tree)
* [Reference: ModelAdmin](../reference/modeladmin)
* [Topics: Rich Text Editing](../topics/rich-text-editing)
* [Topics: Rich Text Editing](../topics/rich-text-editing)

View File

@ -50,8 +50,8 @@ See [controller](/topics/controller) for examples and explanations on how the ru
SilverStripe comes with certain rewrite rules (e.g. for *admin/assets*).
* [sapphire/_config.php](http://open.silverstripe.org/browser/modules/sapphire/trunk/_config.php)
* [cms/_config.php](http://open.silverstripe.org/browser/modules/cms/trunk/_config.php)
* [framework/_config.php](https://github.com/silverstripe/sapphire/blob/master/_config.php)
* [cms/_config.php](https://github.com/silverstripe/silverstripe-cms/blob/master/_config.php)
## Links

View File

@ -27,7 +27,7 @@ The basic .htaccess file after installing SilverStripe look like this:
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
</IfModule>
### SILVERSTRIPE END ###
@ -35,11 +35,11 @@ The basic .htaccess file after installing SilverStripe look like this:
The `<Files>` section denies direct access to the template files from anywhere but the server itself.
The next section enables the rewriting engine and rewrites requests to `sapphire/main.php` if they meet the following
The next section enables the rewriting engine and rewrites requests to `framework/main.php` if they meet the following
criteria:
* URI doesn't end in .gif, .jpg, .png, .css, or .js
* The requested file doesn't exist on the filesystem `sapphire/main.php` is called with the REQUEST_FILENAME (%1) as the `url` parameter and also appends the original
* The requested file doesn't exist on the filesystem `framework/main.php` is called with the REQUEST_FILENAME (%1) as the `url` parameter and also appends the original
QUERY_STRING.
See the [mod_rewrite documentation](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html) for more information on how
@ -90,4 +90,4 @@ You can access the following controller-method with /team/signup
## SSViewer template rendering
See [templates](/topics/templates) for information on the SSViewer template system.
See [templates](/topics/templates) for information on the SSViewer template system.

View File

@ -123,12 +123,12 @@ example](http://open.silverstripe.com/browser/modules/cms/trunk/code/staticpubli
Just look for this line:
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
RewriteRule .* framework/main.php?url=%1&%{QUERY_STRING} [L]
And change the PHP script from main.php to static-main.php:
RewriteRule .* sapphire/static-main.php?url=%1&%{QUERY_STRING} [L]
RewriteRule .* framework/static-main.php?url=%1&%{QUERY_STRING} [L]
## Using Static Publisher With Subsites Module

View File

@ -144,7 +144,7 @@ restriction is needed to avoid performance-hits by caching and sorting potential
### Casting
Column-values can be casted, based on the casting-types available through DBObject (sapphire/core/model/fieldtypes).
Column-values can be casted, based on the casting-types available through DBObject (framework/core/model/fieldtypes).
:::php
$myTableListField->setFieldCasting(array(

View File

@ -86,7 +86,7 @@ If a variable returns a string, that string will be inserted into the template.
the system will attempt to render the object through its forTemplate() method. If the `forTemplate()` method has not been
defined, the system will return an error.
SilverStripe provides lots of properties and methods. For more details on built-in page controls and variables, see http://doc.silverstripe.org/sapphire/en/reference/built-in-page-controls
SilverStripe provides lots of properties and methods. For more details on built-in page controls and variables, see http://doc.silverstripe.org/framework/en/reference/built-in-page-controls
### Escaping

View File

@ -3,7 +3,7 @@
## Introduction
This page lists a number of "page options" , "rendering tools" or "special URL variables" that you can use to debug your
sapphire applications. These are consumed in PHP using the $_REQUEST or $_GET super globals throughout the Sapphire
SilverStruoe applications. These are consumed in PHP using the $_REQUEST or $_GET super globals throughout the SilverStripe
core.
**General Usage**

View File

@ -10,7 +10,7 @@ The main entry point for any commandline execution is `cli-script.php`. For exam
from the commandline, use this command:
cd your-webroot/
php sapphire/cli-script.php dev/build
php framework/cli-script.php dev/build
Make sure that your commandline php version uses the same configuration as your webserver (run `php -i` to find out more).
@ -20,9 +20,9 @@ You can add parameters to the command by using normal form encoding.
All parameters will be available in `$_GET` within SilverStripe.
cd your-webroot/
php sapphire/cli-script.php myurl myparam=1 myotherparam=2
php framework/cli-script.php myurl myparam=1 myotherparam=2
## SAKE: Sapphire make
## SAKE: SilverStripe make
Sake is a simple wrapper around `cli-script.php`. It also tries to detect which `php` executable to use
if more than one are available.
@ -35,7 +35,7 @@ If you get an error when running the command php -v, then you may not have php-c
You can copy the `sake` file into `/usr/bin/sake` for easier access (this is optional):
cd your-webroot/
sudo ./sapphire/sake installsake
sudo ./framework/sake installsake
Note: This currently only works on unix-like systems, not on Windows.
@ -68,7 +68,7 @@ Using this example, /Users/sminnee/Sites/mysite/ would be accessed at http://mys
## Usage
Sake will either run `./sapphire/cli-script.php` or `./cli-script.php`, depending on what's available.
Sake will either run `./framework/cli-script.php` or `./cli-script.php`, depending on what's available.
It's particularly useful for running build tasks...
@ -87,7 +87,7 @@ It can also be handy if you have a long running script.
You can use sake to make daemon processes for your application.
Step 1: Make a task or controller class that runs a loop. Because Sapphire has memory leaks, you should make the PHP
Step 1: Make a task or controller class that runs a loop. Because SilverStripe has memory leaks, you should make the PHP
process exit when it hits some reasonable memory limit. Sake will automatically restart your process whenever it exits.
The other thing you should do is include some appropriate sleep()s so that your process doesn't hog the system. The
@ -122,4 +122,4 @@ Step 3: Use sake to start and stop your process
Note that sake processes are currently a little brittle, in that the pid and log files are placed in the site root
directory, rather than somewhere sensible like /var/log or /var/run.
directory, rather than somewhere sensible like /var/log or /var/run.

View File

@ -62,7 +62,7 @@ Some constants are user-defineable within *_ss_environment.php*.
| Name | | Description |
| ---- | | ----------- |
| *TEMP_FOLDER* | | Absolute file path to store temporary files such as cached templates or the class manifest. Needs to be writeable by the webserver user. Defaults to *sys_get_temp_dir()*, and falls back to *silverstripe-cache* in the webroot. See *getTempFolder()* in *sapphire/core/Core.php* |
| *TEMP_FOLDER* | | Absolute file path to store temporary files such as cached templates or the class manifest. Needs to be writeable by the webserver user. Defaults to *sys_get_temp_dir()*, and falls back to *silverstripe-cache* in the webroot. See *getTempFolder()* in *framework/core/Core.php* |
## User-level: Member-object
@ -94,4 +94,4 @@ and `ini_set('max_execution_time', <value>)` in your own `_config.php`.
## See Also
[Config Cheat sheet](http://www.ssbits.com/a-config-php-cheatsheet/)
[Config Cheat sheet](http://www.ssbits.com/a-config-php-cheatsheet/)

View File

@ -11,7 +11,7 @@ You are free to add `<style>` and `<link>` tags to your template (typically `the
SilverStripe provides a management layer for javascript and CSS files on top of that with the [Requirements](/reference/requirements) class,
by adding some simple PHP calls to your controller or template. Some files are automatically included,
depending on what functionality you are using (e.g. SilverStripe forms automatically include `sapphire/css/Form.css`).
depending on what functionality you are using (e.g. SilverStripe forms automatically include `framework/css/Form.css`).
In your controller (e.g. `mysite/code/Page.php`):
@ -91,4 +91,4 @@ See [typography](/reference/typography) for more information.
* [javascript](javascript)
* ["Compass" module](http://silverstripe.org/compass-module/): Allows writing CSS in SASS/LESS syntax, with better code management through mixins, includes and variables
* [Reference: CMS Architecture](../reference/cms-architecture)
* [Howto: Extend the CMS Interface](../howto/extend-cms-interface)
* [Howto: Extend the CMS Interface](../howto/extend-cms-interface)

View File

@ -9,7 +9,7 @@ following connections:
All data tables in SilverStripe are defined as subclasses of `[api:DataObject]`. Inheritance is supported in the data
model: seperate tables will be linked together, the data spread across these tables. The mapping and saving/loading
logic is handled by sapphire, you don't need to worry about writing SQL most of the time.
logic is handled by SilverStripe, you don't need to worry about writing SQL most of the time.
The advanced object-relational layer in SilverStripe is one of the main reasons for requiring PHP5. Most of its
customizations are possible through [PHP5 Object
@ -242,7 +242,7 @@ So far we have only filtered a data list by fields on the object that you're req
be okay, but often, a data model is made up of a number of related objects. For example, in SilverStripe each member
can be placed in a number of groups, and each group has a number of permissions.
For this, Sapphire ORM supports **Relation Filters**. Any ORM request can be filtered by fields on a related object by
For this, the SilverStripe ORM supports **Relation Filters**. Any ORM request can be filtered by fields on a related object by
specifying the filter key as `<relation-name>.<field-in-related-object>`. You can chain relations together as many
times as is necessary.
@ -528,7 +528,7 @@ accessors available on both ends.
### Adding relations
Inside sapphire it doesn't matter if you're editing a *has_many*- or a *many_many*-relationship. You need to get a
Inside SilverStripe it doesn't matter if you're editing a *has_many*- or a *many_many*-relationship. You need to get a
`[api:ComponentSet]`.
:::php
@ -671,7 +671,7 @@ Example: Disallow creation of new players if the currently logged-in player is n
exit();
}
// CAUTION: You are required to call the parent-function, otherwise sapphire will not execute the request.
// CAUTION: You are required to call the parent-function, otherwise SilverStripe will not execute the request.
parent::onBeforeWrite();
}
}

View File

@ -11,7 +11,7 @@ Directory | Description
--------- | -----------
`assets/` | Contains images and other files uploaded via the SilverStripe CMS. You can also place your own content inside it, and link to it from within the content area of the CMS.
`cms/` | Contains all the files that form the CMS area of your site. Its structure is similiar to the mysite/ directory, so if you find something interesting, it should be easy enough to look inside and see how it was built.
`sapphire/` | The framework that builds both your own site and as the CMS that powers it. Youll be utilizing files in this directory often, both directly and indirectly.
`framework/` | The framework that builds both your own site and as the CMS that powers it. Youll be utilizing files in this directory often, both directly and indirectly.
## Custom Code Structure

View File

@ -23,7 +23,7 @@ by stripping HTML markup, or transforming it where possible
$email->send();
The default HTML template is located in `sapphire/templates/email/GenericEmail.ss`.
The default HTML template is located in `framework/templates/email/GenericEmail.ss`.
### Sending Plaintext only
@ -118,4 +118,4 @@ The [newsletter module](http://silverstripe.org/newsletter-module) provides a UI
## API Documentation
`[api:Email]`
`[api:Email]`

View File

@ -57,13 +57,13 @@ The mechanism by which the `_ss_environment.php` files work is quite simple. He
* At the beginning of SilverStripe's execution, the `_ss_environment.php` file is searched for, and if it is found, it's
included. SilverStripe looks in 3 places for the file:
* The site's base folder (ie, a sibling of sapphire, jsparty, and cms)
* The site's base folder (ie, a sibling of framework, jsparty, and cms)
* The parent of the base folder
* The grandparent of the base folder
* The `_ss_environment.php` file sets a number of "define()".
* "conf/ConfigureFromEnv.php" is included from within your `mysite/_config.php`. This file has a number of regular
configuration commands that use those defines as their arguments. If you are curious, open up
`sapphire/conf/ConfigureFromEnv.php` and see for yourself!
`framework/conf/ConfigureFromEnv.php` and see for yourself!
### An Example

View File

@ -2,7 +2,7 @@
## Introduction
Form is the base class of all forms in a sapphire application. Forms in your application can be created either by
Form is the base class of all forms in a SilverStripe application. Forms in your application can be created either by
instantiating the Form class itself, or by subclassing it.
## Instantiating a form
@ -254,7 +254,7 @@ which includes a container `<div>` as well as a `<label>` element (if applicable
You can also render each field without these structural elements through the `[Field()](api:FormField->Field())` method.
In order to influence the form rendering, overloading these two methods is a good start.
In addition, most form fields are rendered through SilverStripe templates, e.g. `TextareaField` is rendered via `sapphire/templates/forms/TextareaField.ss`.
In addition, most form fields are rendered through SilverStripe templates, e.g. `TextareaField` is rendered via `framework/templates/forms/TextareaField.ss`.
These templates can be overwritten globally by placing a template with the same name in your `mysite` directory,
or set on a form field instance via `[setTemplate()](api:FormField->setTemplate())` and `[setFieldHolderTemplate()](api:FormField->setFieldHolderTemplate())`.
@ -300,4 +300,4 @@ Adds a new text field called FavouriteColour next to the Content field in the CM
* `[api:Form]`
* `[api:FormField]`
* `[api:FieldList]`
* `[api:FormAction]`
* `[api:FormAction]`

View File

@ -260,7 +260,7 @@ If you want to run the text collector for just one module you can use the 'modul
Each module can have one language table per locale. These tables are just PHP files with array notations. By convention,
the files are stored in the /lang subfolder, and are named after their locale value, e.g. "en_US.php".
Example: sapphire/lang/en_US.php (extract)
Example: framework/lang/en_US.php (extract)
:::php
// ...
@ -273,7 +273,7 @@ Example: sapphire/lang/en_US.php (extract)
// ...
Translation table: sapphire/lang/de_DE.php (extract)
Translation table: framework/lang/de_DE.php (extract)
:::php
$lang['de_DE']['ImageUploader']['ATTACH'] = '%s anhängen';
@ -290,7 +290,7 @@ i18n in javascript works with mostly the same assumption as its PHP-equivalent.
Add the i18n library requirement to your code.
:::php
Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js");
Requirements::javascript(FRAMEWORK_DIR . "/javascript/i18n.js");
Each language has its own language table in a separate file. To save bandwidth, only two tables are actually loaded by

View File

@ -3,11 +3,11 @@
## Introduction
Creating a module is a good way to re-use abstract code and templates across multiple projects. SilverStripe already has
certain modules included, for example "sapphire" and "cms". These three modules are the core functionality and
certain modules included, for example "framework" and "cms". These three modules are the core functionality and
templating for any initial installation. If you're wanting to add generic functionality that isn't specific to your
project, like a forum, an ecommerce package or a blog you can do it like this;
1. Create another directory at the root level (same level as "sapphire" and "cms")
1. Create another directory at the root level (same level as "framework" and "cms")
2. You must create an _config.php inside your module directory, else SilverStripe will not include it
3. Inside your module directory, follow our [directory structure guidelines](/topics/directory-structure#module_structure)
@ -55,4 +55,4 @@ adherence to conventions, writing documentation, and releasing updates. See [con
* [Module Release Process](module-release-process)
* [Debugging methods](/topics/debugging)
* [URL Variable Tools](/reference/urlvariabletools) - Lists a number of <20><><EFBFBD>page options<6E><73><EFBFBD> , <20><><EFBFBD>rendering tools<6C><73><EFBFBD> or <20><><EFBFBD>special
URL variables<65><73><EFBFBD> that you can use to debug your sapphire applications
URL variables<65><73><EFBFBD> that you can use to debug your SilverStripe applications

View File

@ -1,12 +1,12 @@
# Modules
Sapphire is designed to be a modular application system - even the CMS is simply a module that plugs into it.
SilverStripe is designed to be a modular application system - even the CMS is simply a module that plugs into it.
A module is, quite simply, a collection of classes, templates, and other resources that is loaded into a top-level
directory. In a default SilverStripe download, even resources in 'sapphire' and 'mysite' are treated in exactly the
directory. In a default SilverStripe download, even resources in 'framework' and 'mysite' are treated in exactly the
same as every other module.
Sapphire's `[api:ManifestBuilder]` will find any class, css or template files anywhere under the site's main
SilverStripe's `[api:ManifestBuilder]` will find any class, css or template files anywhere under the site's main
directory. The _config.php file in the module directory can be used to define director rules, calls to
Object::useCustomClass(), and the like. So, by unpacking a module into site's main directory and viewing the site with
?flush=1 on the end of the URL, all the module's new behaviour will be incorporated to your site:
@ -40,7 +40,7 @@ instead make it easier for developers to build other applications.
## Installation
Modules should exist in the root folder of your SilverStripe. The root folder being the one that contains the
*sapphire*, *cms* and other folders.
*framework*, *cms* and other folders.
The following article explains the generic installation of a module. Individual modules have their own requirements such
as creating folders or configuring API keys. For information about installing or configuring a specific module see the
@ -90,4 +90,4 @@ Exit the editor and then run
**Useful Links:**
* [Modules](module-developement)
* [Module Release Process](module-release-process)
* [Module Release Process](module-release-process)

View File

@ -1,4 +1,4 @@
# How To Create a Sapphire Test
# How To Create a SilverStripe Test
A unit test class will test the behaviour of one of your `[api:DataObjects]`. This simple fragment of `[api:SiteTreeTest]`
provides us the basics of creating unit tests.
@ -15,7 +15,7 @@ provides us the basics of creating unit tests.
* Define the fixture file to use for this test class
*/
static $fixture_file = 'sapphire/tests/SiteTreeTest.yml';
static $fixture_file = 'SiteTreeTest.yml';
/**

View File

@ -1,8 +1,8 @@
# Unit and Integration Testing
The Sapphire core contains various features designed to simplify the process of creating and managing automated tests.
The SilverStripe core contains various features designed to simplify the process of creating and managing automated tests.
* [Create a unit test](create-sapphire-test): Writing tests to check core data objects
* [Create a unit test](create-silverstripe-test): Writing tests to check core data objects
* [Creating a functional test](create-functional-test): An overview of functional tests and how to write a functional test
* [Email Sending](email-sending): An overview of the built-in email testing code
* [Troubleshooting](testing-guide-troubleshooting): Frequently asked questions list for testing issues
@ -27,7 +27,7 @@ To get started now, follow the installation instructions below, and check
The framework has a required dependency on [PHPUnit](http://www.phpunit.de/) and an optional dependency on
[SimpleTest](http://simpletest.org/), the two premiere PHP testing frameworks.
To run Sapphire tests, you'll need to be able to access PHPUnit on your include path. First, you'll need to make sure
To run SilverStripe tests, you'll need to be able to access PHPUnit on your include path. First, you'll need to make sure
that you have the PEAR command line client installed. To test this out, type `pear help` at your prompt. You should
see a bunch of generic PEAR info. If it's not installed, you'll need to set it up first (see: [Getting Started with
PEAR](http://www.sitepoint.com/article/getting-started-with-pear/)) or else manually install PHPUnit (see: [Installation
@ -55,7 +55,7 @@ their own:
### Via Command Line
`cd` to the root level of your project and run [sake](/topics/commandline) (Sapphire Make) to execute the tests:
`cd` to the root level of your project and run [sake](/topics/commandline) (SilverStripe Make) to execute the tests:
/path/to/project$ sake dev/tests/all
@ -68,7 +68,7 @@ Run specific tests:
dev/tests/MyTest,MyOtherTest
Run all tests in a module folder, e.g. "sapphire"
Run all tests in a module folder, e.g. "framework"
dev/tests/module/<modulename>
@ -85,7 +85,7 @@ Tests are written by creating subclasses of `[api:SapphireTest]`. You should pu
Generally speaking, there should be one test class for each application class. The name of the test class should be the
application class, with "Test" as a suffix. For instance, we have all the tests for `SiteTree` in
`sapphire/tests/SiteTreeTest.php`
`framework/tests/SiteTreeTest.php`
You will generally write two different kinds of test classes.
@ -96,9 +96,9 @@ Some people may note that we have used the same naming convention as Ruby on Rai
## How To
Tutorials and recipes for creating tests using the Sapphire framework:
Tutorials and recipes for creating tests using the SilverStripe framework:
* **[Create a Sapphire Test](/topics/testing/create-sapphire-test)**
* **[Create a SilverStripe Test](/topics/testing/create-silverstripe-test)**
* **Load Test Fixtures**
* **[Create a Functional Test](/topics/testing/create-functional-test)**
* **[Test Outgoing Email Sending](/topics/testing/email-sending)**
@ -150,4 +150,4 @@ is used in place of *Test Case*, and *should* is used in place of *expect* and *
## Feedback
If you have a topic you would like covered in these section please ask for it on our [Bug Tracker](http://open.silverstripe.org)
If you have a topic you would like covered in these section please ask for it on our [Bug Tracker](http://open.silverstripe.org)

View File

@ -50,13 +50,13 @@ To turn the key in the lock and answer this question, we need to look at how aut
aspects of the SilverStripe platform. There are some significant differences in goals and focus between different layers
of the system and interactions between the core, and various supporting modules.
### Sapphire Core
### SilverStripe Core
In open source core development, we are focussing on a large and (for the most part) stable system with existing well
defined behavior. Our overarching goal is that we do not want to break or change this existing behavior, but at the same
time we want to extend and improve it.
Testing the Sapphire framework should focus on [characterization](http://en.wikipedia.org/wiki/Characterization_Test).
Testing the SilverStripe framework should focus on [characterization](http://en.wikipedia.org/wiki/Characterization_Test).
We should be writing tests that illustrate the way that the API works, feeding commonly used methods with a range of
inputs and states and verifying that these methods respond with clear and predictable results.

View File

@ -114,8 +114,8 @@ An example widget is below:
static $description = "Shows flickr photos.";
public function Photos() {
Requirements::javascript("sapphire/thirdparty/prototype/prototype.js");
Requirements::javascript("sapphire/thirdparty/scriptaculous/effects.js");
Requirements::javascript(THIRDPARTY_DIR . "/prototype/prototype.js");
Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/effects.js");
Requirements::javascript("mashups/javascript/lightbox.js");
Requirements::css("mashups/css/lightbox.css");
@ -185,7 +185,7 @@ To render the widget, simply include $SilverStripeFeed in your template:
As directed in the definition of SilverStripeFeed(), the Widget will be rendered through the WidgetHolder template. This
is pre-defined at `/sapphire/templates/WidgetHolder.ss` and simply consists of:
is pre-defined at `framework/templates/WidgetHolder.ss` and simply consists of:
:::ss
<div class="WidgetHolder">
@ -312,7 +312,7 @@ For a widget to be put in our official widget database they must follow this con
#### File Structure for your widget
You should have a folder called widget_YourName in the top level (the one with sapphire, cms..) with all your files. See
You should have a folder called widget_YourName in the top level (the one with framework, cms..) with all your files. See
the example below. Your widget **MUST** have at least 1 Template file, 1 PHP file, the README File
[(Example)](http://open.silverstripe.com/browser/modules/widgets/twitter/trunk/README)and an _config.php file for
configuration. If you dont need any config options for the widget to work then you still need an _config.php by you can

View File

@ -38,7 +38,7 @@ Let's have a look at the folder structure.
| --------- | | ----------- |
| assets/ | | Contains images and other files uploaded via the SilverStripe CMS. You can also place your own content inside it, and link to it from within the content area of the CMS. |
| cms/ | | Contains all the files that form the CMS area of your site. Its structure is similiar to the mysite/ directory, so if you find something interesting, it should be easy enough to look inside and see how it was built. |
| sapphire/ | | The framework that builds both your own site and as the CMS that powers it. Youll be utilizing files in this directory often, both directly and indirectly. |
| framework/ | | The framework that builds both your own site and as the CMS that powers it. Youll be utilizing files in this directory often, both directly and indirectly. |
| mysite/ | | Contains all your sites code (mainly PHP and JavaScript) |
| themes/ | | Combines all images, stylesheets and templates powering your website into a reusable "theme" |
@ -477,4 +477,4 @@ things.
* [Official book on SilverStripe in English](http://www.silverstripe.org/silverstripe-book).
* [Official book on SilverStripe in German](http://www.silverstripe.org/das-silverstripe-buch).
![](_images/silverstripe-cms-book-front-cover-design-june2009preview.jpg)
![](_images/silverstripe-cms-book-front-cover-design-june2009preview.jpg)

View File

@ -28,16 +28,16 @@ To do this, we are gonna use the following objects :
This is a table which sums up the relations between them :
| Project | Student | Mentor | Modules |
| ------- | ------- | ------ | ------------------
| i18n Multi-Language | Bernat Foj Capell | Ingo Schommer | Cms, Sapphire, i18n, Translation |
| Image Manipulation | Mateusz Ujma | Sam Minnee | Cms, Sapphire, ImageManipulation |
| Google Maps | Ofir Picazo Navarro | Hayden Smith | Cms, Sapphire, Maps |
| Mashups | Lakshan Perera | Matt Peel | Cms, Sapphire, MashUps |
| Multiple Databases | Philipp Krenn | Brian Calhoun | Cms, Sapphire, MultipleDatabases |
| Reporting | Quin Hoxie | Sam Minnee | Cms, Sapphire, Reporting |
| Security & OpenID | Markus Lanthaler | Hayden Smith | Cms, Sapphire, auth_openid |
| SEO | Will Scott | Brian Calhoun | Cms, Sapphire, googleadwords, googleanalytics |
| Usability | Elijah Lofgren | Sean Harvey | Cms, Sapphire, UsabilityElijah |
| Safari 3 Support | Meg Risen | Sean Harvey | Cms, Sapphire, UsabilityMeg |
| i18n Multi-Language | Bernat Foj Capell | Ingo Schommer | Cms, Framework, i18n, Translation |
| Image Manipulation | Mateusz Ujma | Sam Minnee | Cms, Framework, ImageManipulation |
| Google Maps | Ofir Picazo Navarro | Hayden Smith | Cms, Framework, Maps |
| Mashups | Lakshan Perera | Matt Peel | Cms, Framework, MashUps |
| Multiple Databases | Philipp Krenn | Brian Calhoun | Cms, Framework, MultipleDatabases |
| Reporting | Quin Hoxie | Sam Minnee | Cms, Framework, Reporting |
| Security & OpenID | Markus Lanthaler | Hayden Smith | Cms, Framework, auth_openid |
| SEO | Will Scott | Brian Calhoun | Cms, Framework, googleadwords, googleanalytics |
| Usability | Elijah Lofgren | Sean Harvey | Cms, Framework, UsabilityElijah |
| Safari 3 Support | Meg Risen | Sean Harvey | Cms, Framework, UsabilityMeg |
## GSOC Projects
@ -770,6 +770,6 @@ CMS and how to display them on the website.
## Download the code
Download all the [code](http://doc.silverstripe.org/sapphire/docs/en/tutorials/_images/tutorial5-completecode.zip) for this tutorial.
Download all the [code](http://doc.silverstripe.org/framework/docs/en/tutorials/_images/tutorial5-completecode.zip) for this tutorial.
You can also download the [code](http://doc.silverstripe.org/sapphire/docs/en/tutorials/_images/tutorial5-completecode-blackcandy.zip) for use in the blackcandy template.
You can also download the [code](http://doc.silverstripe.org/framework/docs/en/tutorials/_images/tutorial5-completecode-blackcandy.zip) for use in the blackcandy template.