Browse Source

"New" framework to have symfony2 run on hhvm

Mattie Coccia 10 years ago
parent
commit
b69e85048a
99 changed files with 3497 additions and 0 deletions
  1. 11 0
      frameworks/PHP/symfony2_hhvm/.gitignore
  2. BIN
      frameworks/PHP/symfony2_hhvm/.hhvm.bbhc
  3. 19 0
      frameworks/PHP/symfony2_hhvm/LICENSE
  4. 49 0
      frameworks/PHP/symfony2_hhvm/README.md
  5. 1 0
      frameworks/PHP/symfony2_hhvm/app/.htaccess
  6. 9 0
      frameworks/PHP/symfony2_hhvm/app/AppCache.php
  7. 39 0
      frameworks/PHP/symfony2_hhvm/app/AppKernel.php
  8. 11 0
      frameworks/PHP/symfony2_hhvm/app/Resources/views/base.html.php
  9. 11 0
      frameworks/PHP/symfony2_hhvm/app/Resources/views/base.html.twig
  10. 687 0
      frameworks/PHP/symfony2_hhvm/app/SymfonyRequirements.php
  11. 14 0
      frameworks/PHP/symfony2_hhvm/app/autoload.php
  12. 55 0
      frameworks/PHP/symfony2_hhvm/app/check.php
  13. 65 0
      frameworks/PHP/symfony2_hhvm/app/config/config.yml
  14. 29 0
      frameworks/PHP/symfony2_hhvm/app/config/config_dev.yml
  15. 29 0
      frameworks/PHP/symfony2_hhvm/app/config/config_prod.yml
  16. 16 0
      frameworks/PHP/symfony2_hhvm/app/config/config_test.yml
  17. 14 0
      frameworks/PHP/symfony2_hhvm/app/config/parameters.yml
  18. 23 0
      frameworks/PHP/symfony2_hhvm/app/config/routing.yml
  19. 27 0
      frameworks/PHP/symfony2_hhvm/app/config/routing_dev.yml
  20. 42 0
      frameworks/PHP/symfony2_hhvm/app/config/security.yml
  21. 22 0
      frameworks/PHP/symfony2_hhvm/app/console
  22. 41 0
      frameworks/PHP/symfony2_hhvm/app/phpunit.xml.dist
  23. 64 0
      frameworks/PHP/symfony2_hhvm/benchmark_config.json
  24. 47 0
      frameworks/PHP/symfony2_hhvm/composer.json
  25. 47 0
      frameworks/PHP/symfony2_hhvm/deploy/config.hdf
  26. 133 0
      frameworks/PHP/symfony2_hhvm/deploy/nginx.conf
  27. 1 0
      frameworks/PHP/symfony2_hhvm/deploy/php-fpm.pid
  28. 9 0
      frameworks/PHP/symfony2_hhvm/deploy/php-symfony2
  29. 1 0
      frameworks/PHP/symfony2_hhvm/hhvm.pid
  30. 12 0
      frameworks/PHP/symfony2_hhvm/install.sh
  31. 21 0
      frameworks/PHP/symfony2_hhvm/setup_hhvm.sh
  32. 114 0
      frameworks/PHP/symfony2_hhvm/source_code
  33. 1 0
      frameworks/PHP/symfony2_hhvm/src/.htaccess
  34. 9 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/AcmeDemoBundle.php
  35. 57 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/DemoController.php
  36. 69 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/SecuredController.php
  37. 18 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/WelcomeController.php
  38. 22 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
  39. 25 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/EventListener/ControllerListener.php
  40. 20 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Form/ContactType.php
  41. 18 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/config/services.xml
  42. 101 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/css/demo.css
  43. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
  44. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/field-background.gif
  45. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/logo.gif
  46. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/search.png
  47. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
  48. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
  49. BIN
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
  50. 15 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
  51. 9 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
  52. 14 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
  53. 11 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
  54. 9 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
  55. 6 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
  56. 35 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
  57. 83 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
  58. 37 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/layout.html.twig
  59. 17 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
  60. 81 0
      frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
  61. 131 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Controller/BenchController.php
  62. 69 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/Fortune.php
  63. 85 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/World.php
  64. 18 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.php
  65. 20 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.twig
  66. 5 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/content.php
  67. 14 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/fortunes.php
  68. 2 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_footer.php
  69. 6 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_header.php
  70. 7 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.php
  71. 7 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.twig
  72. 9 0
      frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/SkamanderBenchmarkBundle.php
  73. 48 0
      frameworks/PHP/symfony2_hhvm/web/.htaccess
  74. 22 0
      frameworks/PHP/symfony2_hhvm/web/app.php
  75. 28 0
      frameworks/PHP/symfony2_hhvm/web/app_dev.php
  76. BIN
      frameworks/PHP/symfony2_hhvm/web/apple-touch-icon.png
  77. 101 0
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/css/demo.css
  78. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/blue-arrow.png
  79. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/field-background.gif
  80. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/logo.gif
  81. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/search.png
  82. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-configure.gif
  83. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-demo.gif
  84. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-quick-tour.gif
  85. 150 0
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/body.css
  86. 108 0
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/exception.css
  87. 72 0
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/structure.css
  88. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/blue_picto_less.gif
  89. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/blue_picto_more.gif
  90. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/grey_magnifier.png
  91. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/logo_symfony.png
  92. 73 0
      frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/configurator.css
  93. 74 0
      frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/install.css
  94. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/blue-arrow.png
  95. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/favicon.ico
  96. BIN
      frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/notification.gif
  97. 124 0
      frameworks/PHP/symfony2_hhvm/web/config.php
  98. BIN
      frameworks/PHP/symfony2_hhvm/web/favicon.ico
  99. 4 0
      frameworks/PHP/symfony2_hhvm/web/robots.txt

+ 11 - 0
frameworks/PHP/symfony2_hhvm/.gitignore

@@ -0,0 +1,11 @@
+/app/cache
+/app/logs
+/bin
+/vendors
+/vendor
+/build
+/dist
+.DS_Store
+/tags
+.idea
+app/bootstrap.php.cache

BIN
frameworks/PHP/symfony2_hhvm/.hhvm.bbhc


+ 19 - 0
frameworks/PHP/symfony2_hhvm/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2004-2013 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.

+ 49 - 0
frameworks/PHP/symfony2_hhvm/README.md

