diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e984ef6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+web/bundles/
+app/bootstrap.php.cache
+app/cache/*
+app/logs/*
+build/
+vendor
+composer.phar
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..8d9c285
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,10 @@
+language: php
+
+php:
+ - 5.3.3
+ - 5.3
+ - 5.4
+
+before_script: composer install
+
+script: phpunit -c app
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..cdffe7a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2004-2012 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b70ed05
--- /dev/null
+++ b/README.md
@@ -0,0 +1,176 @@
+Symfony Standard Edition
+========================
+
+Welcome to the Symfony Standard Edition - a fully-functional Symfony2
+application that you can use as the skeleton for your new applications.
+
+This document contains information on how to download, install, and start
+using Symfony. For a more detailed explanation, see the [Installation][1]
+chapter of the Symfony Documentation.
+
+1) Installing the Standard Edition
+----------------------------------
+
+When it comes to installing the Symfony Standard Edition, you have the
+following options.
+
+### Use Composer (*recommended*)
+
+As Symfony uses [Composer][2] to manage its dependencies, the recommended way
+to create a new project is to use it.
+
+If you don't have Composer yet, download it following the instructions on
+http://getcomposer.org/ or just run the following command:
+
+ curl -s https://getcomposer.org/installer | php
+
+Then, use the `create-project` command to generate a new Symfony application:
+
+ php composer.phar create-project symfony/framework-standard-edition path/to/install 2.1.x-dev
+
+For an exact version, replace 2.1.x-dev with the latest Symfony version (e.g. 2.1.1).
+
+Composer will install Symfony and all its dependencies under the
+`path/to/install` directory.
+
+### Download an Archive File
+
+To quickly test Symfony, you can also download an [archive][3] of the Standard
+Edition and unpack it somewhere under your web server root directory.
+
+If you downloaded an archive "without vendors", you also need to install all
+the necessary dependencies. Download composer (see above) and run the
+following command:
+
+ php composer.phar install
+
+2) Checking your System Configuration
+-------------------------------------
+
+Before starting coding, make sure that your local system is properly
+configured for Symfony.
+
+Execute the `check.php` script from the command line:
+
+ php app/check.php
+
+Access the `config.php` script from a browser:
+
+ http://localhost/path/to/symfony/app/web/config.php
+
+If you get any warnings or recommendations, fix them before moving on.
+
+3) Browsing the Demo Application
+--------------------------------
+
+Congratulations! You're now ready to use Symfony.
+
+From the `config.php` page, click the "Bypass configuration and go to the
+Welcome page" link to load up your first Symfony page.
+
+You can also use a web-based configurator by clicking on the "Configure your
+Symfony Application online" link of the `config.php` page.
+
+To see a real-live Symfony page in action, access the following page:
+
+ web/app_dev.php/demo/hello/Fabien
+
+4) Getting started with Symfony
+-------------------------------
+
+This distribution is meant to be the starting point for your Symfony
+applications, but it also contains some sample code that you can learn from
+and play with.
+
+A great way to start learning Symfony is via the [Quick Tour][4], which will
+take you through all the basic features of Symfony2.
+
+Once you're feeling good, you can move onto reading the official
+[Symfony2 book][5].
+
+A default bundle, `AcmeDemoBundle`, shows you Symfony2 in action. After
+playing with it, you can remove it by following these steps:
+
+ * delete the `src/Acme` directory;
+
+ * remove the routing entries referencing AcmeBundle in
+ `app/config/routing_dev.yml`;
+
+ * remove the AcmeBundle from the registered bundles in `app/AppKernel.php`;
+
+ * remove the `web/bundles/acmedemo` directory;
+
+ * remove the `security.providers`, `security.firewalls.login` and
+ `security.firewalls.secured_area` entries in the `security.yml` file or
+ tweak the security configuration to fit your needs.
+
+What's inside?
+---------------
+
+The Symfony Standard Edition is configured with the following defaults:
+
+ * Twig is the only configured template engine;
+
+ * Doctrine ORM/DBAL is configured;
+
+ * Swiftmailer is configured;
+
+ * Annotations for everything are enabled.
+
+It comes pre-configured with the following bundles:
+
+ * **FrameworkBundle** - The core Symfony framework bundle
+
+ * [**SensioFrameworkExtraBundle**][6] - Adds several enhancements, including
+ template and routing annotation capability
+
+ * [**DoctrineBundle**][7] - Adds support for the Doctrine ORM
+
+ * [**TwigBundle**][8] - Adds support for the Twig templating engine
+
+ * [**SecurityBundle**][9] - Adds security by integrating Symfony's security
+ component
+
+ * [**SwiftmailerBundle**][10] - Adds support for Swiftmailer, a library for
+ sending emails
+
+ * [**MonologBundle**][11] - Adds support for Monolog, a logging library
+
+ * [**AsseticBundle**][12] - Adds support for Assetic, an asset processing
+ library
+
+ * [**JMSSecurityExtraBundle**][13] - Allows security to be added via
+ annotations
+
+ * [**JMSDiExtraBundle**][14] - Adds more powerful dependency injection
+ features
+
+ * **WebProfilerBundle** (in dev/test env) - Adds profiling functionality and
+ the web debug toolbar
+
+ * **SensioDistributionBundle** (in dev/test env) - Adds functionality for
+ configuring and working with Symfony distributions
+
+ * [**SensioGeneratorBundle**][15] (in dev/test env) - Adds code generation
+ capabilities
+
+ * **AcmeDemoBundle** (in dev/test env) - A demo bundle with some example
+ code
+
+Enjoy!
+
+[1]: http://symfony.com/doc/2.1/book/installation.html
+[2]: http://getcomposer.org/
+[3]: http://symfony.com/download
+[4]: http://symfony.com/doc/2.1/quick_tour/the_big_picture.html
+[5]: http://symfony.com/doc/2.1/index.html
+[6]: http://symfony.com/doc/2.1/bundles/SensioFrameworkExtraBundle/index.html
+[7]: http://symfony.com/doc/2.1/book/doctrine.html
+[8]: http://symfony.com/doc/2.1/book/templating.html
+[9]: http://symfony.com/doc/2.1/book/security.html
+[10]: http://symfony.com/doc/2.1/cookbook/email.html
+[11]: http://symfony.com/doc/2.1/cookbook/logging/monolog.html
+[12]: http://symfony.com/doc/2.1/cookbook/assetic/asset_management.html
+[13]: http://jmsyst.com/bundles/JMSSecurityExtraBundle/master
+[14]: http://jmsyst.com/bundles/JMSDiExtraBundle/master
+[15]: http://symfony.com/doc/2.1/bundles/SensioGeneratorBundle/index.html
diff --git a/UPGRADE.md b/UPGRADE.md
new file mode 100644
index 0000000..caa467a
--- /dev/null
+++ b/UPGRADE.md
@@ -0,0 +1,252 @@
+Symfony Standard Edition Upgrade
+================================
+
+From Symfony 2.0 to Symfony 2.1
+-------------------------------
+
+### Project Dependencies
+
+As of Symfony 2.1, project dependencies are managed by
+[Composer](http://getcomposer.org/):
+
+* The `bin/vendors` script can be removed as `composer.phar` does all the work
+ now (it is recommended to install it globally on your machine).
+
+* The `deps` file need to be replaced with the `composer.json` one.
+
+* The `composer.lock` is the equivalent of the generated `deps.lock` file and
+ it is automatically generated by Composer.
+
+Download the default
+[`composer.json`](https://raw.github.com/symfony/symfony-standard/master/composer.json)
+and
+[`composer.lock`](https://raw.github.com/symfony/symfony-standard/master/composer.lock)
+files for Symfony 2.1 and put them into the main directory of your project. If
+you have customized your `deps` file, move the added dependencies to the
+`composer.json` file (many bundles and PHP libraries are already available as
+Composer packages -- search for them on [Packagist](http://packagist.org/)).
+
+Remove your current `vendor` directory.
+
+Finally, run Composer:
+
+ $ composer.phar install
+
+### `app/autoload.php`
+
+The default `autoload.php` reads as follows (it has been simplified a lot as
+autoloading for libraries and bundles declared in your `composer.json` file is
+automatically managed by the Composer autoloader):
+
+ add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
+ }
+
+ AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
+
+ return $loader;
+
+### `app/config/config.yml`
+
+The `framework.charset` setting must be removed. If you are not using `UTF-8`
+for your application, override the `getCharset()` method in your `AppKernel`
+class instead:
+
+ class AppKernel extends Kernel
+ {
+ public function getCharset()
+ {
+ return 'ISO-8859-1';
+ }
+
+ // ...
+ }
+
+You might want to add the new `strict_requirements` parameter to
+`framework.router` (it avoids fatal errors in the production environment when
+a link cannot be generated):
+
+ framework:
+ router:
+ strict_requirements: "%kernel.debug%"
+
+The `default_locale` parameter is now a setting of the main `framework`
+configuration (it was under the `framework.session` in 2.0):
+
+ framework:
+ default_locale: "%locale%"
+
+The `auto_start` setting under `framework.session` must be removed as it is
+not used anymore (the session is now always started on-demand). If
+`auto_start` was the only setting under the `framework.session` entry, don't
+remove it entirely, but set its value to `~` (`~` means `null` in YAML)
+instead:
+
+ framework:
+ session: ~
+
+The `trust_proxy_headers` setting was added in the default configuration file
+(as it should be set to `true` when you install your application behind a
+reverse proxy):
+
+ framework:
+ trust_proxy_headers: false
+
+An empty `bundles` entry was added to the `assetic` configuration:
+
+ assetic:
+ bundles: []
+
+The default `swiftmailer` configuration now has the `spool` setting configured
+to the `memory` type to defer email sending after the response is sent to the
+user (recommended for better end-user performance):
+
+ swiftmailer:
+ spool: { type: memory }
+
+The `jms_security_extra` configuration was moved to the `security.yml`
+configuration file.
+
+### `app/config/config_dev.yml`
+
+An example of how to send all emails to a unique address was added:
+
+ #swiftmailer:
+ # delivery_address: me@example.com
+
+### `app/config/config_test.yml`
+
+The `storage_id` setting must be changed to `session.storage.mock_file`:
+
+ framework:
+ session:
+ storage_id: session.storage.mock_file
+
+### `app/config/parameters.ini`
+
+The file has been converted to a YAML file which reads as follows:
+
+ parameters:
+ database_driver: pdo_mysql
+ database_host: localhost
+ database_port: ~
+ database_name: symfony
+ database_user: root
+ database_password: ~
+
+ mailer_transport: smtp
+ mailer_host: localhost
+ mailer_user: ~
+ mailer_password: ~
+
+ locale: en
+ secret: ThisTokenIsNotSoSecretChangeIt
+
+Note that if you convert your parameters file to YAML, you must also change
+its reference in `app/config/config.yml`.
+
+### `app/config/routing_dev.yml`
+
+The `_assetic` entry was removed:
+
+ #_assetic:
+ # resource: .
+ # type: assetic
+
+### `app/config/security.yml`
+
+Under `security.access_control`, the default rule for internal routes was changed:
+
+ security:
+ access_control:
+ #- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
+
+Under `security.providers`, the `in_memory` example was updated to the following:
+
+ security:
+ providers:
+ in_memory:
+ memory:
+ users:
+ user: { password: userpass, roles: [ 'ROLE_USER' ] }
+ admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
+
+### `app/AppKernel.php`
+
+The following bundles have been added to the list of default registered bundles:
+
+ new JMS\AopBundle\JMSAopBundle(),
+ new JMS\DiExtraBundle\JMSDiExtraBundle($this),
+
+### `web/app.php`
+
+The default `web/app.php` file now reads as follows:
+
+ register(true);
+ */
+
+ require_once __DIR__.'/../app/AppKernel.php';
+ //require_once __DIR__.'/../app/AppCache.php';
+
+ $kernel = new AppKernel('prod', false);
+ $kernel->loadClassCache();
+ //$kernel = new AppCache($kernel);
+ $request = Request::createFromGlobals();
+ $response = $kernel->handle($request);
+ $response->send();
+ $kernel->terminate($request, $response);
+
+### `web/app_dev.php`
+
+The default `web/app_dev.php` file now reads as follows:
+
+ loadClassCache();
+ $request = Request::createFromGlobals();
+ $response = $kernel->handle($request);
+ $response->send();
+ $kernel->terminate($request, $response);
diff --git a/app/.htaccess b/app/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/app/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/app/AppCache.php b/app/AppCache.php
new file mode 100644
index 0000000..ddb51db
--- /dev/null
+++ b/app/AppCache.php
@@ -0,0 +1,9 @@
+getEnvironment(), array('dev', 'test'))) {
+ $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
+ $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
+ $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
+ $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
+ }
+
+ return $bundles;
+ }
+
+ public function registerContainerConfiguration(LoaderInterface $loader)
+ {
+ $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
+ }
+}
diff --git a/app/Resources/views/base.html.twig b/app/Resources/views/base.html.twig
new file mode 100644
index 0000000..bafd28d
--- /dev/null
+++ b/app/Resources/views/base.html.twig
@@ -0,0 +1,13 @@
+
+
+
+
+ {% block title %}Welcome!{% endblock %}
+ {% block stylesheets %}{% endblock %}
+
+
+
+ {% block body %}{% endblock %}
+ {% block javascripts %}{% endblock %}
+
+
diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php
new file mode 100644
index 0000000..4df46d1
--- /dev/null
+++ b/app/SymfonyRequirements.php
@@ -0,0 +1,638 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/*
+ * Users of PHP 5.2 should be able to run the requirements checks.
+ * This is why the file and all classes must be compatible with PHP 5.2+
+ * (e.g. not using namespaces and closures).
+ *
+ * ************** CAUTION **************
+ *
+ * DO NOT EDIT THIS FILE as it will be overriden by Composer as part of
+ * the installation/update process. The original file resides in the
+ * SensioDistributionBundle.
+ *
+ * ************** CAUTION **************
+ */
+
+/**
+ * Represents a single PHP requirement, e.g. an installed extension.
+ * It can be a mandatory requirement or an optional recommendation.
+ * There is a special subclass, named PhpIniRequirement, to check a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class Requirement
+{
+ private $fulfilled;
+ private $testMessage;
+ private $helpText;
+ private $helpHtml;
+ private $optional;
+
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param Boolean $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
+ {
+ $this->fulfilled = (Boolean) $fulfilled;
+ $this->testMessage = (string) $testMessage;
+ $this->helpHtml = (string) $helpHtml;
+ $this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
+ $this->optional = (Boolean) $optional;
+ }
+
+ /**
+ * Returns whether the requirement is fulfilled.
+ *
+ * @return Boolean true if fulfilled, otherwise false
+ */
+ public function isFulfilled()
+ {
+ return $this->fulfilled;
+ }
+
+ /**
+ * Returns the message for testing the requirement.
+ *
+ * @return string The test message
+ */
+ public function getTestMessage()
+ {
+ return $this->testMessage;
+ }
+
+ /**
+ * Returns the help text for resolving the problem
+ *
+ * @return string The help text
+ */
+ public function getHelpText()
+ {
+ return $this->helpText;
+ }
+
+ /**
+ * Returns the help text formatted in HTML.
+ *
+ * @return string The HTML help
+ */
+ public function getHelpHtml()
+ {
+ return $this->helpHtml;
+ }
+
+ /**
+ * Returns whether this is only an optional recommendation and not a mandatory requirement.
+ *
+ * @return Boolean true if optional, false if mandatory
+ */
+ public function isOptional()
+ {
+ return $this->optional;
+ }
+}
+
+/**
+ * Represents a PHP requirement in form of a php.ini configuration.
+ *
+ * @author Tobias Schultze
+ */
+class PhpIniRequirement extends Requirement
+{
+ /**
+ * Constructor that initializes the requirement.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ * @param Boolean $optional Whether this is only an optional recommendation not a mandatory requirement
+ */
+ public function __construct($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null, $optional = false)
+ {
+ $cfgValue = ini_get($cfgName);
+
+ if (is_callable($evaluation)) {
+ if (null === $testMessage || null === $helpHtml) {
+ throw new InvalidArgumentException('You must provide the parameters testMessage and helpHtml for a callback evaluation.');
+ }
+
+ $fulfilled = call_user_func($evaluation, $cfgValue);
+ } else {
+ if (null === $testMessage) {
+ $testMessage = sprintf('%s %s be %s in php.ini',
+ $cfgName,
+ $optional ? 'should' : 'must',
+ $evaluation ? 'enabled' : 'disabled'
+ );
+ }
+
+ if (null === $helpHtml) {
+ $helpHtml = sprintf('Set %s to %s in php.ini*.',
+ $cfgName,
+ $evaluation ? 'on' : 'off'
+ );
+ }
+
+ $fulfilled = $evaluation == $cfgValue;
+ }
+
+ parent::__construct($fulfilled || ($approveCfgAbsence && false === $cfgValue), $testMessage, $helpHtml, $helpText, $optional);
+ }
+}
+
+/**
+ * A RequirementCollection represents a set of Requirement instances.
+ *
+ * @author Tobias Schultze
+ */
+class RequirementCollection implements IteratorAggregate
+{
+ private $requirements = array();
+
+ /**
+ * Gets the current RequirementCollection as an Iterator.
+ *
+ * @return Traversable A Traversable interface
+ */
+ public function getIterator()
+ {
+ return new ArrayIterator($this->requirements);
+ }
+
+ /**
+ * Adds a Requirement.
+ *
+ * @param Requirement $requirement A Requirement instance
+ */
+ public function add(Requirement $requirement)
+ {
+ $this->requirements[] = $requirement;
+ }
+
+ /**
+ * Adds a mandatory requirement.
+ *
+ * @param Boolean $fulfilled Whether the requirement is fulfilled
+ * @param string $testMessage The message for testing the requirement
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRequirement($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation.
+ *
+ * @param Boolean $fulfilled Whether the recommendation is fulfilled
+ * @param string $testMessage The message for testing the recommendation
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText = null)
+ {
+ $this->add(new Requirement($fulfilled, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a mandatory requirement in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, false));
+ }
+
+ /**
+ * Adds an optional recommendation in form of a php.ini configuration.
+ *
+ * @param string $cfgName The configuration name used for ini_get()
+ * @param Boolean|callback $evaluation Either a Boolean indicating whether the configuration should evaluate to true or false,
+ or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement
+ * @param Boolean $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false.
+ This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin.
+ Example: You require a config to be true but PHP later removes this config and defaults it to true internally.
+ * @param string $testMessage The message for testing the requirement (when null and $evaluation is a Boolean a default message is derived)
+ * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a Boolean a default help is derived)
+ * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
+ */
+ public function addPhpIniRecommendation($cfgName, $evaluation, $approveCfgAbsence = false, $testMessage = null, $helpHtml = null, $helpText = null)
+ {
+ $this->add(new PhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence, $testMessage, $helpHtml, $helpText, true));
+ }
+
+ /**
+ * Adds a requirement collection to the current set of requirements.
+ *
+ * @param RequirementCollection $collection A RequirementCollection instance
+ */
+ public function addCollection(RequirementCollection $collection)
+ {
+ $this->requirements = array_merge($this->requirements, $collection->all());
+ }
+
+ /**
+ * Returns both requirements and recommendations.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function all()
+ {
+ return $this->requirements;
+ }
+
+ /**
+ * Returns all mandatory requirements.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the mandatory requirements that were not met.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getFailedRequirements()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && !$req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns all optional recommmendations.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if ($req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns the recommendations that were not met.
+ *
+ * @return array Array of Requirement instances
+ */
+ public function getFailedRecommendations()
+ {
+ $array = array();
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req->isOptional()) {
+ $array[] = $req;
+ }
+ }
+
+ return $array;
+ }
+
+ /**
+ * Returns whether a php.ini configuration is not correct.
+ *
+ * @return Boolean php.ini configuration problem?
+ */
+ public function hasPhpIniConfigIssue()
+ {
+ foreach ($this->requirements as $req) {
+ if (!$req->isFulfilled() && $req instanceof PhpIniRequirement) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the PHP configuration file (php.ini) path.
+ *
+ * @return string|false php.ini file path
+ */
+ public function getPhpIniConfigPath()
+ {
+ return get_cfg_var('cfg_file_path');
+ }
+}
+
+/**
+ * This class specifies all requirements and optional recommendations that
+ * are necessary to run the Symfony Standard Edition.
+ *
+ * @author Tobias Schultze
+ * @author Fabien Potencier
+ */
+class SymfonyRequirements extends RequirementCollection
+{
+ const REQUIRED_PHP_VERSION = '5.3.3';
+
+ /**
+ * Constructor that initializes the requirements.
+ */
+ public function __construct()
+ {
+ /* mandatory requirements follow */
+
+ $installedPhpVersion = phpversion();
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='),
+ sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion),
+ sprintf('You are running PHP version "%s", but Symfony needs at least PHP "%s" to run.
+ Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
+ $installedPhpVersion, self::REQUIRED_PHP_VERSION),
+ sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion)
+ );
+
+ $this->addRequirement(
+ version_compare($installedPhpVersion, '5.3.16', '!='),
+ 'PHP version must not be 5.3.16 as Symfony won\'t work properly with it',
+ 'Install PHP 5.3.17 or newer (or downgrade to an earlier PHP version)'
+ );
+
+ $this->addRequirement(
+ is_dir(__DIR__.'/../vendor/composer'),
+ 'Vendor libraries must be installed',
+ 'Vendor libraries are missing. Install composer following instructions from http://getcomposer.org/. ' .
+ 'Then run "php composer.phar install" to install them.'
+ );
+
+ $baseDir = basename(__DIR__);
+
+ $this->addRequirement(
+ is_writable(__DIR__.'/cache'),
+ "$baseDir/cache/ directory must be writable",
+ "Change the permissions of the \"$baseDir/cache/\" directory so that the web server can write into it."
+ );
+
+ $this->addRequirement(
+ is_writable(__DIR__.'/logs'),
+ "$baseDir/logs/ directory must be writable",
+ "Change the permissions of the \"$baseDir/logs/\" directory so that the web server can write into it."
+ );
+
+ $this->addPhpIniRequirement(
+ 'date.timezone', true, false,
+ 'date.timezone setting must be set',
+ 'Set the "date.timezone" setting in php.ini* (like Europe/Paris).'
+ );
+
+ if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) {
+ $this->addRequirement(
+ (in_array(date_default_timezone_get(), DateTimeZone::listIdentifiers())),
+ sprintf('Configured default timezone "%s" must be supported by your installation of PHP', date_default_timezone_get()),
+ 'Your default timezone is not supported by PHP. Check for typos in your php.ini file and have a look at the list of deprecated timezones at http://php.net/manual/en/timezones.others.php.'
+ );
+ }
+
+ $this->addRequirement(
+ function_exists('json_encode'),
+ 'json_encode() must be available',
+ 'Install and enable the JSON extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('session_start'),
+ 'session_start() must be available',
+ 'Install and enable the session extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('ctype_alpha'),
+ 'ctype_alpha() must be available',
+ 'Install and enable the ctype extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('token_get_all'),
+ 'token_get_all() must be available',
+ 'Install and enable the Tokenizer extension.'
+ );
+
+ $this->addRequirement(
+ function_exists('simplexml_import_dom'),
+ 'simplexml_import_dom() must be available',
+ 'Install and enable the SimpleXML extension.'
+ );
+
+ if (function_exists('apc_store') && ini_get('apc.enabled')) {
+ $this->addRequirement(
+ version_compare(phpversion('apc'), '3.0.17', '>='),
+ 'APC version must be at least 3.0.17',
+ 'Upgrade your APC extension (3.0.17+).'
+ );
+ }
+
+ $this->addPhpIniRequirement('detect_unicode', false);
+
+ if (extension_loaded('suhosin')) {
+ $this->addPhpIniRequirement(
+ 'suhosin.executor.include.whitelist',
+ create_function('$cfgValue', 'return false !== stripos($cfgValue, "phar");'),
+ false,
+ 'suhosin.executor.include.whitelist must be configured correctly in php.ini',
+ 'Add "phar" to suhosin.executor.include.whitelist in php.ini*.'
+ );
+ }
+
+ if (extension_loaded('xdebug')) {
+ $this->addPhpIniRequirement(
+ 'xdebug.show_exception_trace', false, true
+ );
+
+ $this->addPhpIniRequirement(
+ 'xdebug.scream', false, true
+ );
+ }
+
+ $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
+
+ $this->addRequirement(
+ null !== $pcreVersion && $pcreVersion > 8.0,
+ sprintf('PCRE extension must be available and at least 8.0 (%s installed)', $pcreVersion ? $pcreVersion : 'not'),
+ 'Upgrade your PCRE extension (8.0+).'
+ );
+
+ /* optional recommendations follow */
+
+ $this->addRecommendation(
+ file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'),
+ 'Requirements file should be up-to-date',
+ 'Your requirements file is outdated. Run composer install and re-check your configuration.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.4', '>='),
+ 'You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions',
+ 'Your project might malfunction randomly due to PHP bug #52083 ("Notice: Trying to get property of non-object"). Install PHP 5.3.4 or newer.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.3.8', '>='),
+ 'When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156',
+ 'Install PHP 5.3.8 or newer if your project uses annotations.'
+ );
+
+ $this->addRecommendation(
+ version_compare($installedPhpVersion, '5.4.0', '!='),
+ 'You should not use PHP 5.4.0 due to the PHP bug #61453',
+ 'Your project might not work properly due to the PHP bug #61453 ("Cannot dump definitions which have method calls"). Install PHP 5.4.1 or newer.'
+ );
+
+ $this->addRecommendation(
+ class_exists('DomDocument'),
+ 'PHP-XML module should be installed',
+ 'Install and enable the PHP-XML module.'
+ );
+
+ $this->addRecommendation(
+ function_exists('mb_strlen'),
+ 'mb_strlen() should be available',
+ 'Install and enable the mbstring extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('iconv'),
+ 'iconv() should be available',
+ 'Install and enable the iconv extension.'
+ );
+
+ $this->addRecommendation(
+ function_exists('utf8_decode'),
+ 'utf8_decode() should be available',
+ 'Install and enable the XML extension.'
+ );
+
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+ $this->addRecommendation(
+ function_exists('posix_isatty'),
+ 'posix_isatty() should be available',
+ 'Install and enable the php_posix extension (used to colorize the CLI output).'
+ );
+ }
+
+ $this->addRecommendation(
+ class_exists('Locale'),
+ 'intl extension should be available',
+ 'Install and enable the intl extension (used for validators).'
+ );
+
+ if (class_exists('Collator')) {
+ $this->addRecommendation(
+ null !== new Collator('fr_FR'),
+ 'intl extension should be correctly configured',
+ 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.'
+ );
+ }
+
+ if (class_exists('Locale')) {
+ if (defined('INTL_ICU_VERSION')) {
+ $version = INTL_ICU_VERSION;
+ } else {
+ $reflector = new ReflectionExtension('intl');
+
+ ob_start();
+ $reflector->info();
+ $output = strip_tags(ob_get_clean());
+
+ preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
+ $version = $matches[1];
+ }
+
+ $this->addRecommendation(
+ version_compare($version, '4.0', '>='),
+ 'intl ICU version should be at least 4+',
+ 'Upgrade your intl extension with a newer ICU version (4+).'
+ );
+ }
+
+ $accelerator =
+ (function_exists('apc_store') && ini_get('apc.enabled'))
+ ||
+ function_exists('eaccelerator_put') && ini_get('eaccelerator.enable')
+ ||
+ function_exists('xcache_set')
+ ;
+
+ $this->addRecommendation(
+ $accelerator,
+ 'a PHP accelerator should be installed',
+ 'Install and enable a PHP accelerator like APC (highly recommended).'
+ );
+
+ $this->addPhpIniRecommendation('short_open_tag', false);
+
+ $this->addPhpIniRecommendation('magic_quotes_gpc', false, true);
+
+ $this->addPhpIniRecommendation('register_globals', false, true);
+
+ $this->addPhpIniRecommendation('session.auto_start', false);
+
+ $this->addRecommendation(
+ class_exists('PDO'),
+ 'PDO should be installed',
+ 'Install PDO (mandatory for Doctrine).'
+ );
+
+ if (class_exists('PDO')) {
+ $drivers = PDO::getAvailableDrivers();
+ $this->addRecommendation(
+ count($drivers),
+ sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
+ 'Install PDO drivers (mandatory for Doctrine).'
+ );
+ }
+ }
+}
diff --git a/app/autoload.php b/app/autoload.php
new file mode 100644
index 0000000..a68e37f
--- /dev/null
+++ b/app/autoload.php
@@ -0,0 +1,16 @@
+add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
+}
+
+AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
+
+return $loader;
diff --git a/app/check.php b/app/check.php
new file mode 100644
index 0000000..daa6d0a
--- /dev/null
+++ b/app/check.php
@@ -0,0 +1,55 @@
+getPhpIniConfigPath();
+
+echo "********************************\n";
+echo "* *\n";
+echo "* Symfony requirements check *\n";
+echo "* *\n";
+echo "********************************\n\n";
+
+echo $iniPath ? sprintf("* Configuration file used by PHP: %s\n\n", $iniPath) : "* WARNING: No configuration file (php.ini) used by PHP!\n\n";
+
+echo "** ATTENTION **\n";
+echo "* The PHP CLI can use a different php.ini file\n";
+echo "* than the one used with your web server.\n";
+if ('\\' == DIRECTORY_SEPARATOR) {
+ echo "* (especially on the Windows platform)\n";
+}
+echo "* To be on the safe side, please also launch the requirements check\n";
+echo "* from your web server using the web/config.php script.\n";
+
+echo_title('Mandatory requirements');
+
+foreach ($symfonyRequirements->getRequirements() as $req) {
+ echo_requirement($req);
+}
+
+echo_title('Optional recommendations');
+
+foreach ($symfonyRequirements->getRecommendations() as $req) {
+ echo_requirement($req);
+}
+
+/**
+ * Prints a Requirement instance
+ */
+function echo_requirement(Requirement $requirement)
+{
+ $result = $requirement->isFulfilled() ? 'OK' : ($requirement->isOptional() ? 'WARNING' : 'ERROR');
+ echo ' ' . str_pad($result, 9);
+ echo $requirement->getTestMessage() . "\n";
+
+ if (!$requirement->isFulfilled()) {
+ echo sprintf(" %s\n\n", $requirement->getHelpText());
+ }
+}
+
+function echo_title($title)
+{
+ echo "\n** $title **\n\n";
+}
diff --git a/app/config/config.yml b/app/config/config.yml
new file mode 100644
index 0000000..6859cea
--- /dev/null
+++ b/app/config/config.yml
@@ -0,0 +1,59 @@
+imports:
+ - { resource: parameters.yml }
+ - { resource: security.yml }
+
+framework:
+ #esi: ~
+ #translator: { fallback: "%locale%" }
+ secret: "%secret%"
+ router:
+ resource: "%kernel.root_dir%/config/routing.yml"
+ strict_requirements: "%kernel.debug%"
+ form: true
+ csrf_protection: true
+ validation: { enable_annotations: true }
+ templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
+ default_locale: "%locale%"
+ trust_proxy_headers: false # Whether or not the Request object should trust proxy headers (X_FORWARDED_FOR/HTTP_CLIENT_IP)
+ session: ~
+
+# Twig Configuration
+twig:
+ debug: "%kernel.debug%"
+ strict_variables: "%kernel.debug%"
+
+# Assetic Configuration
+assetic:
+ debug: "%kernel.debug%"
+ use_controller: false
+ bundles: [ ]
+ #java: /usr/bin/java
+ filters:
+ cssrewrite: ~
+ #closure:
+ # jar: "%kernel.root_dir%/Resources/java/compiler.jar"
+ #yui_css:
+ # jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
+
+# Doctrine Configuration
+doctrine:
+ dbal:
+ driver: "%database_driver%"
+ host: "%database_host%"
+ port: "%database_port%"
+ dbname: "%database_name%"
+ user: "%database_user%"
+ password: "%database_password%"
+ charset: UTF8
+
+ orm:
+ auto_generate_proxy_classes: "%kernel.debug%"
+ auto_mapping: true
+
+# Swiftmailer Configuration
+swiftmailer:
+ transport: "%mailer_transport%"
+ host: "%mailer_host%"
+ username: "%mailer_user%"
+ password: "%mailer_password%"
+ spool: { type: memory }
diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml
new file mode 100644
index 0000000..8dbf07b
--- /dev/null
+++ b/app/config/config_dev.yml
@@ -0,0 +1,26 @@
+imports:
+ - { resource: config.yml }
+
+framework:
+ router: { resource: "%kernel.root_dir%/config/routing_dev.yml" }
+ profiler: { only_exceptions: false }
+
+web_profiler:
+ toolbar: true
+ intercept_redirects: false
+
+monolog:
+ handlers:
+ main:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
+ firephp:
+ type: firephp
+ level: info
+
+assetic:
+ use_controller: true
+
+#swiftmailer:
+# delivery_address: me@example.com
diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml
new file mode 100644
index 0000000..332a137
--- /dev/null
+++ b/app/config/config_prod.yml
@@ -0,0 +1,19 @@
+imports:
+ - { resource: config.yml }
+
+#doctrine:
+# orm:
+# metadata_cache_driver: apc
+# result_cache_driver: apc
+# query_cache_driver: apc
+
+monolog:
+ handlers:
+ main:
+ type: fingers_crossed
+ action_level: error
+ handler: nested
+ nested:
+ type: stream
+ path: "%kernel.logs_dir%/%kernel.environment%.log"
+ level: debug
diff --git a/app/config/config_test.yml b/app/config/config_test.yml
new file mode 100644
index 0000000..e7f44e5
--- /dev/null
+++ b/app/config/config_test.yml
@@ -0,0 +1,14 @@
+imports:
+ - { resource: config_dev.yml }
+
+framework:
+ test: ~
+ session:
+ storage_id: session.storage.mock_file
+
+web_profiler:
+ toolbar: false
+ intercept_redirects: false
+
+swiftmailer:
+ disable_delivery: true
diff --git a/app/config/parameters.yml b/app/config/parameters.yml
new file mode 100644
index 0000000..6f0c6ee
--- /dev/null
+++ b/app/config/parameters.yml
@@ -0,0 +1,15 @@
+parameters:
+ database_driver: pdo_mysql
+ database_host: localhost
+ database_port: ~
+ database_name: symfony
+ database_user: root
+ database_password: ~
+
+ mailer_transport: smtp
+ mailer_host: localhost
+ mailer_user: ~
+ mailer_password: ~
+
+ locale: en
+ secret: ThisTokenIsNotSoSecretChangeIt
diff --git a/app/config/routing.yml b/app/config/routing.yml
new file mode 100644
index 0000000..684d364
--- /dev/null
+++ b/app/config/routing.yml
@@ -0,0 +1,4 @@
+# Internal routing configuration to handle ESI
+#_internal:
+# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
+# prefix: /_internal
diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml
new file mode 100644
index 0000000..22a48ae
--- /dev/null
+++ b/app/config/routing_dev.yml
@@ -0,0 +1,27 @@
+_welcome:
+ pattern: /
+ defaults: { _controller: AcmeDemoBundle:Welcome:index }
+
+_demo_secured:
+ resource: "@AcmeDemoBundle/Controller/SecuredController.php"
+ type: annotation
+
+_demo:
+ resource: "@AcmeDemoBundle/Controller/DemoController.php"
+ type: annotation
+ prefix: /demo
+
+_wdt:
+ resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
+ prefix: /_wdt
+
+_profiler:
+ resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
+ prefix: /_profiler
+
+_configurator:
+ resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
+ prefix: /_configurator
+
+_main:
+ resource: routing.yml
diff --git a/app/config/security.yml b/app/config/security.yml
new file mode 100644
index 0000000..e01c1c2
--- /dev/null
+++ b/app/config/security.yml
@@ -0,0 +1,43 @@
+jms_security_extra:
+ secure_all_services: false
+ expressions: true
+
+security:
+ encoders:
+ Symfony\Component\Security\Core\User\User: plaintext
+
+ role_hierarchy:
+ ROLE_ADMIN: ROLE_USER
+ ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
+
+ providers:
+ in_memory:
+ memory:
+ users:
+ user: { password: userpass, roles: [ 'ROLE_USER' ] }
+ admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
+
+ firewalls:
+ dev:
+ pattern: ^/(_(profiler|wdt)|css|images|js)/
+ security: false
+
+ login:
+ pattern: ^/demo/secured/login$
+ security: false
+
+ secured_area:
+ pattern: ^/demo/secured/
+ form_login:
+ check_path: /demo/secured/login_check
+ login_path: /demo/secured/login
+ logout:
+ path: /demo/secured/logout
+ target: /demo/
+ #anonymous: ~
+ #http_basic:
+ # realm: "Secured Demo Area"
+
+ access_control:
+ #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
+ #- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
diff --git a/app/console b/app/console
new file mode 100644
index 0000000..1de6db4
--- /dev/null
+++ b/app/console
@@ -0,0 +1,22 @@
+#!/usr/bin/env php
+getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
+$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
+
+$kernel = new AppKernel($env, $debug);
+$application = new Application($kernel);
+$application->run($input);
diff --git a/app/phpunit.xml.dist b/app/phpunit.xml.dist
new file mode 100644
index 0000000..1e31086
--- /dev/null
+++ b/app/phpunit.xml.dist
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+ ../src/*/*Bundle/Tests
+ ../src/*/Bundle/*Bundle/Tests
+
+
+
+
+
+
+
+ ../src
+
+ ../src/*/*Bundle/Resources
+ ../src/*/*Bundle/Tests
+ ../src/*/Bundle/*Bundle/Resources
+ ../src/*/Bundle/*Bundle/Tests
+
+
+
+
+
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..fd1aa0e
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,41 @@
+{
+ "name": "symfony/framework-standard-edition",
+ "description": "The \"Symfony Standard Edition\" distribution",
+ "autoload": {
+ "psr-0": { "": "src/" }
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/symfony": "2.1.*",
+ "doctrine/orm": ">=2.2.3,<2.4-dev",
+ "doctrine/doctrine-bundle": "1.0.*",
+ "twig/extensions": "1.0.*",
+ "symfony/assetic-bundle": "2.1.*",
+ "symfony/swiftmailer-bundle": "2.1.*",
+ "symfony/monolog-bundle": "2.1.*",
+ "sensio/distribution-bundle": "2.1.*",
+ "sensio/framework-extra-bundle": "2.1.*",
+ "sensio/generator-bundle": "2.1.*",
+ "jms/security-extra-bundle": "1.2.*",
+ "jms/di-extra-bundle": "1.1.*"
+ },
+ "scripts": {
+ "post-install-cmd": [
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
+ ],
+ "post-update-cmd": [
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
+ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
+ ]
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "symfony-app-dir": "app",
+ "symfony-web-dir": "web"
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..458219f
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1213 @@
+{
+ "hash": "871ca732d39c832f0b78012cc83cec2e",
+ "packages": [
+ {
+ "name": "doctrine/common",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/common",
+ "reference": "bb0aebbf234db52df476a2b473d434745b34221c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/common/zipball/bb0aebbf234db52df476a2b473d434745b34221c",
+ "reference": "bb0aebbf234db52df476a2b473d434745b34221c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "time": "1348120518",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Common Library for Doctrine projects",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "collections",
+ "spl",
+ "eventmanager",
+ "annotations",
+ "persistence"
+ ]
+ },
+ {
+ "name": "doctrine/dbal",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/dbal",
+ "reference": "9395ca33971c0ff875d71a0271e6c0d5b0f01508"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/dbal/zipball/9395ca33971c0ff875d71a0271e6c0d5b0f01508",
+ "reference": "9395ca33971c0ff875d71a0271e6c0d5b0f01508",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "doctrine/common": "2.3.*"
+ },
+ "time": "1350419590",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\DBAL": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com",
+ "homepage": "http://www.instaclick.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Database Abstraction Layer",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "persistence",
+ "dbal",
+ "queryobject"
+ ]
+ },
+ {
+ "name": "doctrine/doctrine-bundle",
+ "version": "dev-master",
+ "target-dir": "Doctrine/Bundle/DoctrineBundle",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/doctrine/DoctrineBundle.git",
+ "reference": "a3b99ec049b7c488c70b8776a67c594e6ddf54cd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/DoctrineBundle/zipball/a3b99ec049b7c488c70b8776a67c594e6ddf54cd",
+ "reference": "a3b99ec049b7c488c70b8776a67c594e6ddf54cd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "doctrine/dbal": ">=2.2,<2.4-dev",
+ "symfony/framework-bundle": ">=2.1,<2.3-dev",
+ "symfony/doctrine-bridge": ">=2.1,<2.3-dev"
+ },
+ "require-dev": {
+ "doctrine/orm": ">=2.2,<2.4-dev",
+ "symfony/yaml": ">=2.1,<2.3-dev",
+ "symfony/validator": ">=2.1,<2.3-dev"
+ },
+ "suggest": {
+ "doctrine/orm": "The Doctrine ORM integration is optional in the bundle."
+ },
+ "time": "1350120716",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Bundle\\DoctrineBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Symfony DoctrineBundle",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "orm",
+ "persistence",
+ "dbal"
+ ]
+ },
+ {
+ "name": "doctrine/orm",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/doctrine/doctrine2.git",
+ "reference": "6bad0109599348c5216df35f62b80a20ba16c507"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/doctrine/doctrine2/zipball/6bad0109599348c5216df35f62b80a20ba16c507",
+ "reference": "6bad0109599348c5216df35f62b80a20ba16c507",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "ext-pdo": "*",
+ "symfony/console": "2.*",
+ "doctrine/dbal": "2.3.*"
+ },
+ "suggest": {
+ "symfony/yaml": "If you want to use YAML Metadata Mapping Driver"
+ },
+ "time": "1350071385",
+ "bin": [
+ "bin/doctrine",
+ "bin/doctrine.php"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\ORM": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com",
+ "homepage": "http://www.jwage.com/"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com",
+ "homepage": "http://www.instaclick.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ }
+ ],
+ "description": "Object-Relational-Mapper for PHP",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "database",
+ "orm"
+ ]
+ },
+ {
+ "name": "jms/aop-bundle",
+ "version": "1.0.0",
+ "target-dir": "JMS/AopBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSAopBundle",
+ "reference": "1.0.0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSAopBundle/zipball/1.0.0",
+ "reference": "1.0.0",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.*",
+ "jms/cg": "1.0.0"
+ },
+ "time": "2012-01-02 12:50:26",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\AopBundle": ""
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Adds AOP capabilities to Symfony2",
+ "keywords": [
+ "annotations",
+ "aop"
+ ]
+ },
+ {
+ "name": "jms/cg",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/schmittjoh/cg-library.git",
+ "reference": "1.0.0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/cg-library/zipball/1.0.0",
+ "reference": "1.0.0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2012-01-02 20:40:52",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "CG\\": "src/"
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Toolset for generating PHP code",
+ "keywords": [
+ "code generation"
+ ]
+ },
+ {
+ "name": "jms/di-extra-bundle",
+ "version": "1.1.x-dev",
+ "target-dir": "JMS/DiExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSDiExtraBundle",
+ "reference": "1.1.1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSDiExtraBundle/zipball/1.1.1",
+ "reference": "1.1.1",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "jms/aop-bundle": "1.0.*",
+ "jms/metadata": "1.1.*",
+ "symfony/process": "2.1.*",
+ "symfony/finder": "2.1.*"
+ },
+ "require-dev": {
+ "jms/security-extra-bundle": "1.*",
+ "symfony/validator": "*",
+ "symfony/form": "*",
+ "symfony/class-loader": "*",
+ "symfony/yaml": "*",
+ "symfony/browser-kit": "*",
+ "symfony/security-bundle": "*",
+ "symfony/twig-bundle": "*",
+ "sensio/framework-extra-bundle": "*",
+ "doctrine/doctrine-bundle": "*",
+ "doctrine/orm": "*"
+ },
+ "time": "1348217792",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\DiExtraBundle": ""
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Allows to configure dependency injection using annotations",
+ "homepage": "http://jmsyst.com/bundles/JMSDiExtraBundle",
+ "keywords": [
+ "dependency injection",
+ "annotations"
+ ]
+ },
+ {
+ "name": "jms/metadata",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/metadata",
+ "reference": "1.1.1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/metadata/zipball/1.1.1",
+ "reference": "1.1.1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "time": "2012-01-02 21:32:49",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Metadata\\": "src/"
+ }
+ },
+ "license": [
+ "Apache"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Class/method/property metadata management in PHP",
+ "keywords": [
+ "annotations",
+ "yaml",
+ "xml",
+ "metadata"
+ ]
+ },
+ {
+ "name": "jms/security-extra-bundle",
+ "version": "1.2.x-dev",
+ "target-dir": "JMS/SecurityExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle",
+ "reference": "9ab6aceda50fc7a2b07d741ba4b3f0695508afcb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle/zipball/9ab6aceda50fc7a2b07d741ba4b3f0695508afcb",
+ "reference": "9ab6aceda50fc7a2b07d741ba4b3f0695508afcb",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "symfony/security-bundle": "*",
+ "jms/metadata": "1.1.*",
+ "jms/aop-bundle": "1.0.*",
+ "jms/di-extra-bundle": "1.1.*"
+ },
+ "require-dev": {
+ "sensio/framework-extra-bundle": "*",
+ "symfony/class-loader": "*",
+ "symfony/yaml": "*",
+ "symfony/browser-kit": "*",
+ "symfony/finder": "*",
+ "symfony/css-selector": "*",
+ "symfony/process": "*",
+ "doctrine/doctrine-bundle": "*",
+ "symfony/twig-bundle": "*",
+ "doctrine/orm": "*",
+ "symfony/form": "*",
+ "symfony/validator": "*"
+ },
+ "time": "1346947943",
+ "type": "symfony-bundle",
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "JMS\\SecurityExtraBundle": ""
+ }
+ },
+ "license": [
+ "Apache2"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "http://jmsyst.com",
+ "role": "Developer of wrapped JMSSerializerBundle"
+ }
+ ],
+ "description": "Enhances the Symfony2 Security Component by adding several new features",
+ "homepage": "http://jmsyst.com/bundles/JMSSecurityExtraBundle",
+ "keywords": [
+ "annotations",
+ "authorization",
+ "security",
+ "secure",
+ "expression"
+ ]
+ },
+ {
+ "name": "kriswallsmith/assetic",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "http://github.com/kriswallsmith/assetic.git",
+ "reference": "a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/kriswallsmith/assetic/zipball/a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc",
+ "reference": "a1b6fa1f7bb27c203b6c3cf7d0dd0184f8dffcdc",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/process": ">=2.1.0,<2.3-dev",
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "twig/twig": ">=1.6.0,<2.0",
+ "leafo/lessphp": "*",
+ "leafo/scssphp": "*",
+ "ptachoire/cssembed": "*",
+ "leafo/scssphp-compass": "*"
+ },
+ "suggest": {
+ "twig/twig": "Assetic provides the integration with the Twig templating engine",
+ "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler",
+ "leafo/scssphp": "Assetic provides the integration with the scssphp SCSS compiler",
+ "ptachoire/cssembed": "Assetic provides the integration with phpcssembed to embed data uris",
+ "leafo/scssphp-compass": "Assetic provides the integration with the SCSS compass plugin"
+ },
+ "time": "1351079542",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Assetic": "src/"
+ },
+ "files": [
+ "src/functions.php"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Asset Management for PHP",
+ "homepage": "https://github.com/kriswallsmith/assetic",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ]
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog",
+ "reference": "38bb472abb27db138536f845f7d259c1c47bbd3f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/Seldaek/monolog/zipball/38bb472abb27db138536f845f7d259c1c47bbd3f",
+ "reference": "38bb472abb27db138536f845f7d259c1c47bbd3f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "mlehner/gelf-php": "1.0.*"
+ },
+ "suggest": {
+ "mlehner/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server"
+ },
+ "time": "1351084926",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Monolog": "src/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Logging for PHP 5.3",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging"
+ ]
+ },
+ {
+ "name": "sensio/distribution-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/DistributionBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioDistributionBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioDistributionBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*"
+ },
+ "time": "1347340208",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\DistributionBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "The base bundle for the Symfony Distributions",
+ "keywords": [
+ "distribution",
+ "configuration"
+ ]
+ },
+ {
+ "name": "sensio/framework-extra-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/FrameworkExtraBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioFrameworkExtraBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioFrameworkExtraBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "doctrine/common": ">=2.1,<2.4-dev"
+ },
+ "time": "1350448707",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\FrameworkExtraBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle provides a way to configure your controllers with annotations",
+ "keywords": [
+ "annotations",
+ "controllers"
+ ]
+ },
+ {
+ "name": "sensio/generator-bundle",
+ "version": "2.1.x-dev",
+ "target-dir": "Sensio/Bundle/GeneratorBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sensio/SensioGeneratorBundle",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/sensio/SensioGeneratorBundle/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "symfony/framework-bundle": "2.1.*",
+ "symfony/console": "2.1.*"
+ },
+ "require-dev": {
+ "symfony/doctrine-bridge": "2.1.*",
+ "doctrine/orm": ">=2.1,<2.4-dev",
+ "twig/twig": ">=1.8,<2.0-dev"
+ },
+ "time": "1348030981",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Sensio\\Bundle\\GeneratorBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "This bundle generates code for you"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v4.2.2",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/swiftmailer/swiftmailer.git",
+ "reference": "v4.2.2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/swiftmailer/swiftmailer/zipball/v4.2.2",
+ "reference": "v4.2.2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "time": "2012-10-25 01:30:40",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.2-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "license": [
+ "LGPL"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Chris Corbyn"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "http://swiftmailer.org",
+ "keywords": [
+ "mail",
+ "mailer"
+ ]
+ },
+ {
+ "name": "symfony/assetic-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/AsseticBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/AsseticBundle",
+ "reference": "4eea8571954132e4715a5e756fe6a90a7e2d90f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/AsseticBundle/zipball/4eea8571954132e4715a5e756fe6a90a7e2d90f6",
+ "reference": "4eea8571954132e4715a5e756fe6a90a7e2d90f6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "kriswallsmith/assetic": "1.1.*",
+ "symfony/framework-bundle": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/twig-bundle": ">=2.1.0,<2.3-dev",
+ "symfony/console": ">=2.1.0,<2.3-dev",
+ "symfony/class-loader": ">=2.1.0,<2.3-dev",
+ "symfony/yaml": ">=2.1.0,<2.3-dev",
+ "symfony/form": ">=2.1.0,<2.3-dev",
+ "symfony/dom-crawler": ">=2.1.0,<2.3-dev",
+ "symfony/css-selector": ">=2.1.0,<2.3-dev"
+ },
+ "suggest": {
+ "symfony/twig-bundle": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1350864366",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\AsseticBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kris Wallsmith",
+ "email": "kris.wallsmith@gmail.com",
+ "homepage": "http://kriswallsmith.net/"
+ }
+ ],
+ "description": "Integrates Assetic into Symfony2",
+ "homepage": "https://github.com/symfony/AsseticBundle",
+ "keywords": [
+ "assets",
+ "compression",
+ "minification"
+ ]
+ },
+ {
+ "name": "symfony/monolog-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/MonologBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/MonologBundle",
+ "reference": "51517152a608926ee6b40ed8cfbba1a708f0a14f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/MonologBundle/zipball/51517152a608926ee6b40ed8cfbba1a708f0a14f",
+ "reference": "51517152a608926ee6b40ed8cfbba1a708f0a14f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "monolog/monolog": "1.*",
+ "symfony/monolog-bridge": ">=2.1.0,<2.3-dev",
+ "symfony/dependency-injection": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/yaml": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1348137624",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\MonologBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony MonologBundle",
+ "homepage": "http://symfony.com"
+ },
+ {
+ "name": "symfony/swiftmailer-bundle",
+ "version": "dev-master",
+ "target-dir": "Symfony/Bundle/SwiftmailerBundle",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/SwiftmailerBundle",
+ "reference": "2393ba6d4f1b544349123e24a16bbc749bef9e55"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/SwiftmailerBundle/zipball/2393ba6d4f1b544349123e24a16bbc749bef9e55",
+ "reference": "2393ba6d4f1b544349123e24a16bbc749bef9e55",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "swiftmailer/swiftmailer": ">=4.2.0,<4.3-dev",
+ "symfony/swiftmailer-bridge": ">=2.1.0,<2.3-dev"
+ },
+ "require-dev": {
+ "symfony/dependency-injection": ">=2.1.0,<2.3-dev",
+ "symfony/http-kernel": ">=2.1.0,<2.3-dev",
+ "symfony/config": ">=2.1.0,<2.3-dev",
+ "symfony/yaml": ">=2.1.0,<2.3-dev"
+ },
+ "time": "1350447491",
+ "type": "symfony-bundle",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bundle\\SwiftmailerBundle": ""
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony SwiftmailerBundle",
+ "homepage": "http://symfony.com"
+ },
+ {
+ "name": "symfony/symfony",
+ "version": "2.1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/symfony/symfony.git",
+ "reference": "v2.1.3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/symfony/symfony/zipball/v2.1.3",
+ "reference": "v2.1.3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "doctrine/common": ">2.2,<2.4-dev",
+ "twig/twig": ">=1.9.1,<2.0-dev"
+ },
+ "replace": {
+ "symfony/doctrine-bridge": "self.version",
+ "symfony/monolog-bridge": "self.version",
+ "symfony/propel1-bridge": "self.version",
+ "symfony/swiftmailer-bridge": "self.version",
+ "symfony/twig-bridge": "self.version",
+ "symfony/framework-bundle": "self.version",
+ "symfony/security-bundle": "self.version",
+ "symfony/twig-bundle": "self.version",
+ "symfony/web-profiler-bundle": "self.version",
+ "symfony/browser-kit": "self.version",
+ "symfony/class-loader": "self.version",
+ "symfony/config": "self.version",
+ "symfony/console": "self.version",
+ "symfony/css-selector": "self.version",
+ "symfony/dependency-injection": "self.version",
+ "symfony/dom-crawler": "self.version",
+ "symfony/event-dispatcher": "self.version",
+ "symfony/filesystem": "self.version",
+ "symfony/finder": "self.version",
+ "symfony/form": "self.version",
+ "symfony/http-foundation": "self.version",
+ "symfony/http-kernel": "self.version",
+ "symfony/locale": "self.version",
+ "symfony/options-resolver": "self.version",
+ "symfony/process": "self.version",
+ "symfony/routing": "self.version",
+ "symfony/security": "self.version",
+ "symfony/serializer": "self.version",
+ "symfony/templating": "self.version",
+ "symfony/translation": "self.version",
+ "symfony/validator": "self.version",
+ "symfony/yaml": "self.version"
+ },
+ "require-dev": {
+ "doctrine/dbal": ">=2.2,<2.4-dev",
+ "doctrine/orm": ">=2.2.3,<2.4-dev",
+ "doctrine/data-fixtures": "1.0.*",
+ "propel/propel1": "dev-master",
+ "monolog/monolog": "1.*"
+ },
+ "time": "1351584854",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Symfony": "src/",
+ "SessionHandlerInterface": "src/Symfony/Component/HttpFoundation/Resources/stubs"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "The Symfony PHP framework",
+ "homepage": "http://symfony.com",
+ "keywords": [
+ "framework"
+ ]
+ },
+ {
+ "name": "twig/extensions",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fabpot/Twig-extensions",
+ "reference": "dcdff02fbac1282e6b8f4d0558cc7e9580105688"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/fabpot/Twig-extensions/zipball/dcdff02fbac1282e6b8f4d0558cc7e9580105688",
+ "reference": "dcdff02fbac1282e6b8f4d0558cc7e9580105688",
+ "shasum": ""
+ },
+ "require": {
+ "twig/twig": "1.*"
+ },
+ "time": "1349889206",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Twig_Extensions_": "lib/"
+ }
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Common additional features for Twig that do not directly belong in core",
+ "homepage": "https://github.com/fabpot/Twig-extensions",
+ "keywords": [
+ "debug",
+ "i18n",
+ "text"
+ ]
+ },
+ {
+ "name": "twig/twig",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "git://github.com/fabpot/Twig.git",
+ "reference": "0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://github.com/fabpot/Twig/zipball/0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c",
+ "reference": "0505c2fefd5eaa81c628b0cf8a9b8a2bc612321c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "time": "1351434618",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.11-dev"
+ }
+ },
+ "installation-source": "source",
+ "autoload": {
+ "psr-0": {
+ "Twig_": "lib/"
+ }
+ },
+ "license": [
+ "BSD-3"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "http://twig.sensiolabs.org",
+ "keywords": [
+ "templating"
+ ]
+ }
+ ],
+ "packages-dev": [
+
+ ],
+ "aliases": [
+
+ ],
+ "minimum-stability": "dev",
+ "stability-flags": [
+
+ ]
+}
diff --git a/src/.htaccess b/src/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/src/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/src/Acme/DemoBundle/AcmeDemoBundle.php b/src/Acme/DemoBundle/AcmeDemoBundle.php
new file mode 100644
index 0000000..269fc1e
--- /dev/null
+++ b/src/Acme/DemoBundle/AcmeDemoBundle.php
@@ -0,0 +1,9 @@
+ $name);
+ }
+
+ /**
+ * @Route("/contact", name="_demo_contact")
+ * @Template()
+ */
+ public function contactAction()
+ {
+ $form = $this->get('form.factory')->create(new ContactType());
+
+ $request = $this->get('request');
+ if ('POST' == $request->getMethod()) {
+ $form->bindRequest($request);
+ if ($form->isValid()) {
+ $mailer = $this->get('mailer');
+ // .. setup a message and send it
+ // http://symfony.com/doc/current/cookbook/email.html
+
+ $this->get('session')->setFlash('notice', 'Message sent!');
+
+ return new RedirectResponse($this->generateUrl('_demo'));
+ }
+ }
+
+ return array('form' => $form->createView());
+ }
+}
diff --git a/src/Acme/DemoBundle/Controller/SecuredController.php b/src/Acme/DemoBundle/Controller/SecuredController.php
new file mode 100644
index 0000000..9848e42
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/SecuredController.php
@@ -0,0 +1,69 @@
+get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
+ $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
+ } else {
+ $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
+ }
+
+ return array(
+ 'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
+ 'error' => $error,
+ );
+ }
+
+ /**
+ * @Route("/login_check", name="_security_check")
+ */
+ public function securityCheckAction()
+ {
+ // The security layer will intercept this request
+ }
+
+ /**
+ * @Route("/logout", name="_demo_logout")
+ */
+ public function logoutAction()
+ {
+ // The security layer will intercept this request
+ }
+
+ /**
+ * @Route("/hello", defaults={"name"="World"}),
+ * @Route("/hello/{name}", name="_demo_secured_hello")
+ * @Template()
+ */
+ public function helloAction($name)
+ {
+ return array('name' => $name);
+ }
+
+ /**
+ * @Route("/hello/admin/{name}", name="_demo_secured_hello_admin")
+ * @Secure(roles="ROLE_ADMIN")
+ * @Template()
+ */
+ public function helloadminAction($name)
+ {
+ return array('name' => $name);
+ }
+}
diff --git a/src/Acme/DemoBundle/Controller/WelcomeController.php b/src/Acme/DemoBundle/Controller/WelcomeController.php
new file mode 100644
index 0000000..acceedf
--- /dev/null
+++ b/src/Acme/DemoBundle/Controller/WelcomeController.php
@@ -0,0 +1,18 @@
+render('AcmeDemoBundle:Welcome:index.html.twig');
+ }
+}
diff --git a/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
new file mode 100644
index 0000000..6dfcc82
--- /dev/null
+++ b/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
@@ -0,0 +1,22 @@
+load('services.xml');
+ }
+
+ public function getAlias()
+ {
+ return 'acme_demo';
+ }
+}
diff --git a/src/Acme/DemoBundle/EventListener/ControllerListener.php b/src/Acme/DemoBundle/EventListener/ControllerListener.php
new file mode 100644
index 0000000..5274f71
--- /dev/null
+++ b/src/Acme/DemoBundle/EventListener/ControllerListener.php
@@ -0,0 +1,25 @@
+extension = $extension;
+ }
+
+ public function onKernelController(FilterControllerEvent $event)
+ {
+ if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
+ $this->extension->setController($event->getController());
+ }
+ }
+}
diff --git a/src/Acme/DemoBundle/Form/ContactType.php b/src/Acme/DemoBundle/Form/ContactType.php
new file mode 100644
index 0000000..2c76cdb
--- /dev/null
+++ b/src/Acme/DemoBundle/Form/ContactType.php
@@ -0,0 +1,20 @@
+add('email', 'email');
+ $builder->add('message', 'textarea');
+ }
+
+ public function getName()
+ {
+ return 'contact';
+ }
+}
diff --git a/src/Acme/DemoBundle/Resources/config/services.xml b/src/Acme/DemoBundle/Resources/config/services.xml
new file mode 100644
index 0000000..d6274ce
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/config/services.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Acme/DemoBundle/Resources/public/css/demo.css b/src/Acme/DemoBundle/Resources/public/css/demo.css
new file mode 100644
index 0000000..0a9d8e2
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/public/css/demo.css
@@ -0,0 +1,294 @@
+/*
+Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 2.8.2r1
+
+Reset
+*/
+
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}
+
+html, body
+{
+ background-color: #EFEFEF;
+}
+
+body
+{
+ font-size: 14px;
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+ color: #313131;
+}
+
+a
+{
+ color: #08C;
+ text-decoration: none;
+}
+
+a:hover
+{
+ text-decoration: underline;
+}
+
+strong
+{
+ font-weight: bold;
+}
+
+em
+{
+ font-style: italic;
+}
+
+h1, h2, h3
+{
+ font-family: Georgia, "Times New Roman", Times, serif;
+ color: #404040;
+}
+
+h1
+{
+ font-size: 45px;
+ padding-bottom: 30px;
+}
+
+h2
+{
+ font-weight: bold;
+ color: #FFFFFF;
+ /* Font is duplicated of body (sans-serif) */
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+
+ margin-bottom: 10px;
+ background-color: #aacd4e;
+ padding: 2px 4px;
+ display: inline-block;
+ text-transform: uppercase;
+
+}
+
+p
+{
+ line-height: 20px;
+ padding-bottom: 20px;
+}
+
+ul#demo-list a
+{
+ background: url(../images/blue-arrow.png) no-repeat right 6px;
+ padding-right: 10px;
+ margin-right: 30px;
+}
+
+ul, ol
+{
+ padding-left: 20px;
+}
+
+li
+{
+ padding-bottom: 18px;
+}
+
+ol li
+{
+ list-style-type: decimal;
+}
+
+ul li
+{
+ list-style-type: none;
+}
+
+#symfony-header
+{
+ position: relative;
+ padding: 30px 30px 20px 30px;
+}
+
+#symfony-wrapper
+{
+ width: 970px;
+ margin: 0 auto;
+}
+
+.symfony-content
+{
+ background-color: white;
+ border: 1px solid #DFDFDF;
+ padding: 50px;
+ -moz-border-radius: 16px;
+ -webkit-border-radius: 16px;
+ border-radius: 16px;
+ margin-bottom: 20px;
+ word-wrap: break-word;
+}
+
+#symfony-search
+{
+ position: absolute;
+ top: 50px;
+ right: 30px;
+}
+
+#symfony-search input[type="search"]
+{
+ -webkit-appearance: textfield;
+}
+
+#symfony-search-field
+{
+ width: 190px;
+}
+
+#symfony-search label
+{
+ display: block;
+ float: left;
+ width: 20px;
+ height: 25px;
+ background: url(../images/search.png) no-repeat left 5px;
+}
+
+#symfony-search label span
+{
+ display: none;
+}
+
+input[type=text], input[type=password]
+{
+ border: 1px solid #DADADA;
+ background: white url(../images/field-background.gif) repeat-x left top;
+ padding: 5px 6px;
+ color: #565656;
+ font-family: 'Lucida Sans Unicode', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+}
+
+.symfony-button-grey,
+.symfony-button-green
+{
+ font-size: 0.85em;
+ font-weight: bold;
+
+ cursor: pointer;
+
+ display: inline-block;
+ outline: none;
+
+ text-align: center;
+ text-transform: uppercase;
+
+ padding: 3px 10px;
+
+ text-shadow: 0 1px 1px rgba(0,0,0,.3);
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.symfony-button-grey
+{
+ color: #868686;
+ font-weight: normal;
+
+ padding: 5px 10px;
+ border: solid 1px #d7d7d7;
+ background: #ffffff;
+ background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#d7d7d7));
+ background: -moz-linear-gradient(top, #ffffff, #d7d7d7);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#d7d7d7');
+}
+
+.symfony-button-green
+{
+ padding: 5px 12px;
+
+ color: white;
+
+ border: solid 1px #a7da39;
+ background: #a7da39;
+ background: -webkit-gradient(linear, left top, left bottom, from(#a7da39), to(#6a9211));
+ background: -moz-linear-gradient(top, #a7da39, #6a9211);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a7da39', endColorstr='#6a9211');
+}
+
+.symfony-blocks-welcome
+{
+ overflow: hidden;
+}
+
+.symfony-blocks-welcome > div
+{
+ background-color: whitesmoke;
+ float: left;
+ width: 240px;
+ margin-right: 14px;
+ text-align: center;
+ padding: 26px 20px;
+}
+
+.symfony-blocks-welcome > div.block-demo
+{
+ margin-right: 0;
+}
+
+.symfony-blocks-welcome .illustration
+{
+ padding-bottom: 20px;
+}
+
+.symfony-blocks-help
+{
+ overflow: hidden;
+}
+
+.symfony-blocks-help
+{
+ margin-top: 30px;
+ padding: 18px;
+ border: 1px solid #E6E6E6;
+}
+
+.symfony-blocks-help > div
+{
+ width: 254px;
+ float: left;
+}
+
+.flash-message
+{
+ padding: 10px;
+ margin: 5px;
+ margin-top: 15px;
+ background-color: #ffe;
+}
+
+.error
+{
+ color: red;
+}
+
+#login label, #contact_form label
+{
+ display: block;
+ float: left;
+ width: 90px;
+}
+
+ul#menu
+{
+ float: right;
+ margin-bottom: 20px;
+ padding-left: 0;
+}
+
+#menu li
+{
+ padding-left: 0;
+ margin-right: 10px;
+ display: inline;
+}
diff --git a/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png b/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
new file mode 100644
index 0000000..fa82d4b
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/field-background.gif b/src/Acme/DemoBundle/Resources/public/images/field-background.gif
new file mode 100644
index 0000000..7c0efc1
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/field-background.gif differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/logo.gif b/src/Acme/DemoBundle/Resources/public/images/logo.gif
new file mode 100644
index 0000000..703cf45
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/logo.gif differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/search.png b/src/Acme/DemoBundle/Resources/public/images/search.png
new file mode 100644
index 0000000..3c88b6a
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/search.png differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
new file mode 100644
index 0000000..931179a
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
new file mode 100644
index 0000000..0623de5
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif differ
diff --git a/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif b/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
new file mode 100644
index 0000000..b9018b1
Binary files /dev/null and b/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif differ
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
new file mode 100644
index 0000000..e5b7523
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
@@ -0,0 +1,15 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Symfony - Contact form" %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
new file mode 100644
index 0000000..3997ff6
--- /dev/null
+++ b/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
@@ -0,0 +1,9 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+
+ This script will guide you through the basic configuration of your project.
+ You can also do the same by editing the ‘app/config/parameters.yml’ file directly.
+
+
+
+
Major problems
+
Major problems have been detected and must be fixed before continuing:
+
+
+
getHelpHtml() ?>
+
+
+
+
+
+
Recommendations
+
+ Additionally, toTo enhance your Symfony experience,
+ it’s recommended that you fix the following:
+
+
+
+
getHelpHtml() ?>
+
+
+
+
+ hasPhpIniConfigIssue()): ?>
+
*
+ getPhpIniConfigPath()): ?>
+ Changes to the php.ini file must be done in "getPhpIniConfigPath() ?>".
+
+ To change settings, create a "php.ini".
+
+