@@ -0,0 +1,49 @@
+# Symfony 2 Benchmarking Test
+
+The information below contains information specific to Symfony2. 
+For further guidance, review the 
+[documentation](http://frameworkbenchmarks.readthedocs.org/en/latest/). 
+Also note the additional information provided in the [PHP README](../).
+
+This is the Symfony 2 PHP portion of a [benchmarking test suite](../../) comparing a variety of web development platforms.
+
+## Infrastructure Software Versions
+
+The tests were run with:
+
+* [Symfony Version 2.2.1](http://symfony.com/)
+* [PHP Version 5.5.17](http://www.php.net/) with FPM and APC
+* [nginx 1.4.0](http://nginx.org/)
+* [MySQL 5.5.29](https://dev.mysql.com/)
+
+## Paths & Source for Tests
+
+* [JSON Serialization](src/Skamander/BenchmarkBundle/Controller/BenchController.php)
+: "/json" _Note: Uses the PHP standard 
+[JSON encoder](http://www.php.net/manual/en/function.json-encode.php)._
+* [Single Database Query](src/Skamander/BenchmarkBundle/Controller/BenchController.php) ([Model](src/Skamander/BenchmarkBundle/Entity/World.php))
+: "/db" _Note: Uses the Symfony 2/Doctrine 2 Entity functionality._
+* [Multiple Database Queries](src/Skamander/BenchmarkBundle/Controller/BenchController.php) ([Model](src/Skamander/BenchmarkBundle/Entity/World.php))
+: "/db?queries=" _Note: Uses the Symfony 2/Doctrine 2 Entity functionality._
+* [Fortunes Template Test](src/Skamander/BenchmarkBundle/Controller/BenchController.php)
+: "/fortunes" _Note: Uses Symfony's template engine 'Twig'_
+
+## Advice for Adding Symfony2 Tests
+
+This implementation is the direct result of installing the 
+[Standard Edition of Symfony 2](https://github.com/symfony/symfony-standard) using [Composer](https://getcomposer.org/), and making 
+the minimum modifications necessary to support 
+running the benchmark. Specifically, unnecessary bundles 
+have *not* been removed from the kernel to properly 
+reflect "out of the box" performance. If you're interested
+in tuned performance, see the symfony-stripped test, which
+removes and unnecessary components. 
+
+Note: `app/bootstrap.php.cache` is generated by Composer
+when you first run `composer.phar install`
+
+# Interesting Links
+
+* [Discussion on APC vs Zend Optimizer, PHP 5.4](http://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-benchmarks-with-symfony2/)
+* [Symfony2 Performance Tuning](http://symfony.com/doc/current/book/performance.html)
+* [Why is Symfony2 performing so bad in benchmarks and does it matter?](http://stackoverflow.com/questions/16696763/why-is-symfony2-performing-so-bad-in-benchmarks-and-does-it-matter)

+ 1 - 0
frameworks/PHP/symfony2_hhvm/app/.htaccess

@@ -0,0 +1 @@
+deny from all

+ 9 - 0
frameworks/PHP/symfony2_hhvm/app/AppCache.php

@@ -0,0 +1,9 @@
+<?php
+
+require_once __DIR__.'/AppKernel.php';
+
+use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
+
+class AppCache extends HttpCache
+{
+}

+ 39 - 0
frameworks/PHP/symfony2_hhvm/app/AppKernel.php

@@ -0,0 +1,39 @@
+<?php
+
+use Symfony\Component\HttpKernel\Kernel;
+use Symfony\Component\Config\Loader\LoaderInterface;
+
+class AppKernel extends Kernel
+{
+    public function registerBundles()
+    {
+        $bundles = array(
+            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
+            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
+            new Symfony\Bundle\TwigBundle\TwigBundle(),
+            new Symfony\Bundle\MonologBundle\MonologBundle(),
+            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
+            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
+            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
+            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
+            new JMS\AopBundle\JMSAopBundle(),
+            new JMS\DiExtraBundle\JMSDiExtraBundle($this),
+            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
+            new Skamander\BenchmarkBundle\SkamanderBenchmarkBundle(),
+        );
+
+        if (in_array($this->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');
+    }
+}

+ 11 - 0
frameworks/PHP/symfony2_hhvm/app/Resources/views/base.html.php

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title><?php $view['slots']->output('title') ?></title>
+        <?php $view['slots']->output('stylesheets') ?>
+    </head>
+    <body>
+        <?php $view['slots']->output('body') ?>
+        <?php $view['slots']->output('javascripts') ?>
+    </body>
+</html>

+ 11 - 0
frameworks/PHP/symfony2_hhvm/app/Resources/views/base.html.twig

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>{% block title %}Welcome!{% endblock %}</title>
+        {% block stylesheets %}{% endblock %}
+    </head>
+    <body>
+        {% block body %}{% endblock %}
+        {% block javascripts %}{% endblock %}
+    </body>
+</html>

+ 687 - 0
frameworks/PHP/symfony2_hhvm/app/SymfonyRequirements.php

@@ -0,0 +1,687 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <[email protected]>
+ *
+ * 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 overridden 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 <http://tobion.de>
+ */
+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 <http://tobion.de>
+ */
+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 <strong>%s</strong> to <strong>%s</strong> in php.ini<a href="#phpini">*</a>.',
+                    $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 <http://tobion.de>
+ */
+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 recommendations.
+     *
+     * @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 <http://tobion.de>
+ * @author Fabien Potencier <[email protected]>
+ */
+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 "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" 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 <a href="http://getcomposer.org/">http://getcomposer.org/</a>. ' .
+                'Then run "<strong>php composer.phar install</strong>" to install them.'
+        );
+
+        $baseDir = basename(__DIR__);
+
+        $this->addRequirement(
+            is_writable(__DIR__.'/cache'),
+            "$baseDir/cache/ directory must be writable",
+            "Change the permissions of the \"<strong>$baseDir/cache/</strong>\" 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 \"<strong>$baseDir/logs/</strong>\" directory so that the web server can write into it."
+        );
+
+        $this->addPhpIniRequirement(
+            'date.timezone', true, false,
+            'date.timezone setting must be set',
+            'Set the "<strong>date.timezone</strong>" setting in php.ini<a href="#phpini">*</a> (like Europe/Paris).'
+        );
+
+        if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) {
+            $timezones = array();
+            foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
+                foreach ($abbreviations as $abbreviation) {
+                    $timezones[$abbreviation['timezone_id']] = true;
+                }
+            }
+
+            $this->addRequirement(
+                isset($timezones[date_default_timezone_get()]),
+                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 <strong>php.ini</strong> file and have a look at the list of deprecated timezones at <a href="http://php.net/manual/en/timezones.others.php">http://php.net/manual/en/timezones.others.php</a>.'
+            );
+        }
+
+        $this->addRequirement(
+            function_exists('json_encode'),
+            'json_encode() must be available',
+            'Install and enable the <strong>JSON</strong> extension.'
+        );
+
+        $this->addRequirement(
+            function_exists('session_start'),
+            'session_start() must be available',
+            'Install and enable the <strong>session</strong> extension.'
+        );
+
+        $this->addRequirement(
+            function_exists('ctype_alpha'),
+            'ctype_alpha() must be available',
+            'Install and enable the <strong>ctype</strong> extension.'
+        );
+
+        $this->addRequirement(
+            function_exists('token_get_all'),
+            'token_get_all() must be available',
+            'Install and enable the <strong>Tokenizer</strong> extension.'
+        );
+
+        $this->addRequirement(
+            function_exists('simplexml_import_dom'),
+            'simplexml_import_dom() must be available',
+            'Install and enable the <strong>SimpleXML</strong> extension.'
+        );
+
+        if (function_exists('apc_store') && ini_get('apc.enabled')) {
+            if (version_compare($installedPhpVersion, '5.4.0', '>=')) {
+                $this->addRequirement(
+                    version_compare(phpversion('apc'), '3.1.13', '>='),
+                    'APC version must be at least 3.1.13 when using PHP 5.4',
+                    'Upgrade your <strong>APC</strong> extension (3.1.13+).'
+                );
+            } else {
+                $this->addRequirement(
+                    version_compare(phpversion('apc'), '3.0.17', '>='),
+                    'APC version must be at least 3.0.17',
+                    'Upgrade your <strong>APC</strong> 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 "<strong>phar</strong>" to <strong>suhosin.executor.include.whitelist</strong> in php.ini<a href="#phpini">*</a>.'
+            );
+        }
+
+        if (extension_loaded('xdebug')) {
+            $this->addPhpIniRequirement(
+                'xdebug.show_exception_trace', false, true
+            );
+
+            $this->addPhpIniRequirement(
+                'xdebug.scream', false, true
+            );
+
+            $this->addPhpIniRecommendation(
+                'xdebug.max_nesting_level',
+                create_function('$cfgValue', 'return $cfgValue > 100;'),
+                true,
+                'xdebug.max_nesting_level should be above 100 in php.ini',
+                'Set "<strong>xdebug.max_nesting_level</strong>" to e.g. "<strong>250</strong>" in php.ini<a href="#phpini">*</a> to stop Xdebug\'s infinite recursion protection erroneously throwing a fatal error in your project.'
+            );
+        }
+
+        $pcreVersion = defined('PCRE_VERSION') ? (float) PCRE_VERSION : null;
+
+        $this->addRequirement(
+            null !== $pcreVersion,
+            'PCRE extension must be available',
+            'Install the <strong>PCRE</strong> extension (version 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(
+            version_compare($installedPhpVersion, '5.4.11', '>='),
+            'When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)',
+            'Install PHP 5.4.11 or newer if your project uses the logout handler from the Symfony Security Component.'
+        );
+
+        $this->addRecommendation(
+            (version_compare($installedPhpVersion, '5.3.18', '>=') && version_compare($installedPhpVersion, '5.4.0', '<'))
+            ||
+            version_compare($installedPhpVersion, '5.4.8', '>='),
+            'You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909',
+            'Install PHP 5.3.18+ or PHP 5.4.8+ if you want nice error messages for all fatal errors in the development environment.'
+        );
+
+        if (null !== $pcreVersion) {
+            $this->addRecommendation(
+                $pcreVersion >= 8.0,
+                sprintf('PCRE extension should be at least version 8.0 (%s installed)', $pcreVersion),
+                '<strong>PCRE 8.0+</strong> is preconfigured in PHP since 5.3.2 but you are using an outdated version of it. Symfony probably works anyway but it is recommended to upgrade your PCRE extension.'
+            );
+        }
+
+        $this->addRecommendation(
+            class_exists('DomDocument'),
+            'PHP-XML module should be installed',
+            'Install and enable the <strong>PHP-XML</strong> module.'
+        );
+
+        $this->addRecommendation(
+            function_exists('mb_strlen'),
+            'mb_strlen() should be available',
+            'Install and enable the <strong>mbstring</strong> extension.'
+        );
+
+        $this->addRecommendation(
+            function_exists('iconv'),
+            'iconv() should be available',
+            'Install and enable the <strong>iconv</strong> extension.'
+        );
+
+        $this->addRecommendation(
+            function_exists('utf8_decode'),
+            'utf8_decode() should be available',
+            'Install and enable the <strong>XML</strong> extension.'
+        );
+
+        if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
+            $this->addRecommendation(
+                function_exists('posix_isatty'),
+                'posix_isatty() should be available',
+                'Install and enable the <strong>php_posix</strong> extension (used to colorize the CLI output).'
+            );
+        }
+
+        $this->addRecommendation(
+            class_exists('Locale'),
+            'intl extension should be available',
+            'Install and enable the <strong>intl</strong> 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 <strong>intl</strong> extension with a newer ICU version (4+).'
+            );
+        }
+
+        $accelerator =
+            (extension_loaded('eaccelerator') && ini_get('eaccelerator.enable'))
+            ||
+            (extension_loaded('apc') && ini_get('apc.enabled'))
+            ||
+            (extension_loaded('Zend OPcache') && ini_get('opcache.enable'))
+            ||
+            (extension_loaded('xcache') && ini_get('xcache.cacher'))
+            ||
+            (extension_loaded('wincache') && ini_get('wincache.ocenabled'))
+        ;
+
+        $this->addRecommendation(
+            $accelerator,
+            'a PHP accelerator should be installed',
+            'Install and enable a <strong>PHP accelerator</strong> 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 <strong>PDO</strong> (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 <strong>PDO drivers</strong> (mandatory for Doctrine).'
+            );
+        }
+    }
+}

+ 14 - 0
frameworks/PHP/symfony2_hhvm/app/autoload.php

@@ -0,0 +1,14 @@
+<?php
+
+use Doctrine\Common\Annotations\AnnotationRegistry;
+
+$loader = require __DIR__.'/../vendor/autoload.php';
+
+// intl
+if (!function_exists('intl_get_error_code')) {
+    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
+}
+
+AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
+
+return $loader;

+ 55 - 0
frameworks/PHP/symfony2_hhvm/app/check.php

@@ -0,0 +1,55 @@
+<?php
+
+require_once dirname(__FILE__).'/SymfonyRequirements.php';
+
+$symfonyRequirements = new SymfonyRequirements();
+
+$iniPath = $symfonyRequirements->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";
+}

+ 65 - 0
frameworks/PHP/symfony2_hhvm/app/config/config.yml

@@ -0,0 +1,65 @@
+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:            ~
+    csrf_protection: ~
+    validation:      { enable_annotations: true }
+    templating:
+        engines: ['twig', 'php']
+        #assets_version: SomeVersionScheme
+    default_locale:  "%locale%"
+    trusted_proxies: ~
+    session:         ~
+    fragments:       ~
+
+# 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
+        # if using pdo_sqlite as your database driver, add the path in parameters.yml
+        # e.g. database_path: %kernel.root_dir%/data/data.db3
+        # path:     %database_path%
+
+    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 }

+ 29 - 0
frameworks/PHP/symfony2_hhvm/app/config/config_dev.yml

@@ -0,0 +1,29 @@
+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
+        chromephp:
+            type:  chromephp
+            level: info
+
+assetic:
+    use_controller: true
+
+#swiftmailer:
+#    delivery_address: [email protected]

+ 29 - 0
frameworks/PHP/symfony2_hhvm/app/config/config_prod.yml

@@ -0,0 +1,29 @@
+imports:
+    - { resource: config.yml }
+
+# In production environment you should know that the parameters for URL generation
+# always pass the requirements. Otherwise it would break your link (or even site with
+# strict_requirements = true). So we can disable the requirements check completely for
+# enhanced performance with strict_requirements = null.
+framework:
+    router:
+        strict_requirements: null
+    # validation:
+    #    cache: apc
+
+doctrine:
+    orm:
+        # metadata_cache_driver: redis
+        # result_cache_driver: apc
+        # query_cache_driver: redis
+
+monolog:
+    handlers:
+        main:
+            type:         fingers_crossed
+            action_level: error
+            handler:      nested
+        nested:
+            type:  stream
+            path:  %kernel.logs_dir%/%kernel.environment%.log
+            level: debug

+ 16 - 0
frameworks/PHP/symfony2_hhvm/app/config/config_test.yml

@@ -0,0 +1,16 @@
+imports:
+    - { resource: config_dev.yml }
+
+framework:
+    test: ~
+    session:
+        storage_id: session.storage.mock_file
+    profiler:
+        enabled: false
+
+web_profiler:
+    toolbar: false
+    intercept_redirects: false
+
+swiftmailer:
+    disable_delivery: true

+ 14 - 0
frameworks/PHP/symfony2_hhvm/app/config/parameters.yml

@@ -0,0 +1,14 @@
+parameters:
+    database_driver: pdo_mysql
+    database_host: 127.0.0.1
+    database_port: null
+    database_name: hello_world
+    database_user: benchmarkdbuser
+    database_password: benchmarkdbpass
+    mailer_transport: smtp
+    mailer_host: 127.0.0.1
+    mailer_user: null
+    mailer_password: null
+    locale: en
+    secret: 2d50e353f5d24683c46e298ec0aead14
+    database_path: null

+ 23 - 0
frameworks/PHP/symfony2_hhvm/app/config/routing.yml

@@ -0,0 +1,23 @@
+_json:
+    pattern:  /json
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:json }
+
+_db:
+    pattern:  /db
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:db }
+
+_dbRaw:
+    pattern:  /db-raw
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:dbRaw }
+
+_fortunes:
+    pattern:  /fortunes
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:fortunes }
+
+_fortunesPhp:
+    pattern:  /fortunes-php
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:fortunesPhp }
+
+_fortunesRaw:
+    pattern:  /fortunes-raw
+    defaults: { _controller: SkamanderBenchmarkBundle:Bench:fortunesRaw }

+ 27 - 0
frameworks/PHP/symfony2_hhvm/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

+ 42 - 0
frameworks/PHP/symfony2_hhvm/app/config/security.yml

@@ -0,0 +1,42 @@
+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: _security_check
+                login_path: _demo_login
+            logout:
+                path:   _demo_logout
+                target: _demo
+            #anonymous: ~
+            #http_basic:
+            #    realm: "Secured Demo Area"
+
+    access_control:
+        #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

+ 22 - 0
frameworks/PHP/symfony2_hhvm/app/console

@@ -0,0 +1,22 @@
+#!/usr/bin/env php
+<?php
+
+// if you don't want to setup permissions the proper way, just uncomment the following PHP line
+// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
+//umask(0000);
+
+set_time_limit(0);
+
+require_once __DIR__.'/bootstrap.php.cache';
+require_once __DIR__.'/AppKernel.php';
+
+use Symfony\Bundle\FrameworkBundle\Console\Application;
+use Symfony\Component\Console\Input\ArgvInput;
+
+$input = new ArgvInput();
+$env = $input->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);

+ 41 - 0
frameworks/PHP/symfony2_hhvm/app/phpunit.xml.dist

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
+<phpunit
+    backupGlobals               = "false"
+    backupStaticAttributes      = "false"
+    colors                      = "true"
+    convertErrorsToExceptions   = "true"
+    convertNoticesToExceptions  = "true"
+    convertWarningsToExceptions = "true"
+    processIsolation            = "false"
+    stopOnFailure               = "false"
+    syntaxCheck                 = "false"
+    bootstrap                   = "bootstrap.php.cache" >
+
+    <testsuites>
+        <testsuite name="Project Test Suite">
+            <directory>../src/*/*Bundle/Tests</directory>
+            <directory>../src/*/Bundle/*Bundle/Tests</directory>
+        </testsuite>
+    </testsuites>
+
+    <!--
+    <php>
+        <server name="KERNEL_DIR" value="/path/to/your/app/" />
+    </php>
+    -->
+
+    <filter>
+        <whitelist>
+            <directory>../src</directory>
+            <exclude>
+                <directory>../src/*/*Bundle/Resources</directory>
+                <directory>../src/*/*Bundle/Tests</directory>
+                <directory>../src/*/Bundle/*Bundle/Resources</directory>
+                <directory>../src/*/Bundle/*Bundle/Tests</directory>
+            </exclude>
+        </whitelist>
+    </filter>
+
+</phpunit>

+ 64 - 0
frameworks/PHP/symfony2_hhvm/benchmark_config.json

@@ -0,0 +1,64 @@
+{
+  "framework": "symfony2_hhvm",
+  "tests": [{
+    "default": {
+      "setup_file": "setup_hhvm",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/db?queries=",
+      "fortune_url": "/fortunes",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "MySQL",
+      "framework": "symfony2",
+      "language": "PHP",
+      "orm": "Full",
+      "platform": "PHP-FPM",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "symfony2",
+      "notes": "",
+      "versus": "php"
+    },
+    "php-templates": {
+      "setup_file": "setup_hhvm",
+      "fortune_url": "/fortunes-php",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "MySQL",
+      "framework": "symfony2",
+      "language": "PHP",
+      "orm": "Full",
+      "platform": "PHP-FPM",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "symfony2",
+      "notes": "",
+      "versus": "php"
+    },
+    "raw": {
+      "setup_file": "setup_hhvm",
+      "db_url": "/db-raw",
+      "query_url": "/db-raw?queries=",
+      "fortune_url": "/fortunes-raw",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "MySQL",
+      "framework": "symfony2",
+      "language": "PHP",
+      "orm": "Raw",
+      "platform": "PHP-FPM",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "symfony2",
+      "notes": "",
+      "versus": "php"
+    }
+  }]
+}

+ 47 - 0
frameworks/PHP/symfony2_hhvm/composer.json

@@ -0,0 +1,47 @@
+{
+    "name": "symfony/framework-standard-edition",
+    "description": "The \"Symfony Standard Edition\" distribution",
+    "autoload": {
+        "psr-0": { "": "src/" }
+    },
+    "require": {
+        "php": ">=5.3.3",
+        "symfony/symfony": "2.2.*",
+        "doctrine/orm": "~2.2,>=2.2.3",
+        "doctrine/doctrine-bundle": "1.2.*",
+        "twig/extensions": "1.0.*",
+        "symfony/assetic-bundle": "2.1.*",
+        "symfony/swiftmailer-bundle": "2.2.*",
+        "symfony/monolog-bundle": "2.2.*",
+        "sensio/distribution-bundle": "2.2.*",
+        "sensio/framework-extra-bundle": "2.2.*",
+        "sensio/generator-bundle": "2.2.*",
+        "jms/security-extra-bundle": "1.4.*",
+        "jms/di-extra-bundle": "1.3.*"
+    },
+    "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"
+        ]
+    },
+    "config": {
+        "bin-dir": "bin"
+    },
+    "minimum-stability": "alpha",
+    "extra": {
+        "symfony-app-dir": "app",
+        "symfony-web-dir": "web",
+        "branch-alias": {
+            "dev-master": "2.2-dev"
+        }
+    }
+}

+ 47 - 0
frameworks/PHP/symfony2_hhvm/deploy/config.hdf

@@ -0,0 +1,47 @@
+# main configuration file
+
+# Application PID File
+PidFile = /home/vagrant/FrameworkBenchmarks/frameworks/PHP/symfony2_hhvm/hhvm.pid
+
+# Server settings
+Server {
+  Port = 9001
+  Type = fastcgi
+  SourceRoot = /home/vagrant/FrameworkBenchmarks/frameworks/PHP/symfony2_hhvm
+  DefaultDocument = index.php
+}
+
+# Disable logging completely
+Log {
+  UseLogFile = false
+  UseSyslog = false
+  Level = Error
+  #File = /home/vagrant/FrameworkBenchmarks/frameworks/PHP/symfony2_hhvm/error.log
+}
+
+# Enable jit for production mode
+Eval {
+    Jit = true
+    CheckSymLink = false
+}
+
+# Repo file
+Repo {
+  Central {
+    Path = /home/vagrant/FrameworkBenchmarks/frameworks/PHP/symfony2_hhvm/.hhvm.bbhc
+  }
+}
+
+# Setup basic rewrite
+VirtualHost {
+    * {
+        Pattern = .*
+        RewriteRules {
+            * {
+                pattern = ^(.*)$
+                to = $1.php
+                qsa = true
+            }
+        }
+    }
+}

+ 133 - 0
frameworks/PHP/symfony2_hhvm/deploy/nginx.conf

@@ -0,0 +1,133 @@
+#user  nobody;
+worker_processes  8;
+
+#error_log  logs/error.log;
+#error_log  logs/error.log  notice;
+#error_log  logs/error.log  info;
+error_log stderr error;
+
+#pid        logs/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    include       /home/vagrant/FrameworkBenchmarks/installs/nginx/conf/mime.types;
+    default_type  application/octet-stream;
+
+    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+    #                  '$status $body_bytes_sent "$http_referer" '
+    #                  '"$http_user_agent" "$http_x_forwarded_for"';
+
+    #access_log  logs/access.log  main;
+    access_log off;
+
+    sendfile        on;
+    #tcp_nopush     on;
+
+    #keepalive_timeout  0;
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+    upstream fastcgi_backend {
+        server 127.0.0.1:9001;
+        keepalive 32;
+    }
+
+    server {
+        listen       8080;
+        server_name  localhost;
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+        #location / {
+        #    root   html;
+        #    index  index.html index.htm;
+        #}
+
+        #error_page  404              /404.html;
+
+        # redirect server error pages to the static page /50x.html
+        #
+        #error_page   500 502 503 504  /50x.html;
+        #location = /50x.html {
+        #    root   html;
+        #}
+
+        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+        #
+        #location ~ \.php$ {
+        #    proxy_pass   http://127.0.0.1;
+        #}
+
+         root /home/vagrant/FrameworkBenchmarks/frameworks/PHP/symfony2_hhvm/web/;
+        index  app.php;
+
+        location / {
+            try_files $uri $uri/ /app.php?$uri&$args;
+        }
+
+        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+        #
+        location ~ \.php$ {
+            try_files $uri =404;
+            fastcgi_pass   fastcgi_backend;
+            fastcgi_keep_conn on;
+            fastcgi_index  index.php;
+#            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
+            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+            include        /home/vagrant/FrameworkBenchmarks/installs/nginx/conf/fastcgi_params;
+        }
+
+        # deny access to .htaccess files, if Apache's document root
+        # concurs with nginx's one
+        #
+        #location ~ /\.ht {
+        #    deny  all;
+        #}
+    }
+
+
+    # another virtual host using mix of IP-, name-, and port-based configuration
+    #
+    #server {
+    #    listen       8000;
+    #    listen       somename:8080;
+    #    server_name  somename  alias  another.alias;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+
+    # HTTPS server
+    #
+    #server {
+    #    listen       443;
+    #    server_name  localhost;
+
+    #    ssl                  on;
+    #    ssl_certificate      cert.pem;
+    #    ssl_certificate_key  cert.key;
+
+    #    ssl_session_timeout  5m;
+
+    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
+    #    ssl_ciphers  HIGH:!aNULL:!MD5;
+    #    ssl_prefer_server_ciphers   on;
+
+    #    location / {
+    #        root   html;
+    #        index  index.html index.htm;
+    #    }
+    #}
+
+}

+ 1 - 0
frameworks/PHP/symfony2_hhvm/deploy/php-fpm.pid

@@ -0,0 +1 @@
+19724

+ 9 - 0
frameworks/PHP/symfony2_hhvm/deploy/php-symfony2

@@ -0,0 +1,9 @@
+<VirtualHost *:8080>
+  Alias /php-symfony2_hhvm/ "/home/ubuntu/FrameworkBenchmarks/php-symfony2_hhvm/web/"
+  <Directory /home/ubuntu/FrameworkBenchmarks/php-symfony2_hhvm/web/>
+          Options Indexes FollowSymLinks MultiViews
+          #AllowOverride None
+          Order allow,deny
+          allow from all
+  </Directory>
+</VirtualHost>

+ 1 - 0
frameworks/PHP/symfony2_hhvm/hhvm.pid

@@ -0,0 +1 @@
+26599

+ 12 - 0
frameworks/PHP/symfony2_hhvm/install.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+export PHP_HOME=${IROOT}/php-5.5.17
+export COMPOSER_HOME=${IROOT}/php-composer
+export PHP_FPM=${PHP_HOME}/sbin/php-fpm
+export NGINX_HOME=${IROOT}/nginx
+
+fw_depends php nginx composer hhvm
+
+${PHP_HOME}/bin/php ${COMPOSER_HOME}/composer.phar install \
+  --no-interaction --working-dir $TROOT \
+  --no-progress --optimize-autoloader 

+ 21 - 0
frameworks/PHP/symfony2_hhvm/setup_hhvm.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+export PHP_HOME=${IROOT}/php-5.5.17
+export COMPOSER_HOME=${IROOT}/php-composer
+export PHP_FPM=${PHP_HOME}/sbin/php-fpm
+export NGINX_HOME=${IROOT}/nginx
+
+sed -i 's|database_host: .*|database_host: '"${DBHOST}"'|g' app/config/parameters.yml
+sed -i 's|SourceRoot = .*/FrameworkBenchmarks/symfony2_hhvm|SourceRoot = '"${TROOT}"'|g' deploy/config.hdf
+sed -i 's|Path = .*/.hhvm.hhbc|Path = '"${TROOT}"'/.hhvm.bbhc|g' deploy/config.hdf
+sed -i 's|PidFile = .*/hhvm.pid|PidFile = '"${TROOT}"'/hhvm.pid|g' deploy/config.hdf
+sed -i 's|File = .*/error.log|File = '"${TROOT}"'/error.log|g' deploy/config.hdf
+sed -i 's|root .*/FrameworkBenchmarks/php-symfony2_hhvm| root '"${TROOT}"'|g' deploy/nginx.conf
+sed -i 's|/usr/local/nginx/|'"${IROOT}"'/nginx/|g' deploy/nginx.conf
+
+${PHP_HOME}/bin/php app/console cache:clear \
+  --env=prod --no-debug --no-warmup
+${PHP_HOME}/bin/php app/console cache:warmup \
+  --env=prod --no-debug
+
+hhvm --config $TROOT/deploy/config.hdf --user $(whoami) -m daemon
+$NGINX_HOME/sbin/nginx -c $TROOT/deploy/nginx.conf

+ 114 - 0
frameworks/PHP/symfony2_hhvm/source_code

@@ -0,0 +1,114 @@
+./php-symfony2_hhvm/app/AppCache.php
+./php-symfony2_hhvm/app/AppKernel.php
+./php-symfony2_hhvm/app/autoload.php
+./php-symfony2_hhvm/app/bootstrap.php.cache
+./php-symfony2_hhvm/app/check.php
+./php-symfony2_hhvm/app/SymfonyRequirements.php
+./php-symfony2_hhvm/app/console
+./php-symfony2_hhvm/app/phpunit.xml.dist
+./php-symfony2_hhvm/app/Resources/
+./php-symfony2_hhvm/app/Resources/views
+./php-symfony2_hhvm/app/Resources/views/base.html.twig
+./php-symfony2_hhvm/app/Resources/views/base.html.php
+./php-symfony2_hhvm/deploy/php-symfony2
+./php-symfony2_hhvm/src/
+./php-symfony2_hhvm/src/Skamander
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/SkamanderBenchmarkBundle.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/World.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/Fortune.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Controller
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Controller/BenchController.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.twig
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/content.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/fortunes.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_footer.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_header.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.php
+./php-symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.twig
+./php-symfony2_hhvm/src/.htaccess
+./php-symfony2_hhvm/src/Acme
+./php-symfony2_hhvm/src/Acme/DemoBundle
+./php-symfony2_hhvm/src/Acme/DemoBundle/Twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Twig/Extension
+./php-symfony2_hhvm/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/DependencyInjection
+./php-symfony2_hhvm/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/AcmeDemoBundle.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/EventListener
+./php-symfony2_hhvm/src/Acme/DemoBundle/EventListener/ControllerListener.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/Controller
+./php-symfony2_hhvm/src/Acme/DemoBundle/Controller/DemoController.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/Controller/SecuredController.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/Controller/WelcomeController.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/search.png
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/field-background.gif
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/logo.gif
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/css
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/public/css/demo.css
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Welcome
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/layout.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/contact.html.twig
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/config
+./php-symfony2_hhvm/src/Acme/DemoBundle/Resources/config/services.xml
+./php-symfony2_hhvm/src/Acme/DemoBundle/Form
+./php-symfony2_hhvm/src/Acme/DemoBundle/Form/ContactType.php
+./php-symfony2_hhvm/src/Acme/DemoBundle/Tests
+./php-symfony2_hhvm/src/Acme/DemoBundle/Tests/Controller
+./php-symfony2_hhvm/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
+./php-symfony2_hhvm/web/bundles/
+./php-symfony2_hhvm/web/bundles/sensiodistribution
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/blue-arrow.png
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/notification.gif
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/favicon.ico
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/configurator.css
+./php-symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/install.css
+./php-symfony2_hhvm/web/bundles/framework
+./php-symfony2_hhvm/web/bundles/framework/images
+./php-symfony2_hhvm/web/bundles/framework/images/grey_magnifier.png
+./php-symfony2_hhvm/web/bundles/framework/images/logo_symfony.png
+./php-symfony2_hhvm/web/bundles/framework/images/blue_picto_more.gif
+./php-symfony2_hhvm/web/bundles/framework/images/blue_picto_less.gif
+./php-symfony2_hhvm/web/bundles/framework/css
+./php-symfony2_hhvm/web/bundles/framework/css/body.css
+./php-symfony2_hhvm/web/bundles/framework/css/exception.css
+./php-symfony2_hhvm/web/bundles/framework/css/structure.css
+./php-symfony2_hhvm/web/bundles/acmedemo
+./php-symfony2_hhvm/web/bundles/acmedemo/images
+./php-symfony2_hhvm/web/bundles/acmedemo/images/blue-arrow.png
+./php-symfony2_hhvm/web/bundles/acmedemo/images/welcome-configure.gif
+./php-symfony2_hhvm/web/bundles/acmedemo/images/welcome-demo.gif
+./php-symfony2_hhvm/web/bundles/acmedemo/images/search.png
+./php-symfony2_hhvm/web/bundles/acmedemo/images/welcome-quick-tour.gif
+./php-symfony2_hhvm/web/bundles/acmedemo/images/field-background.gif
+./php-symfony2_hhvm/web/bundles/acmedemo/images/logo.gif
+./php-symfony2_hhvm/web/bundles/acmedemo/css
+./php-symfony2_hhvm/web/bundles/acmedemo/css/demo.css
+./php-symfony2_hhvm/web/app_dev.php
+./php-symfony2_hhvm/web/app.php

+ 1 - 0
frameworks/PHP/symfony2_hhvm/src/.htaccess

@@ -0,0 +1 @@
+deny from all

+ 9 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/AcmeDemoBundle.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace Acme\DemoBundle;
+
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+class AcmeDemoBundle extends Bundle
+{
+}

+ 57 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/DemoController.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Acme\DemoBundle\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\RedirectResponse;
+use Acme\DemoBundle\Form\ContactType;
+
+// these import the "@Route" and "@Template" annotations
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
+
+class DemoController extends Controller
+{
+    /**
+     * @Route("/", name="_demo")
+     * @Template()
+     */
+    public function indexAction()
+    {
+        return array();
+    }
+
+    /**
+     * @Route("/hello/{name}", name="_demo_hello")
+     * @Template()
+     */
+    public function helloAction($name)
+    {
+        return array('name' => $name);
+    }
+
+    /**
+     * @Route("/contact", name="_demo_contact")
+     * @Template()
+     */
+    public function contactAction()
+    {
+        $form = $this->get('form.factory')->create(new ContactType());
+
+        $request = $this->get('request');
+        if ($request->isMethod('POST')) {
+            $form->bind($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')->getFlashBag()->set('notice', 'Message sent!');
+
+                return new RedirectResponse($this->generateUrl('_demo'));
+            }
+        }
+
+        return array('form' => $form->createView());
+    }
+}

+ 69 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/SecuredController.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace Acme\DemoBundle\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\Security\Core\SecurityContext;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
+use JMS\SecurityExtraBundle\Annotation\Secure;
+
+/**
+ * @Route("/demo/secured")
+ */
+class SecuredController extends Controller
+{
+    /**
+     * @Route("/login", name="_demo_login")
+     * @Template()
+     */
+    public function loginAction()
+    {
+        if ($this->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);
+    }
+}

+ 18 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Controller/WelcomeController.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Acme\DemoBundle\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+
+class WelcomeController extends Controller
+{
+    public function indexAction()
+    {
+        /*
+         * The action's view can be rendered using render() method
+         * or @Template annotation as demonstrated in DemoController.
+         *
+         */
+        return $this->render('AcmeDemoBundle:Welcome:index.html.twig');
+    }
+}

+ 22 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/DependencyInjection/AcmeDemoExtension.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace Acme\DemoBundle\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
+use Symfony\Component\HttpKernel\DependencyInjection\Extension;
+use Symfony\Component\Config\FileLocator;
+
+class AcmeDemoExtension extends Extension
+{
+    public function load(array $configs, ContainerBuilder $container)
+    {
+        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+        $loader->load('services.xml');
+    }
+
+    public function getAlias()
+    {
+        return 'acme_demo';
+    }
+}

+ 25 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/EventListener/ControllerListener.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace Acme\DemoBundle\EventListener;
+
+use Symfony\Component\EventDispatcher\Event;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
+use Acme\DemoBundle\Twig\Extension\DemoExtension;
+
+class ControllerListener
+{
+    protected $extension;
+
+    public function __construct(DemoExtension $extension)
+    {
+        $this->extension = $extension;
+    }
+
+    public function onKernelController(FilterControllerEvent $event)
+    {
+        if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
+            $this->extension->setController($event->getController());
+        }
+    }
+}

+ 20 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Form/ContactType.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace Acme\DemoBundle\Form;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+
+class ContactType extends AbstractType
+{
+    public function buildForm(FormBuilderInterface $builder, array $options)
+    {
+        $builder->add('email', 'email');
+        $builder->add('message', 'textarea');
+    }
+
+    public function getName()
+    {
+        return 'contact';
+    }
+}

+ 18 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/config/services.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+
+<container xmlns="http://symfony.com/schema/dic/services"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+
+    <services>
+        <service id="twig.extension.acme.demo" class="Acme\DemoBundle\Twig\Extension\DemoExtension" public="false">
+            <tag name="twig.extension" />
+            <argument type="service" id="twig.loader" />
+        </service>
+
+        <service id="acme.demo.listener" class="Acme\DemoBundle\EventListener\ControllerListener">
+            <tag name="kernel.event_listener" event="kernel.controller" method="onKernelController" />
+            <argument type="service" id="twig.extension.acme.demo" />
+        </service>
+    </services>
+</container>

+ 101 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/css/demo.css

@@ -0,0 +1,101 @@
+body {
+    font-size: 14px;
+    font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
+h1.title {
+    font-size: 45px;
+    padding-bottom: 30px;
+}
+.sf-reset 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;
+}
+#symfony-header {
+    position: relative;
+    padding: 30px 30px 20px 30px;
+}
+.sf-reset .symfony-blocks-welcome {
+    overflow: hidden;
+}
+.sf-reset .symfony-blocks-welcome > div {
+    background-color: whitesmoke;
+    float:            left;
+    width:            240px;
+    margin-right:     14px;
+    text-align:       center;
+    padding:          26px 20px;
+}
+.sf-reset .symfony-blocks-welcome > div.block-demo {
+    margin-right: 0;
+}
+.sf-reset .symfony-blocks-welcome .illustration {
+    padding-bottom: 20px;
+}
+.sf-reset .symfony-blocks-help {
+    overflow: hidden;
+}
+.sf-reset .symfony-blocks-help {
+    margin-top: 30px;
+    padding:    18px;
+    border:     1px solid #E6E6E6;
+}
+.sf-reset .symfony-blocks-help > div {
+    width:        254px;
+    float:        left;
+}
+.flash-message {
+    padding: 10px;
+    margin: 5px;
+    margin-top: 15px;
+    background-color: #ffe;
+}
+.sf-reset .error {
+    color: red;
+}
+#login label, #contact_form label {
+    display: block;
+    float: left;
+    width: 90px;
+}
+.sf-reset ul#menu {
+    float: right;
+    margin-bottom: 20px;
+    padding-left: 0;
+}
+.sf-reset #menu li {
+    padding-left: 0;
+    margin-right: 10px;
+    display: inline;
+}
+.sf-reset a,
+.sf-reset li a {
+    color: #08C;
+    text-decoration: none;
+}
+.sf-reset a:hover,
+.sf-reset li a:hover {
+    color: #08C;
+    text-decoration: underline;
+}
+.sf-reset .symfony-content pre {
+    white-space: pre;
+    font-family: monospace;
+}

BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/blue-arrow.png


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/field-background.gif


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/logo.gif


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/search.png


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-configure.gif


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-demo.gif


BIN
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/public/images/welcome-quick-tour.gif


+ 15 - 0
frameworks/PHP/symfony2_hhvm/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 %}
+    <form action="{{ path('_demo_contact') }}" method="POST" id="contact_form">
+        {{ form_errors(form) }}
+
+        {{ form_row(form.email) }}
+        {{ form_row(form.message) }}
+
+        {{ form_rest(form) }}
+        <input type="submit" value="Send" class="symfony-button-grey" />
+    </form>
+{% endblock %}

+ 9 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig

@@ -0,0 +1,9 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+    <h1>Hello {{ name }}!</h1>
+{% endblock %}
+
+{% set code = code(_self) %}

+ 14 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Demo/index.html.twig

@@ -0,0 +1,14 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block title "Symfony - Demos" %}
+
+{% block content_header '' %}
+
+{% block content %}
+    <h1 class="title">Available demos</h1>
+    <ul id="demo-list">
+        <li><a href="{{ path('_demo_hello', {'name': 'World'}) }}">Hello World</a></li>
+        <li><a href="{{ path('_demo_secured_hello', {'name': 'World'}) }}">Access the secured area</a> <a href="{{ path('_demo_login') }}">Go to the login page</a></li>
+        {# <li><a href="{{ path('_demo_contact') }}">Send a Message</a></li> #}
+    </ul>
+{% endblock %}

+ 11 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/hello.html.twig

@@ -0,0 +1,11 @@
+{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+    <h1 class="title">Hello {{ name }}!</h1>
+
+    <a href="{{ path('_demo_secured_hello_admin', { 'name': name }) }}">Hello resource secured for <strong>admin</strong> only.</a>
+{% endblock %}
+
+{% set code = code(_self) %}

+ 9 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/helloadmin.html.twig

@@ -0,0 +1,9 @@
+{% extends "AcmeDemoBundle:Secured:layout.html.twig" %}
+
+{% block title "Hello " ~ name %}
+
+{% block content %}
+    <h1 class="title">Hello {{ name }} secured for Admins only!</h1>
+{% endblock %}
+
+{% set code = code(_self) %}

+ 6 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/layout.html.twig

@@ -0,0 +1,6 @@
+{% extends "AcmeDemoBundle::layout.html.twig" %}
+
+{% block content_header_more %}
+    {{ parent() }}
+    <li>logged in as <strong>{{ app.user ? app.user.username : 'Anonymous' }}</strong> - <a href="{{ path('_demo_logout') }}">Logout</a></li>
+{% endblock %}

+ 35 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Secured/login.html.twig

@@ -0,0 +1,35 @@
+{% extends 'AcmeDemoBundle::layout.html.twig' %}
+
+{% block content %}
+    <h1 class="title">Login</h1>
+
+    <p>
+        Choose between two default users: <em>user/userpass</em> <small>(ROLE_USER)</small> or <em>admin/adminpass</em> <small>(ROLE_ADMIN)</small>
+    </p>
+
+    {% if error %}
+        <div class="error">{{ error.message }}</div>
+    {% endif %}
+
+    <form action="{{ path("_security_check") }}" method="post" id="login">
+        <div>
+            <label for="username">Username</label>
+            <input type="text" id="username" name="_username" value="{{ last_username }}" />
+        </div>
+
+        <div>
+            <label for="password">Password</label>
+            <input type="password" id="password" name="_password" />
+        </div>
+
+        <button type="submit" class="sf-button">
+            <span class="border-l">
+                <span class="border-r">
+                    <span class="btn-bg">Login</span>
+                </span>
+            </span>
+        </button>
+    </form>
+{% endblock %}
+
+{% set code = code(_self) %}

+ 83 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/Welcome/index.html.twig

@@ -0,0 +1,83 @@
+{% extends 'AcmeDemoBundle::layout.html.twig' %}
+
+{% block title %}Symfony - Welcome{% endblock %}
+
+{% block content_header '' %}
+
+{% block content %}
+    {% set version = constant('Symfony\\Component\\HttpKernel\\Kernel::MAJOR_VERSION') ~ '.' ~ constant('Symfony\\Component\\HttpKernel\\Kernel::MINOR_VERSION')%}
+
+    <h1 class="title">Welcome!</h1>
+
+    <p>Congratulations! You have successfully installed a new Symfony application.</p>
+
+    <div class="symfony-blocks-welcome">
+        <div class="block-quick-tour">
+            <div class="illustration">
+                <img src="{{ asset('bundles/acmedemo/images/welcome-quick-tour.gif') }}" alt="Quick tour" />
+            </div>
+            <a href="http://symfony.com/doc/{{ version }}/quick_tour/index.html" class="sf-button sf-button-selected">
+                <span class="border-l">
+                    <span class="border-r">
+                        <span class="btn-bg">Read the Quick Tour</span>
+                    </span>
+                </span>
+            </a>
+        </div>
+        {% if app.environment == 'dev' %}
+            <div class="block-configure">
+                <div class="illustration">
+                    <img src="{{ asset('bundles/acmedemo/images/welcome-configure.gif') }}" alt="Configure your application" />
+                </div>
+                <a href="{{ path('_configurator_home') }}" class="sf-button sf-button-selected">
+                    <span class="border-l">
+                        <span class="border-r">
+                            <span class="btn-bg">Configure</span>
+                        </span>
+                    </span>
+                </a>
+            </div>
+        {% endif %}
+        <div class="block-demo">
+            <div class="illustration">
+                <img src="{{ asset('bundles/acmedemo/images/welcome-demo.gif') }}" alt="Demo" />
+            </div>
+            <a href="{{ path('_demo') }}" class="sf-button sf-button-selected">
+                <span class="border-l">
+                    <span class="border-r">
+                        <span class="btn-bg">Run The Demo</span>
+                    </span>
+                </span>
+            </a>
+        </div>
+    </div>
+
+    <div class="symfony-blocks-help">
+        <div class="block-documentation">
+            <ul>
+                <li><strong>Documentation</strong></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/book/index.html">The Book</a></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/cookbook/index.html">The Cookbook</a></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/components/index.html">The Components</a></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/reference/index.html">Reference</a></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/glossary.html">Glossary</a></li>
+            </ul>
+        </div>
+        <div class="block-documentation-more">
+            <ul>
+                <li><strong>Sensio</strong></li>
+                <li><a href="http://trainings.sensiolabs.com">Trainings</a></li>
+                <li><a href="http://books.sensiolabs.com">Books</a></li>
+            </ul>
+        </div>
+        <div class="block-community">
+            <ul>
+                <li><strong>Community</strong></li>
+                <li><a href="http://symfony.com/irc">IRC channel</a></li>
+                <li><a href="http://symfony.com/mailing-lists">Mailing lists</a></li>
+                <li><a href="http://forum.symfony-project.org">Forum</a></li>
+                <li><a href="http://symfony.com/doc/{{ version }}/contributing/index.html">Contributing</a></li>
+            </ul>
+        </div>
+    </div>
+{% endblock %}

+ 37 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Resources/views/layout.html.twig

@@ -0,0 +1,37 @@
+{% extends "TwigBundle::layout.html.twig" %}
+
+{% block head %}
+    <link rel="icon" sizes="16x16" href="{{ asset('favicon.ico') }}" />
+    <link rel="stylesheet" href="{{ asset('bundles/acmedemo/css/demo.css') }}" />
+{% endblock %}
+
+{% block title 'Demo Bundle' %}
+
+{% block body %}
+    {% for flashMessage in app.session.flashbag.get('notice') %}
+        <div class="flash-message">
+            <em>Notice</em>: {{ flashMessage }}
+        </div>
+    {% endfor %}
+
+    {% block content_header %}
+        <ul id="menu">
+            {% block content_header_more %}
+                <li><a href="{{ path('_demo') }}">Demo Home</a></li>
+            {% endblock %}
+        </ul>
+
+        <div style="clear: both"></div>
+    {% endblock %}
+
+    <div class="block">
+        {% block content %}{% endblock %}
+    </div>
+
+    {% if code is defined %}
+        <h2>Code behind this page</h2>
+        <div class="block">
+            <div class="symfony-content">{{ code|raw }}</div>
+        </div>
+    {% endif %}
+{% endblock %}

+ 17 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace Acme\DemoBundle\Tests\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
+
+class DemoControllerTest extends WebTestCase
+{
+    public function testIndex()
+    {
+        $client = static::createClient();
+
+        $crawler = $client->request('GET', '/demo/hello/Fabien');
+
+        $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count());
+    }
+}

+ 81 - 0
frameworks/PHP/symfony2_hhvm/src/Acme/DemoBundle/Twig/Extension/DemoExtension.php

@@ -0,0 +1,81 @@
+<?php
+
+namespace Acme\DemoBundle\Twig\Extension;
+
+use CG\Core\ClassUtils;
+
+class DemoExtension extends \Twig_Extension
+{
+    protected $loader;
+    protected $controller;
+
+    public function __construct(\Twig_LoaderInterface $loader)
+    {
+        $this->loader = $loader;
+    }
+
+    public function setController($controller)
+    {
+        $this->controller = $controller;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFunctions()
+    {
+        return array(
+            'code' => new \Twig_Function_Method($this, 'getCode', array('is_safe' => array('html'))),
+        );
+    }
+
+    public function getCode($template)
+    {
+        // highlight_string highlights php code only if '<?php' tag is present.
+        $controller = highlight_string("<?php" . $this->getControllerCode(), true);
+        $controller = str_replace('<span style="color: #0000BB">&lt;?php&nbsp;&nbsp;&nbsp;&nbsp;</span>', '&nbsp;&nbsp;&nbsp;&nbsp;', $controller);
+
+        $template = htmlspecialchars($this->getTemplateCode($template), ENT_QUOTES, 'UTF-8');
+
+        // remove the code block
+        $template = str_replace('{% set code = code(_self) %}', '', $template);
+
+        return <<<EOF
+<p><strong>Controller Code</strong></p>
+<pre>$controller</pre>
+
+<p><strong>Template Code</strong></p>
+<pre>$template</pre>
+EOF;
+    }
+
+    protected function getControllerCode()
+    {
+        $class = get_class($this->controller[0]);
+        if (class_exists('CG\Core\ClassUtils')) {
+            $class = ClassUtils::getUserClass($class);
+        }
+
+        $r = new \ReflectionClass($class);
+        $m = $r->getMethod($this->controller[1]);
+
+        $code = file($r->getFilename());
+
+        return '    '.$m->getDocComment()."\n".implode('', array_slice($code, $m->getStartline() - 1, $m->getEndLine() - $m->getStartline() + 1));
+    }
+
+    protected function getTemplateCode($template)
+    {
+        return $this->loader->getSource($template->getTemplateName());
+    }
+
+    /**
+     * Returns the name of the extension.
+     *
+     * @return string The extension name
+     */
+    public function getName()
+    {
+        return 'demo';
+    }
+}

+ 131 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Controller/BenchController.php

@@ -0,0 +1,131 @@
+<?php
+
+namespace Skamander\BenchmarkBundle\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Skamander\BenchmarkBundle\Entity\Fortune;
+
+class BenchController extends Controller
+{
+
+    public function jsonAction()
+    {
+        return new JsonResponse(array('message' => 'Hello, World!'));
+    }
+
+    public function dbAction(Request $request)
+    {
+        $queries = $request->query->getInt('queries', 1);
+        $queries = max(1, $queries);
+        $queries = min(500, $queries);
+
+        // possibility for enhancement is the use of SplFixedArray -> http://php.net/manual/de/class.splfixedarray.php
+        $worlds = array();
+        $repo = $this->getDoctrine()
+            ->getRepository('SkamanderBenchmarkBundle:World');
+
+        for ($i = 0; $i < $queries; ++$i) {
+            $worlds[] =  $repo->find(mt_rand(1, 10000));
+        }
+
+        if ($queries == 1 && !$request->query->has('queries')) {
+            $worlds = $worlds[0];
+        }
+
+        return new JsonResponse($worlds);
+    }
+
+    public function dbRawAction(Request $request)
+    {
+        $queries = $request->query->getInt('queries', 1);
+
+        // possibility for enhancement is the use of SplFixedArray -> http://php.net/manual/de/class.splfixedarray.php
+        $worlds = array();
+        $conn = $this->get('database_connection');
+
+        for($i = 0; $i < $queries; ++$i) {
+            $worlds[] =  $conn->fetchAssoc('SELECT * FROM World WHERE id = ?', array(mt_rand(1, 10000)));
+        }
+        
+        if ($queries == 1) {
+            $worlds = $worlds[0];
+        }
+
+        return new JsonResponse($worlds);
+    }
+
+    public function fortunesAction()
+    {
+        $repo = $this->getDoctrine()
+            ->getRepository('SkamanderBenchmarkBundle:Fortune');
+        $fortunes = $repo->findAll();
+
+        $runtimeFortune = new Fortune();
+        $runtimeFortune->setId(0)
+            ->setMessage('Additional fortune added at request time.');
+
+        $fortunes[] = $runtimeFortune;
+
+        usort($fortunes, function($left, $right) {
+            return strcmp($left->message, $right->message);
+        });
+
+        return $this->render("SkamanderBenchmarkBundle:Bench:fortunes.html.twig", [
+            'fortunes' => $fortunes
+        ]);
+    }
+
+    public function fortunesPhpAction()
+    {
+        $repo = $this->getDoctrine()
+            ->getRepository('SkamanderBenchmarkBundle:Fortune');
+        $fortunes = $repo->findAll();
+
+        $runtimeFortune = new Fortune();
+        $runtimeFortune->setId(0)
+            ->setMessage('Additional fortune added at request time.');
+
+        $fortunes[] = $runtimeFortune;
+
+        usort($fortunes, function($left, $right) {
+            return strcmp($left->message, $right->message);
+        });
+
+        return $this->render("SkamanderBenchmarkBundle:Bench:fortunes.html.php", [
+            'fortunes' => $fortunes
+        ]);
+    }
+
+    public function fortunesRawAction()
+    {
+        $repo = $this->getDoctrine()
+            ->getRepository('SkamanderBenchmarkBundle:Fortune');
+        $fortunes = $repo->findAll();
+
+        $runtimeFortune = new Fortune();
+        $runtimeFortune->setId(0)
+            ->setMessage('Additional fortune added at request time.');
+
+        $fortunes[] = $runtimeFortune;
+
+        usort($fortunes, function($left, $right) {
+            return strcmp($left->message, $right->message);
+        });
+
+        // This is not the symfony way to work with templates! It's implemented to show users
+        // who don't want to use template engines (like twig), or template sugar (like the slots etc.
+        // from symfony 2), because in their opinion already built-in php constructs like foreach +
+        // if else + include etc. are enough, that the performance impact should be neglectable, and
+        // that the advantages outweigh the disadvantages (performance).
+        $title = 'Fortunes';
+
+        ob_start();
+        include __DIR__ . '/../Resources/views/Bench/raw/content.php';
+        $response = ob_get_clean();
+
+        return new Response($response);
+    }
+}

+ 69 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/Fortune.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace Skamander\BenchmarkBundle\Entity;
+
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * @ORM\Entity
+ * @ORM\Table(name="Fortune")
+ */
+class Fortune
+{
+    /**
+     * @ORM\Id
+     * @ORM\Column(type="integer")
+     */
+    public $id;
+
+    /**
+     * @ORM\Column(type="string")
+     */
+    public $message;
+
+    /**
+     * Set id
+     *
+     * @param integer $id
+     * @return Fortune
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+
+        return $this;
+    }
+
+    /**
+     * Get id
+     *
+     * @return integer
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * Set message
+     *
+     * @param string $message
+     * @return Fortune
+     */
+    public function setMessage($message)
+    {
+        $this->message = $message;
+
+        return $this;
+    }
+
+    /**
+     * Get message
+     *
+     * @return string
+     */
+    public function getMessage()
+    {
+        return $this->message;
+    }
+}

+ 85 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Entity/World.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace Skamander\BenchmarkBundle\Entity;
+
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * @ORM\Entity
+ * @ORM\Table(name="World")
+ */
+class World /* implements JsonSerializable */
+{
+   /**
+    * @ORM\Id
+    * @ORM\Column(type="integer")
+    */
+    public $id;
+
+   /**
+    * @ORM\Column(type="integer")
+    */
+    public $randomNumber;
+
+
+    /**
+     * Although this is a benchmark, implemented this so
+     * we don't have to make our members public. :)
+     *
+     * @return array
+     */
+    /*
+    public function jsonSerialize() {
+        return [
+            'id' => $this->id,
+            'randomNumber' => $this->randomNumber
+        ];
+    }
+    */
+
+    /**
+     * Set id
+     *
+     * @param integer $id
+     * @return World
+     */
+    public function setId($id)
+    {
+        $this->id = $id;
+    
+        return $this;
+    }
+
+    /**
+     * Get id
+     *
+     * @return integer 
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * Set randomNumber
+     *
+     * @param integer $randomNumber
+     * @return World
+     */
+    public function setRandomNumber($randomNumber)
+    {
+        $this->randomNumber = $randomNumber;
+    
+        return $this;
+    }
+
+    /**
+     * Get randomNumber
+     *
+     * @return integer 
+     */
+    public function getRandomNumber()
+    {
+        return $this->randomNumber;
+    }
+}

+ 18 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.php

@@ -0,0 +1,18 @@
+<?php $view->extend('SkamanderBenchmarkBundle::layout.html.php') ?>
+
+<?php $view['slots']->set('title', 'Fortunes') ?>
+
+<?php $view['slots']->start('content') ?>
+<table>
+    <tr>
+        <th>id</th>
+        <th>message</th>
+    </tr>
+    <?php foreach($fortunes as $fortune): ?>
+        <tr>
+            <td><?php echo $view->escape($fortune->id); ?></td>
+            <td><?php echo $view->escape($fortune->message); ?></td>
+        </tr>
+    <?php endforeach; ?>
+</table>
+<?php $view['slots']->stop() ?>

+ 20 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/fortunes.html.twig

@@ -0,0 +1,20 @@
+{% extends "SkamanderBenchmarkBundle::layout.html.twig" %}
+
+{% block title "Fortunes" %}
+
+{% block content %}
+    <table>
+        <tr>
+            <th>id</th>
+            <th>message</th>
+        </tr>
+
+        {% for fortune in fortunes %}
+            <tr>
+                <td>{{ fortune.id }}</td>
+                <td>{{ fortune.message }}</td>
+            </tr>
+        {% endfor %}
+
+    </table>
+{% endblock %}

+ 5 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/content.php

@@ -0,0 +1,5 @@
+<?php include 'template_header.php'; ?>
+
+    <?php include 'fortunes.php'; ?>
+
+<?php include 'template_footer.php'; ?>

+ 14 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/fortunes.php

@@ -0,0 +1,14 @@
+<table>
+    <tr>
+        <th>id</th>
+        <th>message</th>
+    </tr>
+
+    <?php foreach($fortunes as $fortune): ?>
+        <tr>
+            <td><?php echo $fortune->id; ?></td>
+            <td><?php echo htmlspecialchars($fortune->message, ENT_QUOTES, "UTF-8", false); ?></td>
+        </tr>
+    <?php endforeach; ?>
+
+</table>

+ 2 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_footer.php

@@ -0,0 +1,2 @@
+</body>
+</html>

+ 6 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/Bench/raw/template_header.php

@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title><?php echo $title ?></title>
+</head>
+<body>

+ 7 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.php

@@ -0,0 +1,7 @@
+<?php $view->extend('::base.html.php') ?>
+
+<?php $view['slots']->set('title', 'Fortunes') ?>
+
+<?php $view['slots']->start('body') ?>
+        <?php $view['slots']->output('content') ?>
+<?php $view['slots']->stop() ?>

+ 7 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/Resources/views/layout.html.twig

@@ -0,0 +1,7 @@
+{% extends '::base.html.twig' %}
+
+{% block title 'Fortunes' %}
+
+{% block body %}
+        {% block content %}{% endblock %}
+{% endblock %}

+ 9 - 0
frameworks/PHP/symfony2_hhvm/src/Skamander/BenchmarkBundle/SkamanderBenchmarkBundle.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace Skamander\BenchmarkBundle;
+
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+class SkamanderBenchmarkBundle extends Bundle
+{
+}

+ 48 - 0
frameworks/PHP/symfony2_hhvm/web/.htaccess

@@ -0,0 +1,48 @@
+# Use the front controller as index file. It serves as fallback solution when
+# every other rewrite/redirect fails (e.g. in an aliased environment without
+# mod_rewrite). Additionally, this reduces the matching process for the
+# startpage (path "/") because otherwise Apache will apply the rewritting rules
+# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
+DirectoryIndex app.php
+
+<IfModule mod_rewrite.c>
+    RewriteEngine On
+
+    # Redirect to URI without front controller to prevent duplicate content
+    # (with and without `/app.php`). Only do this redirect on the initial
+    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
+    # endless redirect loop (request -> rewrite to front controller ->
+    # redirect -> request -> ...).
+    # So in case you get a "too many redirects" error or you always get redirected
+    # to the startpage because your Apache does not expose the REDIRECT_STATUS
+    # environment variable, you have 2 choices:
+    # - disable this feature by commenting the following 2 lines or
+    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
+    #   following RewriteCond (best solution)
+    RewriteCond %{ENV:REDIRECT_STATUS} ^$
+    RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]
+
+    # If the requested filename exists, simply serve it.
+    # We only want to let Apache serve files and not directories.
+    RewriteCond %{REQUEST_FILENAME} -f
+    RewriteRule .? - [L]
+
+    # The following rewrites all other queries to the front controller. The
+    # condition ensures that if you are using Apache aliases to do mass virtual
+    # hosting, the base path will be prepended to allow proper resolution of the
+    # app.php file; it will work in non-aliased environments as well, providing
+    # a safe, one-size fits all solution.
+    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
+    RewriteRule ^(.*) - [E=BASE:%1]
+    RewriteRule .? %{ENV:BASE}app.php [L]
+</IfModule>
+
+<IfModule !mod_rewrite.c>
+    <IfModule mod_alias.c>
+        # When mod_rewrite is not available, we instruct a temporary redirect of
+        # the startpage to the front controller explicitly so that the website
+        # and the generated links can still be used.
+        RedirectMatch 302 ^/$ /app.php/
+        # RedirectTemp cannot be used instead
+    </IfModule>
+</IfModule>

+ 22 - 0
frameworks/PHP/symfony2_hhvm/web/app.php

@@ -0,0 +1,22 @@
+<?php
+
+use Symfony\Component\HttpFoundation\Request;
+
+$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
+
+require_once __DIR__.'/../app/AppKernel.php';
+
+// FrameworkBenchmark rules prohibit using AppCache, 
+// specifically every request for the JSON test type
+// must be handled separately
+// 
+// require_once __DIR__.'/../app/AppCache.php';
+
+$kernel = new AppKernel('prod', false);
+$kernel->loadClassCache();
+//$kernel = new AppCache($kernel);
+Request::enableHttpMethodParameterOverride();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);

+ 28 - 0
frameworks/PHP/symfony2_hhvm/web/app_dev.php

@@ -0,0 +1,28 @@
+<?php
+
+use Symfony\Component\HttpFoundation\Request;
+
+// If you don't want to setup permissions the proper way, just uncomment the following PHP line
+// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
+//umask(0000);
+
+// This check prevents access to debug front controllers that are deployed by accident to production servers.
+// Feel free to remove this, extend it, or make something more sophisticated.
+if (isset($_SERVER['HTTP_CLIENT_IP'])
+    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
+    || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1'))
+) {
+    header('HTTP/1.0 403 Forbidden');
+    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
+}
+
+$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
+require_once __DIR__.'/../app/AppKernel.php';
+
+$kernel = new AppKernel('dev', true);
+$kernel->loadClassCache();
+Request::enableHttpMethodParameterOverride();
+$request = Request::createFromGlobals();
+$response = $kernel->handle($request);
+$response->send();
+$kernel->terminate($request, $response);

BIN
frameworks/PHP/symfony2_hhvm/web/apple-touch-icon.png


+ 101 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/css/demo.css

@@ -0,0 +1,101 @@
+body {
+    font-size: 14px;
+    font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
+h1.title {
+    font-size: 45px;
+    padding-bottom: 30px;
+}
+.sf-reset 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;
+}
+#symfony-header {
+    position: relative;
+    padding: 30px 30px 20px 30px;
+}
+.sf-reset .symfony-blocks-welcome {
+    overflow: hidden;
+}
+.sf-reset .symfony-blocks-welcome > div {
+    background-color: whitesmoke;
+    float:            left;
+    width:            240px;
+    margin-right:     14px;
+    text-align:       center;
+    padding:          26px 20px;
+}
+.sf-reset .symfony-blocks-welcome > div.block-demo {
+    margin-right: 0;
+}
+.sf-reset .symfony-blocks-welcome .illustration {
+    padding-bottom: 20px;
+}
+.sf-reset .symfony-blocks-help {
+    overflow: hidden;
+}
+.sf-reset .symfony-blocks-help {
+    margin-top: 30px;
+    padding:    18px;
+    border:     1px solid #E6E6E6;
+}
+.sf-reset .symfony-blocks-help > div {
+    width:        254px;
+    float:        left;
+}
+.flash-message {
+    padding: 10px;
+    margin: 5px;
+    margin-top: 15px;
+    background-color: #ffe;
+}
+.sf-reset .error {
+    color: red;
+}
+#login label, #contact_form label {
+    display: block;
+    float: left;
+    width: 90px;
+}
+.sf-reset ul#menu {
+    float: right;
+    margin-bottom: 20px;
+    padding-left: 0;
+}
+.sf-reset #menu li {
+    padding-left: 0;
+    margin-right: 10px;
+    display: inline;
+}
+.sf-reset a,
+.sf-reset li a {
+    color: #08C;
+    text-decoration: none;
+}
+.sf-reset a:hover,
+.sf-reset li a:hover {
+    color: #08C;
+    text-decoration: underline;
+}
+.sf-reset .symfony-content pre {
+    white-space: pre;
+    font-family: monospace;
+}

BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/blue-arrow.png


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/field-background.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/logo.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/search.png


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-configure.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-demo.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/acmedemo/images/welcome-quick-tour.gif


+ 150 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/body.css

@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.com/yui/license.html
+version: 3.1.2
+build: 56
+*/
+.sf-reset html{color:#000;background:#FFF;}.sf-reset body,.sf-reset div,.sf-reset dl,.sf-reset dt,.sf-reset dd,.sf-reset ul,.sf-reset ol,.sf-reset li,.sf-reset h1,.sf-reset h2,.sf-reset h3,.sf-reset h4,.sf-reset h5,.sf-reset h6,.sf-reset pre,.sf-reset code,.sf-reset form,.sf-reset fieldset,.sf-reset legend,.sf-reset input,.sf-reset textarea,.sf-reset p,.sf-reset blockquote,.sf-reset th,.sf-reset td{margin:0;padding:0;}.sf-reset table{border-collapse:collapse;border-spacing:0;}.sf-reset fieldset,.sf-reset img{border:0;}.sf-reset address,.sf-reset caption,.sf-reset cite,.sf-reset code,.sf-reset dfn,.sf-reset em,.sf-reset strong,.sf-reset th,.sf-reset var{font-style:normal;font-weight:normal;}.sf-reset li{list-style:none;}.sf-reset caption,.sf-reset th{text-align:left;}.sf-reset h1,.sf-reset h2,.sf-reset h3,.sf-reset h4,.sf-reset h5,.sf-reset h6{font-size:100%;font-weight:normal;}.sf-reset q:before,.sf-reset q:after{content:'';}.sf-reset abbr,.sf-reset acronym{border:0;font-variant:normal;}.sf-reset sup{vertical-align:text-top;}.sf-reset sub{vertical-align:text-bottom;}.sf-reset input,.sf-reset textarea,.sf-reset select{font-family:inherit;font-size:inherit;font-weight:inherit;}.sf-reset input,.sf-reset textarea,.sf-reset select{*font-size:100%;}.sf-reset legend{color:#000;}
+.sf-reset html,
+.sf-reset body {
+    width: 100%;
+    min-height: 100%;
+    _height: 100%;
+    margin: 0;
+    padding: 0;
+}
+.sf-reset body {
+    font: 1em "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+    text-align: left;
+    background-color: #efefef;
+}
+.sf-reset abbr {
+    border-bottom: 1px dotted #000;
+    cursor: help;
+}
+.sf-reset p {
+    font-size: 14px;
+    line-height: 20px;
+    padding-bottom: 20px;
+}
+.sf-reset strong {
+    color: #313131;
+    font-weight: bold;
+}
+.sf-reset a {
+    color: #6c6159;
+}
+.sf-reset a img {
+    border: none;
+}
+.sf-reset a:hover {
+    text-decoration: underline;
+}
+.sf-reset em {
+    font-style: italic;
+}
+.sf-reset h2,
+.sf-reset h3 {
+    font-weight: bold;
+}
+.sf-reset h1 {
+    font-family: Georgia, "Times New Roman", Times, serif;
+    font-size: 20px;
+    color: #313131;
+    word-break: break-all;
+}
+.sf-reset li {
+    padding-bottom: 10px;
+}
+.sf-reset .block {
+    -moz-border-radius: 16px;
+    -webkit-border-radius: 16px;
+    border-radius: 16px;
+    margin-bottom: 20px;
+    background-color: #FFFFFF;
+    border: 1px solid #dfdfdf;
+    padding: 40px 50px;
+}
+.sf-reset h2 {
+    font-size: 16px;
+    font-family: Arial, Helvetica, sans-serif;
+}
+.sf-reset li a {
+    background: none;
+    color: #868686;
+    text-decoration: none;
+}
+.sf-reset li a:hover {
+    background: none;
+    color: #313131;
+    text-decoration: underline;
+}
+.sf-reset ol {
+    padding: 10px 0;
+}
+.sf-reset ol li {
+    list-style: decimal;
+    margin-left: 20px;
+    padding: 2px;
+    padding-bottom: 20px;
+}
+.sf-reset ol ol li {
+    list-style-position: inside;
+    margin-left: 0;
+    white-space: nowrap;
+    font-size: 12px;
+    padding-bottom: 0;
+}
+.sf-reset li .selected {
+    background-color: #ffd;
+}
+.sf-button {
+    display: -moz-inline-box;
+    display: inline-block;
+    text-align: center;
+    vertical-align: middle;
+    border: 0;
+    background: transparent none;
+    text-transform: uppercase;
+    cursor: pointer;
+    font: bold 11px Arial, Helvetica, sans-serif;
+}
+.sf-button span {
+    text-decoration: none;
+    display: block;
+    height: 28px;
+    float: left;
+}
+.sf-button .border-l {
+    text-decoration: none;
+    display: block;
+    height: 28px;
+    float: left;
+    padding: 0 0 0 7px;
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAcCAYAAACtQ6WLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQtJREFUeNpiPHnyJAMakARiByDWYEGT8ADiYGVlZStubm5xlv///4MEQYoKZGRkQkRERLRYWVl5wYJQyXBZWdkwCQkJUxAHKgaWlAHSLqKiosb//v1DsYMFKGCvoqJiDmQzwXTAJYECulxcXNLoumCSoszMzDzoumDGghQwYZUECWIzkrAkSIIGOmlkLI10AiX//P379x8jIyMTNmPf/v79+ysLCwsvuiQoNi5//fr1Kch4dAyS3P/gwYMTQBP+wxwHw0xA4gkQ73v9+vUZdJ2w1Lf82bNn4iCHCQoKasHsZw4ODgbRIL8c+/Lly5M3b978Y2dn5wC6npkFLXnsAOKLjx49AmUHLYAAAwBoQubG016R5wAAAABJRU5ErkJggg==) no-repeat top left;
+}
+.sf-button .border-r {
+    padding: 0 7px 0 0;
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAcCAYAAACtQ6WLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR1JREFUeNpiPHnyZCMDA8MNID5gZmb2nAEJMH7//v3N169fX969e/cYkL8WqGAHXPLv37//QYzfv39/fvPmzbUnT56sAXInmJub/2H5/x8sx8DCwsIrISFhDmQyPX78+CmQXs70798/BmQsKipqBNTgdvz4cWkmkE5kDATMioqKZkCFdiwg1eiAi4tLGqhQF24nMmBmZuYEigth1QkEbEBxTlySYPvJkwSJ00AnjYylgU6gxB8g/oFVEphkvgLF32KNMmCCewYUv4qhEyj47+HDhyeBzIMYOoEp8CxQw56wsLAncJ1//vz5/P79+2svX74EJc2V4BT58+fPd8CE/QKYHMGJOiIiAp6oWW7evDkNSF8DZYfIyEiU7AAQYACJ2vxVdJW4eQAAAABJRU5ErkJggg==) right top no-repeat;
+}
+.sf-button .btn-bg {
+    padding: 0px 14px;
+    color: #636363;
+    line-height: 28px;
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAYAAACgXdXMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiPnny5EKGf//+/Wf6//8/A4QAcrGzKCZwGc9sa2urBBBgAIbDUoYVp9lmAAAAAElFTkSuQmCC) repeat-x top left;
+}
+.sf-button:hover .border-l,
+.sf-button-selected .border-l {
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAcCAYAAACtQ6WLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAR9JREFUeNpi/P//PwMyOHfunDqQSgNiexZkibNnzxYBqZa3HOs5v7PcYQBLnjlzhg1IbfzIdsTjA/t+ht9Mr8GKwZL//v3r+sB+0OMN+zqIEf8gFMvJkyd1gXTOa9YNDP//otrPAtSV/Jp9HfPff78Z0AEL0LUeXxivMfxD0wXTqfjj/2ugkf+wSrL9/YtpJEyS4S8WI5Ek/+GR/POPFjr//cenE6/kP9q4Fo/kr39/mdj+M/zFkGQCSj5i+ccPjLJ/GBgkuYOHQR1sNDpmAkb2LBmWwL///zKCIxwZM0VHR18G6p4uxeLLAA4tJMwEshiou1iMxXaHLGswA+t/YbhORuQUv2DBAnCifvxzI+enP3dQJUFg/vz5sOzgBBBgAPxX9j0YnH4JAAAAAElFTkSuQmCC) no-repeat top left;
+}
+.sf-button:hover .border-r,
+.sf-button-selected .border-r {
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAcCAYAAACtQ6WLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT5JREFUeNpiPHv27BkGBoaDQDzLyMjoJgMSYHrM3WX8hn1d0f///88DFRYhSzIuv2X5H8Rg/SfKIPDTkYH/l80OINffxMTkF9O/f/8ZQPgnwyuGl+wrGd6x7vf49+9fO9jYf3+Bkkj4NesmBqAV+SdPntQC6vzHgIz//gOawbqOGchOxtAJwp8Zr4F0e7D8/fuPAR38/P8eZIo0yz8skv8YvoIk+YE6/zNgAyD7sRqLkPzzjxY6/+HS+R+fTkZ8djLh08lCUCcuSWawJGbwMTGwg7zyBatX2Bj5QZKPsBrLzaICktzN8g/NWEYGZgYZjoC/wMiei5FMpFh8QPSU6Ojoy3Cd7EwiDBJsDgxiLNY7gLrKQGIsHAxSDHxAO2TZ/b8D+TVxcXF9MCtYtLiKLgDpfUDVsxITE1GyA0CAAQA2E/N8VuHyAAAAAABJRU5ErkJggg==) right top no-repeat;
+}
+.sf-button:hover .btn-bg,
+.sf-button-selected .btn-bg {
+    color: #FFFFFF;
+    text-shadow:0 1px 1px #6b9311;
+    background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiPnv2LNMdvlymf///M/37B8R/QfQ/MP33L4j+B6Qh7L9//sHpf2h8MA1V+w/KRjYLaDaLCU8vQIABAFO3TxZriO4yAAAAAElFTkSuQmCC) repeat-x top left;
+}

+ 108 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/exception.css

@@ -0,0 +1,108 @@
+.sf-reset .traces {
+    padding-bottom: 14px;
+}
+.sf-reset .traces li {
+    font-size: 12px;
+    color: #868686;
+    padding: 5px 4px;
+    list-style-type: decimal;
+    margin-left: 20px;
+    white-space: break-word;
+}
+.sf-reset #logs .traces li.error {
+    font-style: normal;
+    color: #AA3333;
+    background: #f9ecec;
+}
+.sf-reset #logs .traces li.warning {
+    font-style: normal;
+    background: #ffcc00;
+}
+/* fix for Opera not liking empty <li> */
+.sf-reset .traces li:after {
+    content: "\00A0";
+}
+.sf-reset .trace {
+    border: 1px solid #D3D3D3;
+    padding: 10px;
+    overflow: auto;
+    margin: 10px 0 20px;
+}
+.sf-reset .block-exception {
+    -moz-border-radius: 16px;
+    -webkit-border-radius: 16px;
+    border-radius: 16px;
+    margin-bottom: 20px;
+    background-color: #f6f6f6;
+    border: 1px solid #dfdfdf;
+    padding: 30px 28px;
+    word-wrap: break-word;
+    overflow: hidden;
+}
+.sf-reset .block-exception div {
+    color: #313131;
+    font-size: 10px;
+}
+.sf-reset .block-exception-detected .illustration-exception,
+.sf-reset .block-exception-detected .text-exception {
+    float: left;
+}
+.sf-reset .block-exception-detected .illustration-exception {
+    width: 152px;
+}
+.sf-reset .block-exception-detected .text-exception {
+    width: 670px;
+    padding: 30px 44px 24px 46px;
+    position: relative;
+}
+.sf-reset .text-exception .open-quote,
+.sf-reset .text-exception .close-quote {
+    position: absolute;
+}
+.sf-reset .open-quote {
+    top: 0;
+    left: 0;
+}
+.sf-reset .close-quote {
+    bottom: 0;
+    right: 50px;
+}
+.sf-reset .block-exception p {
+    font-family: Arial, Helvetica, sans-serif;
+}
+.sf-reset .block-exception p a,
+.sf-reset .block-exception p a:hover {
+    color: #565656;
+}
+.sf-reset .logs h2 {
+    float: left;
+    width: 654px;
+}
+.sf-reset .error-count {
+    float: right;
+    width: 170px;
+    text-align: right;
+}
+.sf-reset .error-count span {
+    display: inline-block;
+    background-color: #aacd4e;
+    -moz-border-radius: 6px;
+    -webkit-border-radius: 6px;
+    border-radius: 6px;
+    padding: 4px;
+    color: white;
+    margin-right: 2px;
+    font-size: 11px;
+    font-weight: bold;
+}
+.sf-reset .toggle {
+    vertical-align: middle;
+}
+.sf-reset .linked ul,
+.sf-reset .linked li {
+    display: inline;
+}
+.sf-reset #output-content {
+    color: #000;
+    font-size: 12px;
+}

+ 72 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/framework/css/structure.css

@@ -0,0 +1,72 @@
+html {
+    background: #eee;
+}
+body {
+    font: 11px Verdana, Arial, sans-serif;
+    color: #333;
+}
+.sf-reset, .sf-reset .block, .sf-reset #message {
+    margin: auto;
+}
+img {
+    border: 0;
+}
+.clear {
+    clear: both;
+    height: 0;
+    font-size: 0;
+    line-height: 0;
+}
+.clear-fix:after {
+    content: "\0020";
+    display: block;
+    height: 0;
+    clear: both;
+    visibility: hidden;
+}
+.clear-fix {
+    display: inline-block;
+}
+* html .clear-fix {
+    height: 1%;
+}
+.clear-fix {
+    display: block;
+}
+.header {
+    padding: 30px 30px 20px 30px;
+}
+.header-logo {
+    float: left;
+}
+.search {
+    float: right;
+    padding-top: 20px;
+}
+.search label {
+    line-height: 28px;
+    vertical-align: middle;
+}
+.search input {
+    width: 195px;
+    font-size: 12px;
+    border: 1px solid #dadada;
+    background: #fff url(data:image/gif;base64,R0lGODlhAQAFAKIAAPX19e/v7/39/fr6+urq6gAAAAAAAAAAACH5BAAAAAAALAAAAAABAAUAAAMESAEjCQA7) repeat-x left top;
+    padding: 5px 6px;
+    color: #565656;
+}
+.search input[type="search"] {
+    -webkit-appearance: textfield;
+}
+#content {
+    width: 970px;
+    margin: 0 auto;
+}
+pre {
+    white-space: normal;
+    font-family: Arial, Helvetica, sans-serif;
+}
+pre.xdebug-var-dump{
+    white-space: pre;
+    font-family: monospace;
+}

BIN
frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/blue_picto_less.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/blue_picto_more.gif


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/grey_magnifier.png


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/framework/images/logo_symfony.png


+ 73 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/configurator.css

@@ -0,0 +1,73 @@
+@import url("install.css");
+
+.step h1 {
+    margin-top: 10px;
+    margin-bottom: 30px;
+    font-size: 26px;
+}
+.step p {
+    line-height: 20px;
+    padding-bottom: 20px;
+}
+.step .symfony-block-steps span {
+    display: inline-block;
+    padding: 2px 3px;
+    font-size: 11px;
+    line-height: 15px;
+    color: #868686;
+    font-weight: bold;
+    text-transform: uppercase;
+}
+.step .symfony-block-steps span.selected {
+    background-color: #aacd4e;
+    color: #FFFFFF;
+}
+.step .symfony-form-row {
+    padding-bottom: 40px;
+}
+.step .symfony-form-column {
+    width: 430px;
+    float: left;
+}
+.step .symfony-form-footer {
+    padding-top: 20px;
+    clear: both;
+}
+.step .symfony-form-field {
+    height: 20px;
+}
+.step .symfony-form-row label {
+    display: block;
+    padding-bottom: 8px;
+}
+.step .symfony-form-field input[type=text],
+.step .symfony-form-field input[type=password],
+.step .symfony-form-field textarea,
+.step .symfony-form-field select {
+    font-size: 13px;
+    color: #565656;
+    width: 200px;
+}
+.step .symfony-form-field input[type=text],
+.step .symfony-form-field input[type=password],
+.step .symfony-form-field textarea {
+    border: 1px solid #dadada;
+    background: #FFFFFF url(../../../framework/images/input_bg.gif) repeat-x left top;
+    width: 194px;
+    padding: 5px 6px;
+}
+.step .symfony-form-errors ul {
+    padding: 0;
+}
+.step .symfony-form-errors li {
+    background: url(../images/notification.gif) no-repeat left 6px;
+    font-size: 11px;
+    line-height: 16px;
+    color: #759e1a;
+    padding: 10px 25px;
+}
+.step .symfony-configuration {
+    margin: 10px 0;
+    width: 100%;
+    height: 240px;
+}

+ 74 - 0
frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/css/install.css

@@ -0,0 +1,74 @@
+body {
+    font-size: 14px;
+    font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+}
+.sf-reset h1.title {
+    font-size: 45px;
+    padding-bottom: 30px;
+}
+.sf-reset h2 {
+    font-weight: bold;
+    color: #FFFFFF;
+    /* Font is reset to sans-serif (like body) */
+    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;
+}
+.sf-reset ul a,
+.sf-reset ul a:hover {
+    background: url(../images/blue-arrow.png) no-repeat right 6px;
+    padding-right: 10px;
+}
+.sf-reset ul, ol {
+    padding-left: 20px;
+}
+.sf-reset li {
+    padding-bottom: 18px;
+}
+.sf-reset ol li {
+    list-style-type: decimal;
+}
+.sf-reset ul li {
+    list-style-type: none;
+}
+.sf-reset .symfony-blocks-install {
+    overflow: hidden;
+}
+.sf-reset .symfony-install-continue {
+    font-size: 0.95em;
+    padding-left: 0;
+}
+.sf-reset .symfony-install-continue li {
+    padding-bottom: 10px;
+}
+.sf-reset .ok {
+    color: #fff;
+    font-family: "Lucida Sans Unicode", "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+    background-color: #6d6;
+    padding: 10px;
+    margin-bottom: 20px;
+}
+.sf-reset .ko {
+    background-color: #d66;
+}
+.version {
+    text-align: right;
+    font-size: 10px;
+    margin-right: 20px;
+}
+.sf-reset a,
+.sf-reset li a {
+    color: #08C;
+    text-decoration: none;
+}
+.sf-reset a:hover,
+.sf-reset li a:hover {
+    color: #08C;
+    text-decoration: underline;
+}
+.sf-reset textarea {
+    padding: 7px;
+}

BIN
frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/blue-arrow.png


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/favicon.ico


BIN
frameworks/PHP/symfony2_hhvm/web/bundles/sensiodistribution/webconfigurator/images/notification.gif


+ 124 - 0
frameworks/PHP/symfony2_hhvm/web/config.php

@@ -0,0 +1,124 @@
+<?php
+
+if (!isset($_SERVER['HTTP_HOST'])) {
+    exit('This script cannot be run from the CLI. Run it from a browser.');
+}
+
+if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
+    '127.0.0.1',
+    '::1',
+))) {
+    header('HTTP/1.0 403 Forbidden');
+    exit('This script is only accessible from localhost.');
+}
+
+require_once dirname(__FILE__).'/../app/SymfonyRequirements.php';
+
+$symfonyRequirements = new SymfonyRequirements();
+
+$majorProblems = $symfonyRequirements->getFailedRequirements();
+$minorProblems = $symfonyRequirements->getFailedRecommendations();
+
+?>
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="robots" content="noindex,nofollow" />
+        <title>Symfony Configuration</title>
+        <link rel="stylesheet" href="bundles/framework/css/structure.css" media="all" />
+        <link rel="stylesheet" href="bundles/framework/css/body.css" media="all" />
+        <link rel="stylesheet" href="bundles/sensiodistribution/webconfigurator/css/install.css" media="all" />
+    </head>
+    <body>
+        <div id="content">
+            <div class="header clear-fix">
+                <div class="header-logo">
+                    <img src="bundles/framework/images/logo_symfony.png" alt="Symfony" />
+                </div>
+
+                <div class="search">
+                  <form method="get" action="http://symfony.com/search">
+                    <div class="form-row">
+
+                      <label for="search-id">
+                          <img src="bundles/framework/images/grey_magnifier.png" alt="Search on Symfony website" />
+                      </label>
+
+                      <input name="q" id="search-id" type="search" placeholder="Search on Symfony website" />
+
+                      <button type="submit" class="sf-button">
+                          <span class="border-l">
+                            <span class="border-r">
+                                <span class="btn-bg">OK</span>
+                            </span>
+                        </span>
+                      </button>
+                    </div>
+                   </form>
+                </div>
+            </div>
+
+            <div class="sf-reset">
+                <div class="block">
+                    <div class="symfony-block-content">
+                        <h1 class="title">Welcome!</h1>
+                        <p>Welcome to your new Symfony project.</p>
+                        <p>
+                            This script will guide you through the basic configuration of your project.
+                            You can also do the same by editing the ‘<strong>app/config/parameters.yml</strong>’ file directly.
+                        </p>
+
+                        <?php if (count($majorProblems)): ?>
+                            <h2 class="ko">Major problems</h2>
+                            <p>Major problems have been detected and <strong>must</strong> be fixed before continuing:</p>
+                            <ol>
+                                <?php foreach ($majorProblems as $problem): ?>
+                                    <li><?php echo $problem->getHelpHtml() ?></li>
+                                <?php endforeach; ?>
+                            </ol>
+                        <?php endif; ?>
+
+                        <?php if (count($minorProblems)): ?>
+                            <h2>Recommendations</h2>
+                            <p>
+                                <?php if (count($majorProblems)): ?>Additionally, to<?php else: ?>To<?php endif; ?> enhance your Symfony experience,
+                                it’s recommended that you fix the following:
+                            </p>
+                            <ol>
+                                <?php foreach ($minorProblems as $problem): ?>
+                                    <li><?php echo $problem->getHelpHtml() ?></li>
+                                <?php endforeach; ?>
+                            </ol>
+                        <?php endif; ?>
+
+                        <?php if ($symfonyRequirements->hasPhpIniConfigIssue()): ?>
+                            <p id="phpini">*
+                                <?php if ($symfonyRequirements->getPhpIniConfigPath()): ?>
+                                    Changes to the <strong>php.ini</strong> file must be done in "<strong><?php echo $symfonyRequirements->getPhpIniConfigPath() ?></strong>".
+                                <?php else: ?>
+                                    To change settings, create a "<strong>php.ini</strong>".
+                                <?php endif; ?>
+                            </p>
+                        <?php endif; ?>
+
+                        <?php if (!count($majorProblems) && !count($minorProblems)): ?>
+                            <p class="ok">Your configuration looks good to run Symfony.</p>
+                        <?php endif; ?>
+
+                        <ul class="symfony-install-continue">
+                            <?php if (!count($majorProblems)): ?>
+                                <li><a href="app_dev.php/_configurator/">Configure your Symfony Application online</a></li>
+                                <li><a href="app_dev.php/">Bypass configuration and go to the Welcome page</a></li>
+                            <?php endif; ?>
+                            <?php if (count($majorProblems) || count($minorProblems)): ?>
+                                <li><a href="config.php">Re-check configuration</a></li>
+                            <?php endif; ?>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+            <div class="version">Symfony Standard Edition</div>
+        </div>
+    </body>
+</html>

BIN
frameworks/PHP/symfony2_hhvm/web/favicon.ico


+ 4 - 0
frameworks/PHP/symfony2_hhvm/web/robots.txt

@@ -0,0 +1,4 @@
+# www.robotstxt.org/
+# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
+
+User-agent: *