update version of sf for blueprint
This commit is contained in:
parent
a82aef117b
commit
a2e979c995
24
.env.dist
24
.env.dist
@ -1,24 +0,0 @@
|
|||||||
# This file is a "template" of which env vars need to be defined for your application
|
|
||||||
# Copy this file to .env file for development, create environment variables when deploying to production
|
|
||||||
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
|
|
||||||
|
|
||||||
###> symfony/framework-bundle ###
|
|
||||||
APP_ENV=dev
|
|
||||||
APP_SECRET=7c32deae8497f2f67e700dcb1b3b098c
|
|
||||||
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
|
|
||||||
#TRUSTED_HOSTS=localhost,example.com
|
|
||||||
###< symfony/framework-bundle ###
|
|
||||||
|
|
||||||
###> symfony/swiftmailer-bundle ###
|
|
||||||
# For Gmail as a transport, use: "gmail://username:password@localhost"
|
|
||||||
# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode="
|
|
||||||
# Delivery is disabled by default via "null://localhost"
|
|
||||||
MAILER_URL=null://localhost
|
|
||||||
###< symfony/swiftmailer-bundle ###
|
|
||||||
|
|
||||||
###> doctrine/doctrine-bundle ###
|
|
||||||
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
|
||||||
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
|
|
||||||
# Configure your db driver and server_version in config/packages/doctrine.yaml
|
|
||||||
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
|
|
||||||
###< doctrine/doctrine-bundle ###
|
|
35
.gitignore
vendored
Executable file → Normal file
35
.gitignore
vendored
Executable file → Normal file
@ -1,19 +1,20 @@
|
|||||||
|
/.web-server-pid
|
||||||
###> symfony/framework-bundle ###
|
/app/config/parameters.yml
|
||||||
.env
|
/build/
|
||||||
/public/bundles/
|
|
||||||
/var/
|
|
||||||
/vendor/
|
|
||||||
###< symfony/framework-bundle ###
|
|
||||||
|
|
||||||
###> symfony/webpack-encore-pack ###
|
|
||||||
/node_modules/
|
|
||||||
/public/build/
|
|
||||||
###< symfony/webpack-encore-pack ###
|
|
||||||
|
|
||||||
###> symfony/phpunit-bridge ###
|
|
||||||
.phpunit
|
|
||||||
/phpunit.xml
|
/phpunit.xml
|
||||||
###< symfony/phpunit-bridge ###
|
/var/*
|
||||||
|
!/var/cache
|
||||||
|
/var/cache/*
|
||||||
|
!var/cache/.gitkeep
|
||||||
|
!/var/logs
|
||||||
|
/var/logs/*
|
||||||
|
!var/logs/.gitkeep
|
||||||
|
!/var/sessions
|
||||||
|
/var/sessions/*
|
||||||
|
!var/sessions/.gitkeep
|
||||||
|
!var/SymfonyRequirements.php
|
||||||
|
/vendor/
|
||||||
|
/web/bundles/
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/web/build/
|
||||||
|
/node_modules/
|
||||||
|
32
README.md
Normal file
32
README.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Blueprint Cipherbliss
|
||||||
|
====
|
||||||
|
|
||||||
|
A Symfony project created on March 23, 2018, 2:09 pm.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
bootstrap, font awesome, user bundle
|
||||||
|
|
||||||
|
install dependencies:
|
||||||
|
```bash
|
||||||
|
composer install && yarn install
|
||||||
|
```
|
||||||
|
edit parameters.yml to link to your mysql server
|
||||||
|
|
||||||
|
update schema with doctrine
|
||||||
|
```bash
|
||||||
|
php bin/console doctrine:schema:update --dump-sql
|
||||||
|
php bin/console doctrine:schema:update --force
|
||||||
|
```
|
||||||
|
compile front end assets
|
||||||
|
```bash
|
||||||
|
yarn run encore dev --watch
|
||||||
|
```
|
||||||
|
|
||||||
|
access the front with your browser
|
||||||
|
```bash
|
||||||
|
php bin/console server:run
|
||||||
|
firefox http://http://127.0.0.1:8000/
|
||||||
|
```
|
||||||
|
enjoy!
|
||||||
|
|
||||||
|
www.cipherbliss.com
|
7
app/.htaccess
Normal file
7
app/.htaccess
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
</IfModule>
|
7
app/AppCache.php
Normal file
7
app/AppCache.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
|
||||||
|
|
||||||
|
class AppCache extends HttpCache
|
||||||
|
{
|
||||||
|
}
|
58
app/AppKernel.php
Normal file
58
app/AppKernel.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
|
||||||
|
class AppKernel extends Kernel {
|
||||||
|
public function registerBundles() {
|
||||||
|
$bundles = [
|
||||||
|
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 Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
|
||||||
|
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
|
||||||
|
new AppBundle\AppBundle(),
|
||||||
|
new FOS\UserBundle\FOSUserBundle(),
|
||||||
|
new Http\HttplugBundle\HttplugBundle(),
|
||||||
|
new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
|
||||||
|
];
|
||||||
|
|
||||||
|
if ( in_array( $this->getEnvironment(), [ 'dev', 'test' ], true ) ) {
|
||||||
|
$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
|
||||||
|
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
|
||||||
|
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
|
||||||
|
|
||||||
|
if ( 'dev' === $this->getEnvironment() ) {
|
||||||
|
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
|
||||||
|
$bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $bundles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRootDir() {
|
||||||
|
return __DIR__;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheDir() {
|
||||||
|
return dirname( __DIR__ ) . '/var/cache/' . $this->getEnvironment();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogDir() {
|
||||||
|
return dirname( __DIR__ ) . '/var/logs';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerContainerConfiguration( LoaderInterface $loader ) {
|
||||||
|
$loader->load( function ( ContainerBuilder $container ) {
|
||||||
|
$container->setParameter( 'container.autowiring.strict_mode', true );
|
||||||
|
$container->setParameter( 'container.dumper.inline_class_loader', true );
|
||||||
|
|
||||||
|
$container->addObjectResource( $this );
|
||||||
|
} );
|
||||||
|
$loader->load( $this->getRootDir() . '/config/config_' . $this->getEnvironment() . '.yml' );
|
||||||
|
}
|
||||||
|
}
|
18
app/Resources/FOSUserBundle/views/layout.html.twig
Normal file
18
app/Resources/FOSUserBundle/views/layout.html.twig
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{% extends '::default/index.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}Demo Application{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<div class="row justify-content-md-center align-items-center">
|
||||||
|
<div class="col-md-auto">
|
||||||
|
<div class="well form-group">
|
||||||
|
|
||||||
|
{% block fos_user_content %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
14
app/Resources/HWIOAuthBundle/views/Connect/login.html.twig
Normal file
14
app/Resources/HWIOAuthBundle/views/Connect/login.html.twig
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{% extends '@HWIOAuth/layout.html.twig' %}
|
||||||
|
|
||||||
|
{% block hwi_oauth_content %}
|
||||||
|
{% if error is defined and error %}
|
||||||
|
<span>{{ error }}</span>
|
||||||
|
{% endif %}
|
||||||
|
{% for owner in hwi_oauth_resource_owners() %}
|
||||||
|
<a class="btn btn-default btn-block btn-{{ owner }}" href="{{ hwi_oauth_login_url(owner) }}">
|
||||||
|
<i class="fa fa-{{ owner }}"></i>
|
||||||
|
{{ owner | trans({}, 'HWIOAuthBundle') }}
|
||||||
|
</a>
|
||||||
|
<br/>
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock hwi_oauth_content %}
|
8
app/Resources/HWIOAuthBundle/views/layout.html.twig
Normal file
8
app/Resources/HWIOAuthBundle/views/layout.html.twig
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{% extends '::default/index.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}Login{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
<h2>Le login</h2>
|
||||||
|
{% block hwi_oauth_content %}
|
||||||
|
{% endblock hwi_oauth_content %}
|
||||||
|
{% endblock body %}
|
23
app/Resources/views/base.html.twig
Normal file
23
app/Resources/views/base.html.twig
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8"/>
|
||||||
|
<title>{% block title %}Welcome!{% endblock %}</title>
|
||||||
|
{% block stylesheets %}
|
||||||
|
<link rel="stylesheet" href="{{ asset('build/app.css') }}">
|
||||||
|
{% endblock %}
|
||||||
|
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block bigMain %}
|
||||||
|
<div class="container body-block">
|
||||||
|
{% block navigation %}{% endblock %}
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
{% block javascripts %}
|
||||||
|
<script src="{{ asset('build/app.js') }}"></script>
|
||||||
|
{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
10
app/Resources/views/default/footer.html.twig
Normal file
10
app/Resources/views/default/footer.html.twig
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<sub class="footer-note"> développé par Tykayn /
|
||||||
|
<a href="http://www.cipherbliss.com">
|
||||||
|
Cipher Bliss
|
||||||
|
</a>
|
||||||
|
|
|
||||||
|
<a href="mailto:contact@cipherbliss.com">
|
||||||
|
<i class="fa fa-mail"></i>
|
||||||
|
contact
|
||||||
|
</a>
|
||||||
|
</sub>
|
30
app/Resources/views/default/header.html.twig
Normal file
30
app/Resources/views/default/header.html.twig
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<div class="header-block">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-6">
|
||||||
|
{% include 'default/login-choices.html.twig' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<i class="fa fa-users"></i> {{ usersCount }} utilisateurs
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
|
||||||
|
{% if app.request.hasPreviousSession %}
|
||||||
|
{% for type, messages in app.session.flashBag.all %}
|
||||||
|
{% for message in messages %}
|
||||||
|
<div class="{{ type }}">
|
||||||
|
{{ message|trans({}, 'FOSUserBundle') }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{% block fos_user_content %}
|
||||||
|
{% endblock fos_user_content %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
26
app/Resources/views/default/index.html.twig
Normal file
26
app/Resources/views/default/index.html.twig
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
{% trans_default_domain 'FOSUserBundle' %}
|
||||||
|
{% block navigation %}
|
||||||
|
<div class="navbar">
|
||||||
|
|
||||||
|
<a href="{{ path('homepage') }}">
|
||||||
|
<i class="fa fa-home"></i>
|
||||||
|
Homepage
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endblock navigation %}
|
||||||
|
{% block body %}
|
||||||
|
<div id="wrapper">
|
||||||
|
<div id="container" class="container">
|
||||||
|
<header>
|
||||||
|
{% include 'default/header.html.twig' %}
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
{% include 'default/main-screen.html.twig' %}
|
||||||
|
</main>
|
||||||
|
<footer>
|
||||||
|
{% include 'default/footer.html.twig' %}
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
26
app/Resources/views/default/login-choices.html.twig
Normal file
26
app/Resources/views/default/login-choices.html.twig
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% trans_default_domain 'FOSUserBundle' %}
|
||||||
|
{% block loginchoices %}
|
||||||
|
<div class="loginland">
|
||||||
|
<div class="well">
|
||||||
|
<div class="login-choices">
|
||||||
|
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
|
||||||
|
{{ 'layout.logged_in_as'|trans({'%username%': app.user.username}, 'FOSUserBundle') }} |
|
||||||
|
<a class="btn btn-default" href="{{ path('fos_user_security_logout') }}">
|
||||||
|
{{ 'layout.logout'|trans({}, 'FOSUserBundle') }}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="btn btn-default btn-block btn-twitter" href="{{ hwi_oauth_login_url('google') }}">
|
||||||
|
<i class="fa fa-google"></i>
|
||||||
|
Via {{ 'google' | trans({}, 'HWIOAuthBundle') }}
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
<a class="btn btn-primary"
|
||||||
|
href="{{ path('fos_user_security_login') }}">{{ 'layout.login'|trans }}</a>
|
||||||
|
<a class="btn btn-default"
|
||||||
|
href="{{ path('fos_user_registration_register') }}">{{ 'layout.register'|trans }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock loginchoices %}
|
50
app/Resources/views/default/main-screen.html.twig
Normal file
50
app/Resources/views/default/main-screen.html.twig
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<div class="main-screen">
|
||||||
|
<div id="welcome" class="jumbotron">
|
||||||
|
<h1>
|
||||||
|
<span>Welcome to</span>
|
||||||
|
Symfony {{ constant('Symfony\\Component\\HttpKernel\\Kernel::VERSION') }}
|
||||||
|
</h1>
|
||||||
|
<div class="ajax-test">
|
||||||
|
<button class="btn btn-primary" onclick="testAjax( '{{ path('test_ajax') }}' )">test ajax</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function makeRequest(method, url) {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open(method, url);
|
||||||
|
var payload = {stuff: ['one', 'two', 'three'], other: "hah"};
|
||||||
|
xhr.send(payload);
|
||||||
|
xhr.onload = function () {
|
||||||
|
if (this.status >= 200 && this.status < 300) {
|
||||||
|
resolve(xhr.response);
|
||||||
|
} else {
|
||||||
|
reject({
|
||||||
|
status : this.status,
|
||||||
|
statusText: xhr.statusText
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.onerror = function () {
|
||||||
|
reject({
|
||||||
|
status : this.status,
|
||||||
|
statusText: xhr.statusText
|
||||||
|
});
|
||||||
|
};
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var testAjax = function (url) {
|
||||||
|
console.log('test ajax');
|
||||||
|
makeRequest('POST', url)
|
||||||
|
.then(function (datums) {
|
||||||
|
console.log(datums);
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
console.error('Augh, there was an error!', err.statusText);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
119
app/config/config.yml
Normal file
119
app/config/config.yml
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
imports:
|
||||||
|
- { resource: parameters.yml }
|
||||||
|
- { resource: security.yml }
|
||||||
|
- { resource: services.yml }
|
||||||
|
|
||||||
|
# Put parameters here that don't need to change on each machine where the app is deployed
|
||||||
|
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
||||||
|
parameters:
|
||||||
|
locale: fr
|
||||||
|
|
||||||
|
framework:
|
||||||
|
#esi: ~
|
||||||
|
translator: { fallbacks: ['%locale%'] }
|
||||||
|
secret: '%secret%'
|
||||||
|
router:
|
||||||
|
resource: '%kernel.project_dir%/app/config/routing.yml'
|
||||||
|
strict_requirements: ~
|
||||||
|
form: ~
|
||||||
|
csrf_protection: ~
|
||||||
|
validation: { enable_annotations: true }
|
||||||
|
#serializer: { enable_annotations: true }
|
||||||
|
default_locale: '%locale%'
|
||||||
|
trusted_hosts: ~
|
||||||
|
session:
|
||||||
|
# https://symfony.com/doc/current/reference/configuration/framework.html#handler-id
|
||||||
|
handler_id: session.handler.native_file
|
||||||
|
save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
|
||||||
|
fragments: ~
|
||||||
|
http_method_override: true
|
||||||
|
assets: ~
|
||||||
|
php_errors:
|
||||||
|
log: true
|
||||||
|
templating:
|
||||||
|
engines: ['twig']
|
||||||
|
|
||||||
|
# Twig Configuration
|
||||||
|
twig:
|
||||||
|
debug: '%kernel.debug%'
|
||||||
|
strict_variables: '%kernel.debug%'
|
||||||
|
|
||||||
|
# Doctrine Configuration
|
||||||
|
doctrine:
|
||||||
|
dbal:
|
||||||
|
driver: pdo_mysql
|
||||||
|
host: '%database_host%'
|
||||||
|
port: '%database_port%'
|
||||||
|
dbname: '%database_name%'
|
||||||
|
user: '%database_user%'
|
||||||
|
password: '%database_password%'
|
||||||
|
charset: UTF8
|
||||||
|
mapping_types:
|
||||||
|
enum: string
|
||||||
|
# if using pdo_sqlite as your database driver:
|
||||||
|
# 1. add the path in parameters.yml
|
||||||
|
# e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite'
|
||||||
|
# 2. Uncomment database_path in parameters.yml.dist
|
||||||
|
# 3. Uncomment next line:
|
||||||
|
#path: '%database_path%'
|
||||||
|
|
||||||
|
orm:
|
||||||
|
auto_generate_proxy_classes: '%kernel.debug%'
|
||||||
|
naming_strategy: doctrine.orm.naming_strategy.underscore
|
||||||
|
auto_mapping: true
|
||||||
|
|
||||||
|
# Swiftmailer Configuration
|
||||||
|
swiftmailer:
|
||||||
|
transport: '%mailer_transport%'
|
||||||
|
host: '%mailer_host%'
|
||||||
|
username: '%mailer_user%'
|
||||||
|
password: '%mailer_password%'
|
||||||
|
spool: { type: memory }
|
||||||
|
|
||||||
|
#fos user bundle
|
||||||
|
fos_user:
|
||||||
|
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
|
||||||
|
firewall_name: main
|
||||||
|
user_class: AppBundle\Entity\User
|
||||||
|
from_email:
|
||||||
|
address: "%mailer_user%"
|
||||||
|
sender_name: "%mailer_user%"
|
||||||
|
# oauth land
|
||||||
|
hwi_oauth:
|
||||||
|
# list of names of the firewalls in which this bundle is active, this setting MUST be set
|
||||||
|
firewall_names: [secured_area]
|
||||||
|
# an optional setting to configure a query string parameter which can be used to redirect
|
||||||
|
# the user after authentication, e.g. /connect/facebook?_destination=/my/destination will
|
||||||
|
# redirect the user to /my/destination after facebook authenticates them. If this is not
|
||||||
|
# set then the user will be redirected to the original resource that they requested, or
|
||||||
|
# the base address if no resource was requested. This is similar to the behaviour of
|
||||||
|
# [target_path_parameter for form login](http://symfony.com/doc/2.0/cookbook/security/form_login.html).
|
||||||
|
# target_path_parameter: _destination
|
||||||
|
|
||||||
|
# an optional setting to use the HTTP REFERER header to be used in case no
|
||||||
|
# previous URL was stored in the session (i.e. no resource was requested).
|
||||||
|
# This is similar to the behaviour of
|
||||||
|
# [using the referring URL for form login](http://symfony.com/doc/2.0/cookbook/security/form_login.html#using-the-referring-url).
|
||||||
|
# use_referer: true
|
||||||
|
resource_owners:
|
||||||
|
google:
|
||||||
|
type: google
|
||||||
|
client_id: "%google_id%"
|
||||||
|
client_secret: "%google_secret%"
|
||||||
|
scope: "email"
|
||||||
|
options:
|
||||||
|
csrf: true
|
||||||
|
facebook:
|
||||||
|
type: facebook
|
||||||
|
client_id: "%facebook_id%"
|
||||||
|
client_secret: "%facebook_secret%"
|
||||||
|
scope: "email"
|
||||||
|
options:
|
||||||
|
csrf: true
|
||||||
|
twitter:
|
||||||
|
type: twitter
|
||||||
|
client_id: "%twitter_id%"
|
||||||
|
client_secret: "%twitter_secret%"
|
||||||
|
scope: "email"
|
||||||
|
options:
|
||||||
|
csrf: true
|
41
app/config/config_dev.yml
Normal file
41
app/config/config_dev.yml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
imports:
|
||||||
|
- { resource: config.yml }
|
||||||
|
|
||||||
|
framework:
|
||||||
|
router:
|
||||||
|
resource: '%kernel.project_dir%/app/config/routing_dev.yml'
|
||||||
|
strict_requirements: true
|
||||||
|
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
|
||||||
|
channels: ['!event']
|
||||||
|
console:
|
||||||
|
type: console
|
||||||
|
process_psr_3_messages: false
|
||||||
|
channels: ['!event', '!doctrine', '!console']
|
||||||
|
# To follow logs in real time, execute the following command:
|
||||||
|
# `bin/console server:log -vv`
|
||||||
|
server_log:
|
||||||
|
type: server_log
|
||||||
|
process_psr_3_messages: false
|
||||||
|
host: 127.0.0.1:9911
|
||||||
|
# uncomment to get logging in your browser
|
||||||
|
# you may have to allow bigger header sizes in your Web server configuration
|
||||||
|
#firephp:
|
||||||
|
# type: firephp
|
||||||
|
# level: info
|
||||||
|
#chromephp:
|
||||||
|
# type: chromephp
|
||||||
|
# level: info
|
||||||
|
|
||||||
|
#swiftmailer:
|
||||||
|
# delivery_addresses: ['me@example.com']
|
22
app/config/config_prod.yml
Normal file
22
app/config/config_prod.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
imports:
|
||||||
|
- { resource: config.yml }
|
||||||
|
|
||||||
|
#doctrine:
|
||||||
|
# orm:
|
||||||
|
# metadata_cache_driver: apc
|
||||||
|
# result_cache_driver: apc
|
||||||
|
# query_cache_driver: apc
|
||||||
|
|
||||||
|
monolog:
|
||||||
|
handlers:
|
||||||
|
main:
|
||||||
|
type: fingers_crossed
|
||||||
|
action_level: error
|
||||||
|
handler: nested
|
||||||
|
nested:
|
||||||
|
type: stream
|
||||||
|
path: '%kernel.logs_dir%/%kernel.environment%.log'
|
||||||
|
level: debug
|
||||||
|
console:
|
||||||
|
type: console
|
||||||
|
process_psr_3_messages: false
|
16
app/config/config_test.yml
Normal file
16
app/config/config_test.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
imports:
|
||||||
|
- { resource: config_dev.yml }
|
||||||
|
|
||||||
|
framework:
|
||||||
|
test: ~
|
||||||
|
session:
|
||||||
|
storage_id: session.storage.mock_file
|
||||||
|
profiler:
|
||||||
|
collect: false
|
||||||
|
|
||||||
|
web_profiler:
|
||||||
|
toolbar: false
|
||||||
|
intercept_redirects: false
|
||||||
|
|
||||||
|
swiftmailer:
|
||||||
|
disable_delivery: true
|
29
app/config/parameters.yml.dist
Normal file
29
app/config/parameters.yml.dist
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# This file is a "template" of what your parameters.yml file should look like
|
||||||
|
# Set parameters here that may be different on each deployment target of the app, e.g. development, staging, production.
|
||||||
|
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
|
||||||
|
parameters:
|
||||||
|
database_host: 127.0.0.1
|
||||||
|
database_port: ~
|
||||||
|
database_name: symfony
|
||||||
|
database_user: root
|
||||||
|
database_password: ~
|
||||||
|
# You should uncomment this if you want to use pdo_sqlite
|
||||||
|
#database_path: '%kernel.project_dir%/var/data/data.sqlite'
|
||||||
|
|
||||||
|
mailer_transport: smtp
|
||||||
|
mailer_host: 127.0.0.1
|
||||||
|
mailer_user: root
|
||||||
|
mailer_password: ~
|
||||||
|
|
||||||
|
# A secret key that's used to generate certain security-related tokens
|
||||||
|
secret: ThisTokenIsNotSoSecretChangeIt
|
||||||
|
|
||||||
|
#oauth configs
|
||||||
|
google_id: change_this
|
||||||
|
google_secret: change_this
|
||||||
|
facebook_id: change_this
|
||||||
|
facebook_secret: change_this
|
||||||
|
twitter_id: change_this
|
||||||
|
twitter_secret: change_this
|
||||||
|
disqus_id: change_this
|
||||||
|
disqus_secret: change_this
|
28
app/config/routing.yml
Normal file
28
app/config/routing.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
hwi_oauth_redirect:
|
||||||
|
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
|
||||||
|
prefix: /connect
|
||||||
|
|
||||||
|
hwi_oauth_connect:
|
||||||
|
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
|
||||||
|
prefix: /connect
|
||||||
|
|
||||||
|
hwi_oauth_login:
|
||||||
|
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
|
||||||
|
prefix: /login
|
||||||
|
facebook_login:
|
||||||
|
path: /login/check-facebook
|
||||||
|
|
||||||
|
google_login:
|
||||||
|
path: /login/check-google
|
||||||
|
|
||||||
|
custom_login:
|
||||||
|
path: /login/check-custom
|
||||||
|
|
||||||
|
twitter_login:
|
||||||
|
path: /login/check-twitter
|
||||||
|
|
||||||
|
app:
|
||||||
|
resource: '@AppBundle/Controller/'
|
||||||
|
type: annotation
|
||||||
|
fos_user:
|
||||||
|
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
|
14
app/config/routing_dev.yml
Normal file
14
app/config/routing_dev.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
_wdt:
|
||||||
|
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
|
||||||
|
prefix: /_wdt
|
||||||
|
|
||||||
|
_profiler:
|
||||||
|
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
|
||||||
|
prefix: /_profiler
|
||||||
|
|
||||||
|
_errors:
|
||||||
|
resource: '@TwigBundle/Resources/config/routing/errors.xml'
|
||||||
|
prefix: /_error
|
||||||
|
|
||||||
|
_main:
|
||||||
|
resource: routing.yml
|
54
app/config/security.yml
Normal file
54
app/config/security.yml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# To get started with security, check out the documentation:
|
||||||
|
# https://symfony.com/doc/current/security.html
|
||||||
|
security:
|
||||||
|
encoders:
|
||||||
|
FOS\UserBundle\Model\UserInterface: bcrypt
|
||||||
|
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
|
||||||
|
providers:
|
||||||
|
fos_userbundle:
|
||||||
|
id: fos_user.user_provider.username
|
||||||
|
firewalls:
|
||||||
|
# disables authentication for assets and the profiler, adapt it according to your needs
|
||||||
|
dev:
|
||||||
|
pattern: ^/(_(profiler|wdt)|css|images|js)/
|
||||||
|
security: false
|
||||||
|
|
||||||
|
main:
|
||||||
|
pattern: ^/
|
||||||
|
form_login:
|
||||||
|
provider: fos_userbundle
|
||||||
|
csrf_token_generator: security.csrf.token_manager
|
||||||
|
logout: true
|
||||||
|
anonymous: true
|
||||||
|
logout_on_user_change: true
|
||||||
|
# activate different ways to authenticate
|
||||||
|
|
||||||
|
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
|
||||||
|
#http_basic: ~
|
||||||
|
|
||||||
|
# https://symfony.com/doc/current/security/form_login_setup.html
|
||||||
|
#form_login: ~
|
||||||
|
secured_area:
|
||||||
|
anonymous: ~
|
||||||
|
oauth:
|
||||||
|
resource_owners:
|
||||||
|
facebook: "/login/check-facebook"
|
||||||
|
google: "/login/check-google"
|
||||||
|
# my_custom_provider: "/login/check-custom"
|
||||||
|
twitter: "/login/check-twitter"
|
||||||
|
login_path: /login
|
||||||
|
use_forward: false
|
||||||
|
failure_path: /login
|
||||||
|
|
||||||
|
oauth_user_provider:
|
||||||
|
service: my.oauth_aware.user_provider.service
|
||||||
|
|
||||||
|
role_hierarchy:
|
||||||
|
ROLE_ADMIN: ROLE_USER
|
||||||
|
ROLE_SUPER_ADMIN: ROLE_ADMIN
|
||||||
|
|
||||||
|
access_control:
|
||||||
|
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||||
|
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||||
|
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||||
|
- { path: ^/admin/, role: ROLE_ADMIN }
|
40
app/config/services.yml
Normal file
40
app/config/services.yml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Learn more about services, parameters and containers at
|
||||||
|
# https://symfony.com/doc/current/service_container.html
|
||||||
|
parameters:
|
||||||
|
#parameter_name: value
|
||||||
|
|
||||||
|
services:
|
||||||
|
# default configuration for services in *this* file
|
||||||
|
_defaults:
|
||||||
|
# automatically injects dependencies in your services
|
||||||
|
autowire: true
|
||||||
|
# automatically registers your services as commands, event subscribers, etc.
|
||||||
|
autoconfigure: true
|
||||||
|
# this means you cannot fetch services directly from the container via $container->get()
|
||||||
|
# if you need to do this, you can override this setting on individual services
|
||||||
|
public: false
|
||||||
|
|
||||||
|
# makes classes in src/AppBundle available to be used as services
|
||||||
|
# this creates a service per class whose id is the fully-qualified class name
|
||||||
|
AppBundle\:
|
||||||
|
resource: '../../src/AppBundle/*'
|
||||||
|
# you can exclude directories or files
|
||||||
|
# but if a service is unused, it's removed anyway
|
||||||
|
exclude: '../../src/AppBundle/{Entity,Repository,Tests}'
|
||||||
|
|
||||||
|
# controllers are imported separately to make sure they're public
|
||||||
|
# and have a tag that allows actions to type-hint services
|
||||||
|
AppBundle\Controller\:
|
||||||
|
resource: '../../src/AppBundle/Controller'
|
||||||
|
public: true
|
||||||
|
tags: ['controller.service_arguments']
|
||||||
|
|
||||||
|
# add more services, or override services that need manual wiring
|
||||||
|
# AppBundle\Service\ExampleService:
|
||||||
|
# arguments:
|
||||||
|
# $someArgument: 'some_value'
|
||||||
|
my.oauth_aware.user_provider.service:
|
||||||
|
class: HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider
|
||||||
|
arguments:
|
||||||
|
- '@fos_user.user_manager'
|
||||||
|
- ['pass properties as array']
|
7
assets/css/app.scss
Normal file
7
assets/css/app.scss
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
@import 'pages/libs';
|
||||||
|
@import 'split/custom_vars';
|
||||||
|
@import 'split/formulaires';
|
||||||
|
@import 'pages/global';
|
||||||
|
//@import 'pages/demo';
|
||||||
|
@import 'pages/special';
|
||||||
|
@import 'pages/responsive';
|
107
assets/css/pages/demo.scss
Normal file
107
assets/css/pages/demo.scss
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
|
||||||
|
body {
|
||||||
|
background: #F5F5F5;
|
||||||
|
font: 18px/1.5 sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2 {
|
||||||
|
line-height: 1.2;
|
||||||
|
margin: 0 0 .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 21px;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0 0 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #0000F0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: #F5F5F5;
|
||||||
|
max-width: 100px;
|
||||||
|
padding: 2px 6px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
background: #FFF;
|
||||||
|
margin: 1em auto;
|
||||||
|
max-width: 800px;
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
padding: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#welcome, #status {
|
||||||
|
margin-bottom: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#welcome h1 span {
|
||||||
|
display: block;
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#icon-status, #icon-book {
|
||||||
|
float: left;
|
||||||
|
height: 64px;
|
||||||
|
margin-right: 1em;
|
||||||
|
margin-top: -4px;
|
||||||
|
width: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#icon-book {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
#wrapper {
|
||||||
|
width: 80%;
|
||||||
|
margin: 2em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#icon-book {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#status a, #next a {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes fade-in {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes fade-in {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.sf-toolbar {
|
||||||
|
opacity: 0;
|
||||||
|
-webkit-animation: fade-in 1s .2s forwards;
|
||||||
|
animation: fade-in 1s .2s forwards;
|
||||||
|
}
|
||||||
|
}
|
3
assets/css/pages/global.scss
Normal file
3
assets/css/pages/global.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.main-screen {
|
||||||
|
min-height: 80vh;
|
||||||
|
}
|
2
assets/css/pages/libs.scss
Normal file
2
assets/css/pages/libs.scss
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@import '~font-awesome/css/font-awesome.css';
|
||||||
|
@import '~bootstrap-sass/assets/stylesheets/bootstrap';
|
0
src/Controller/.gitignore → assets/css/pages/responsive.scss
Executable file → Normal file
0
src/Controller/.gitignore → assets/css/pages/responsive.scss
Executable file → Normal file
0
src/DataFixtures/.gitignore → assets/css/pages/special.scss
Executable file → Normal file
0
src/DataFixtures/.gitignore → assets/css/pages/special.scss
Executable file → Normal file
1
assets/css/split/custom_vars.scss
Normal file
1
assets/css/split/custom_vars.scss
Normal file
@ -0,0 +1 @@
|
|||||||
|
$dark: #222;
|
0
src/Migrations/.gitignore → assets/css/split/formulaires.scss
Executable file → Normal file
0
src/Migrations/.gitignore → assets/css/split/formulaires.scss
Executable file → Normal file
4
assets/js/app.js
Executable file → Normal file
4
assets/js/app.js
Executable file → Normal file
@ -1,2 +1,2 @@
|
|||||||
// require('../css/global.scss');
|
require('../css/app.scss');
|
||||||
console.log('hello');
|
require('./main.js');
|
||||||
|
2
assets/js/main.js
Normal file
2
assets/js/main.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
console.log('hello console for main.js');
|
||||||
|
|
30
bin/console
30
bin/console
@ -1,39 +1,27 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Kernel;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||||
use Symfony\Component\Console\Input\ArgvInput;
|
use Symfony\Component\Console\Input\ArgvInput;
|
||||||
use Symfony\Component\Debug\Debug;
|
use Symfony\Component\Debug\Debug;
|
||||||
use Symfony\Component\Dotenv\Dotenv;
|
|
||||||
|
// if you don't want to setup permissions the proper way, just uncomment the following PHP line
|
||||||
|
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup
|
||||||
|
// for more information
|
||||||
|
//umask(0000);
|
||||||
|
|
||||||
set_time_limit(0);
|
set_time_limit(0);
|
||||||
|
|
||||||
require __DIR__.'/../vendor/autoload.php';
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
if (!class_exists(Application::class)) {
|
|
||||||
throw new \RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($_SERVER['APP_ENV'])) {
|
|
||||||
if (!class_exists(Dotenv::class)) {
|
|
||||||
throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
|
|
||||||
}
|
|
||||||
(new Dotenv())->load(__DIR__.'/../.env');
|
|
||||||
}
|
|
||||||
|
|
||||||
$input = new ArgvInput();
|
$input = new ArgvInput();
|
||||||
$env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev', true);
|
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev', true);
|
||||||
$debug = ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env)) && !$input->hasParameterOption('--no-debug', true);
|
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption('--no-debug', true) && $env !== 'prod';
|
||||||
|
|
||||||
if ($debug) {
|
if ($debug) {
|
||||||
umask(0000);
|
Debug::enable();
|
||||||
|
|
||||||
if (class_exists(Debug::class)) {
|
|
||||||
Debug::enable();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$kernel = new Kernel($env, $debug);
|
$kernel = new AppKernel($env, $debug);
|
||||||
$application = new Application($kernel);
|
$application = new Application($kernel);
|
||||||
$application->run($input);
|
$application->run($input);
|
||||||
|
18
bin/phpunit
18
bin/phpunit
@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
if (!file_exists(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
|
|
||||||
echo "Unable to find the `simple-phpunit` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if (false === getenv('SYMFONY_PHPUNIT_REMOVE')) {
|
|
||||||
putenv('SYMFONY_PHPUNIT_REMOVE=symfony/yaml');
|
|
||||||
}
|
|
||||||
if (false === getenv('SYMFONY_PHPUNIT_VERSION')) {
|
|
||||||
putenv('SYMFONY_PHPUNIT_VERSION=6.5');
|
|
||||||
}
|
|
||||||
if (false === getenv('SYMFONY_PHPUNIT_DIR')) {
|
|
||||||
putenv('SYMFONY_PHPUNIT_DIR='.__DIR__.'/.phpunit');
|
|
||||||
}
|
|
||||||
|
|
||||||
require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit';
|
|
146
bin/symfony_requirements
Executable file
146
bin/symfony_requirements
Executable file
@ -0,0 +1,146 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once dirname(__FILE__).'/../var/SymfonyRequirements.php';
|
||||||
|
|
||||||
|
$lineSize = 70;
|
||||||
|
$symfonyRequirements = new SymfonyRequirements();
|
||||||
|
$iniPath = $symfonyRequirements->getPhpIniConfigPath();
|
||||||
|
|
||||||
|
echo_title('Symfony Requirements Checker');
|
||||||
|
|
||||||
|
echo '> PHP is using the following php.ini file:'.PHP_EOL;
|
||||||
|
if ($iniPath) {
|
||||||
|
echo_style('green', ' '.$iniPath);
|
||||||
|
} else {
|
||||||
|
echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!');
|
||||||
|
}
|
||||||
|
|
||||||
|
echo PHP_EOL.PHP_EOL;
|
||||||
|
|
||||||
|
echo '> Checking Symfony requirements:'.PHP_EOL.' ';
|
||||||
|
|
||||||
|
$messages = array();
|
||||||
|
foreach ($symfonyRequirements->getRequirements() as $req) {
|
||||||
|
if ($helpText = get_error_message($req, $lineSize)) {
|
||||||
|
echo_style('red', 'E');
|
||||||
|
$messages['error'][] = $helpText;
|
||||||
|
} else {
|
||||||
|
echo_style('green', '.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$checkPassed = empty($messages['error']);
|
||||||
|
|
||||||
|
foreach ($symfonyRequirements->getRecommendations() as $req) {
|
||||||
|
if ($helpText = get_error_message($req, $lineSize)) {
|
||||||
|
echo_style('yellow', 'W');
|
||||||
|
$messages['warning'][] = $helpText;
|
||||||
|
} else {
|
||||||
|
echo_style('green', '.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($checkPassed) {
|
||||||
|
echo_block('success', 'OK', 'Your system is ready to run Symfony projects');
|
||||||
|
} else {
|
||||||
|
echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
|
||||||
|
|
||||||
|
echo_title('Fix the following mandatory requirements', 'red');
|
||||||
|
|
||||||
|
foreach ($messages['error'] as $helpText) {
|
||||||
|
echo ' * '.$helpText.PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($messages['warning'])) {
|
||||||
|
echo_title('Optional recommendations to improve your setup', 'yellow');
|
||||||
|
|
||||||
|
foreach ($messages['warning'] as $helpText) {
|
||||||
|
echo ' * '.$helpText.PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo PHP_EOL;
|
||||||
|
echo_style('title', 'Note');
|
||||||
|
echo ' The command console could use a different php.ini file'.PHP_EOL;
|
||||||
|
echo_style('title', '~~~~');
|
||||||
|
echo ' than the one used with your web server. To be on the'.PHP_EOL;
|
||||||
|
echo ' safe side, please check the requirements from your web'.PHP_EOL;
|
||||||
|
echo ' server using the ';
|
||||||
|
echo_style('yellow', 'web/config.php');
|
||||||
|
echo ' script.'.PHP_EOL;
|
||||||
|
echo PHP_EOL;
|
||||||
|
|
||||||
|
exit($checkPassed ? 0 : 1);
|
||||||
|
|
||||||
|
function get_error_message(Requirement $requirement, $lineSize)
|
||||||
|
{
|
||||||
|
if ($requirement->isFulfilled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL;
|
||||||
|
$errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL;
|
||||||
|
|
||||||
|
return $errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
function echo_title($title, $style = null)
|
||||||
|
{
|
||||||
|
$style = $style ?: 'title';
|
||||||
|
|
||||||
|
echo PHP_EOL;
|
||||||
|
echo_style($style, $title.PHP_EOL);
|
||||||
|
echo_style($style, str_repeat('~', strlen($title)).PHP_EOL);
|
||||||
|
echo PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
function echo_style($style, $message)
|
||||||
|
{
|
||||||
|
// ANSI color codes
|
||||||
|
$styles = array(
|
||||||
|
'reset' => "\033[0m",
|
||||||
|
'red' => "\033[31m",
|
||||||
|
'green' => "\033[32m",
|
||||||
|
'yellow' => "\033[33m",
|
||||||
|
'error' => "\033[37;41m",
|
||||||
|
'success' => "\033[37;42m",
|
||||||
|
'title' => "\033[34m",
|
||||||
|
);
|
||||||
|
$supports = has_color_support();
|
||||||
|
|
||||||
|
echo($supports ? $styles[$style] : '').$message.($supports ? $styles['reset'] : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
function echo_block($style, $title, $message)
|
||||||
|
{
|
||||||
|
$message = ' '.trim($message).' ';
|
||||||
|
$width = strlen($message);
|
||||||
|
|
||||||
|
echo PHP_EOL.PHP_EOL;
|
||||||
|
|
||||||
|
echo_style($style, str_repeat(' ', $width));
|
||||||
|
echo PHP_EOL;
|
||||||
|
echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT));
|
||||||
|
echo PHP_EOL;
|
||||||
|
echo_style($style, $message);
|
||||||
|
echo PHP_EOL;
|
||||||
|
echo_style($style, str_repeat(' ', $width));
|
||||||
|
echo PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
function has_color_support()
|
||||||
|
{
|
||||||
|
static $support;
|
||||||
|
|
||||||
|
if (null === $support) {
|
||||||
|
if (DIRECTORY_SEPARATOR == '\\') {
|
||||||
|
$support = false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
|
||||||
|
} else {
|
||||||
|
$support = function_exists('posix_isatty') && @posix_isatty(STDOUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $support;
|
||||||
|
}
|
147
composer.json
Executable file → Normal file
147
composer.json
Executable file → Normal file
@ -1,82 +1,75 @@
|
|||||||
{
|
{
|
||||||
"type": "project",
|
"name": "tykayn/blog",
|
||||||
"license": "proprietary",
|
"license": "proprietary",
|
||||||
"require": {
|
"type": "project",
|
||||||
"php": "^7.0.8",
|
"autoload": {
|
||||||
"ext-iconv": "*",
|
"psr-4": {
|
||||||
"friendsofsymfony/rest-bundle": "^2.3",
|
"AppBundle\\": "src/AppBundle"
|
||||||
"sensio/framework-extra-bundle": "^5.1",
|
|
||||||
"sensio/generator-bundle": "^3.1",
|
|
||||||
"sensiolabs/security-checker": "^4.1",
|
|
||||||
"symfony/asset": "^3.4",
|
|
||||||
"symfony/console": "^3.4",
|
|
||||||
"symfony/debug-pack": "*",
|
|
||||||
"symfony/expression-language": "^3.4",
|
|
||||||
"symfony/flex": "^1.0",
|
|
||||||
"symfony/form": "^3.4",
|
|
||||||
"symfony/framework-bundle": "^3.4",
|
|
||||||
"symfony/lts": "^3",
|
|
||||||
"symfony/monolog-bundle": "^3.1",
|
|
||||||
"symfony/orm-pack": "*",
|
|
||||||
"symfony/process": "^3.4",
|
|
||||||
"symfony/security-bundle": "^3.4",
|
|
||||||
"symfony/serializer-pack": "*",
|
|
||||||
"symfony/swiftmailer-bundle": "^3.1",
|
|
||||||
"symfony/validator": "^3.4",
|
|
||||||
"symfony/web-link": "^3.4",
|
|
||||||
"symfony/webpack-encore-pack": "*",
|
|
||||||
"symfony/yaml": "^3.4"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"classmap": [
|
||||||
"doctrine/doctrine-fixtures-bundle": "^3.0",
|
"app/AppKernel.php",
|
||||||
"symfony/browser-kit": "^3.4",
|
"app/AppCache.php"
|
||||||
"symfony/css-selector": "^3.4",
|
]
|
||||||
"symfony/dotenv": "^3.4",
|
},
|
||||||
"symfony/maker-bundle": "^1.0",
|
"autoload-dev": {
|
||||||
"symfony/phpunit-bridge": "^3.4",
|
"psr-4": {
|
||||||
"symfony/profiler-pack": "*"
|
"Tests\\": "tests/"
|
||||||
},
|
},
|
||||||
"config": {
|
"files": [
|
||||||
"preferred-install": {
|
"vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
|
||||||
"*": "dist"
|
]
|
||||||
},
|
},
|
||||||
"sort-packages": true
|
"require": {
|
||||||
|
"php": ">=5.5.9",
|
||||||
|
"doctrine/doctrine-bundle": "^1.6",
|
||||||
|
"doctrine/orm": "^2.5",
|
||||||
|
"friendsofsymfony/user-bundle": "~2.0",
|
||||||
|
"hwi/oauth-bundle": "^0.6.1",
|
||||||
|
"incenteev/composer-parameter-handler": "^2.0",
|
||||||
|
"php-http/guzzle6-adapter": "^1.1",
|
||||||
|
"php-http/httplug-bundle": "^1.9",
|
||||||
|
"sensio/distribution-bundle": "^5.0.19",
|
||||||
|
"sensio/framework-extra-bundle": "^5.0.0",
|
||||||
|
"symfony/monolog-bundle": "^3.1.0",
|
||||||
|
"symfony/polyfill-apcu": "^1.0",
|
||||||
|
"symfony/swiftmailer-bundle": "^2.6.4",
|
||||||
|
"symfony/symfony": "~3.4",
|
||||||
|
"symfony/templating": "^4.0",
|
||||||
|
"twig/twig": "^1.0||^2.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"sensio/generator-bundle": "^3.0",
|
||||||
|
"symfony/phpunit-bridge": "^3.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"symfony-scripts": [
|
||||||
|
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
|
||||||
|
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
|
||||||
|
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
|
||||||
|
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
|
||||||
|
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
|
||||||
|
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
|
||||||
|
],
|
||||||
|
"post-install-cmd": [
|
||||||
|
"@symfony-scripts"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"@symfony-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"symfony-app-dir": "app",
|
||||||
|
"symfony-bin-dir": "bin",
|
||||||
|
"symfony-var-dir": "var",
|
||||||
|
"symfony-web-dir": "web",
|
||||||
|
"symfony-tests-dir": "tests",
|
||||||
|
"symfony-assets-install": "relative",
|
||||||
|
"incenteev-parameters": {
|
||||||
|
"file": "app/config/parameters.yml"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"branch-alias": null
|
||||||
"psr-4": {
|
}
|
||||||
"App\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\Tests\\": "tests/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"symfony/polyfill-iconv": "*",
|
|
||||||
"symfony/polyfill-php70": "*",
|
|
||||||
"symfony/polyfill-php56": "*"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"auto-scripts": {
|
|
||||||
"cache:clear": "symfony-cmd",
|
|
||||||
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
|
|
||||||
"security-checker security:check": "script"
|
|
||||||
},
|
|
||||||
"post-install-cmd": [
|
|
||||||
"@auto-scripts"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"@auto-scripts"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"symfony/symfony": "*"
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"symfony": {
|
|
||||||
"id": "01C8FS7VYDVZG13VVTDRH2ME47",
|
|
||||||
"allow-contrib": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
5646
composer.lock
generated
Executable file → Normal file
5646
composer.lock
generated
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,16 @@ security:
|
|||||||
security: false
|
security: false
|
||||||
main:
|
main:
|
||||||
anonymous: true
|
anonymous: true
|
||||||
|
encoders:
|
||||||
|
MsgPhp\User\Infra\Security\SecurityUser: bcrypt
|
||||||
|
|
||||||
|
providers:
|
||||||
|
msgphp_user: { id: MsgPhp\User\Infra\Security\SecurityUserProvider }
|
||||||
|
|
||||||
|
firewalls:
|
||||||
|
main:
|
||||||
|
provider: msgphp_user
|
||||||
|
anonymous: ~
|
||||||
# activate different ways to authenticate
|
# activate different ways to authenticate
|
||||||
|
|
||||||
# http_basic: true
|
# http_basic: true
|
||||||
@ -20,5 +29,5 @@ security:
|
|||||||
# Easy way to control access for large sections of your site
|
# Easy way to control access for large sections of your site
|
||||||
# Note: Only the *first* access control that matches will be used
|
# Note: Only the *first* access control that matches will be used
|
||||||
access_control:
|
access_control:
|
||||||
# - { path: ^/admin, roles: ROLE_ADMIN }
|
- { path: ^/admin, roles: ROLE_ADMIN }
|
||||||
# - { path: ^/profile, roles: ROLE_USER }
|
- { path: ^/profile, roles: ROLE_USER }
|
||||||
|
18
install.sh
Normal file
18
install.sh
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
echo "checking requirements";
|
||||||
|
composer --version
|
||||||
|
yarn --version
|
||||||
|
acl --varsion
|
||||||
|
|
||||||
|
echo "installing symfony project for ubuntu environnement";
|
||||||
|
composer install && yarn install;
|
||||||
|
|
||||||
|
echo "fix file permissions";
|
||||||
|
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
|
||||||
|
|
||||||
|
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
|
||||||
|
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
|
||||||
|
|
||||||
|
echo "update database";
|
||||||
|
php bin/console doctrine:schema:update --dump-sql
|
||||||
|
php bin/console doctrine:schema:update --force
|
8843
package-lock.json
generated
8843
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
26
package.json
Executable file → Normal file
26
package.json
Executable file → Normal file
@ -1,16 +1,14 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"license": "MIT",
|
||||||
"@symfony/webpack-encore": "^0.17.0",
|
"devDependencies": {
|
||||||
"bootstrap-sass": "^3.3.7",
|
"@symfony/webpack-encore": "^0.19.0",
|
||||||
"node-sass": "^4.7.2",
|
"bootstrap-sass": "^3.3.7",
|
||||||
"sass-loader": "^6.0.7"
|
"node-sass": "^4.7.2",
|
||||||
},
|
"sass-loader": "^6.0.7",
|
||||||
"license": "UNLICENSED",
|
"webpack-notifier": "^1.6.0"
|
||||||
"private": true,
|
},
|
||||||
"scripts": {
|
"dependencies": {
|
||||||
"dev-server": "encore dev-server",
|
"bootstrap": "^4.0.0",
|
||||||
"dev": "encore dev",
|
"font-awesome": "^4.7.0"
|
||||||
"watch": "encore dev --watch",
|
}
|
||||||
"build": "encore production"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
22
phpunit.xml.dist
Executable file → Normal file
22
phpunit.xml.dist
Executable file → Normal file
@ -2,34 +2,30 @@
|
|||||||
|
|
||||||
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
|
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
|
||||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.1/phpunit.xsd"
|
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
|
||||||
backupGlobals="false"
|
backupGlobals="false"
|
||||||
colors="true"
|
colors="true"
|
||||||
bootstrap="vendor/autoload.php"
|
bootstrap="vendor/autoload.php"
|
||||||
>
|
>
|
||||||
<php>
|
<php>
|
||||||
<ini name="error_reporting" value="-1" />
|
<ini name="error_reporting" value="-1" />
|
||||||
<env name="KERNEL_CLASS" value="App\Kernel" />
|
<server name="KERNEL_CLASS" value="AppKernel" />
|
||||||
<env name="APP_ENV" value="test" />
|
|
||||||
<env name="APP_DEBUG" value="1" />
|
|
||||||
<env name="APP_SECRET" value="s$cretf0rt3st" />
|
|
||||||
<env name="SHELL_VERBOSITY" value="-1" />
|
|
||||||
<!-- define your env variables for the test env here -->
|
|
||||||
</php>
|
</php>
|
||||||
|
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Project Test Suite">
|
<testsuite name="Project Test Suite">
|
||||||
<directory>tests/</directory>
|
<directory>tests</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
</testsuites>
|
</testsuites>
|
||||||
|
|
||||||
<filter>
|
<filter>
|
||||||
<whitelist>
|
<whitelist>
|
||||||
<directory>./src/</directory>
|
<directory>src</directory>
|
||||||
|
<exclude>
|
||||||
|
<directory>src/*Bundle/Resources</directory>
|
||||||
|
<directory>src/*/*Bundle/Resources</directory>
|
||||||
|
<directory>src/*/Bundle/*Bundle/Resources</directory>
|
||||||
|
</exclude>
|
||||||
</whitelist>
|
</whitelist>
|
||||||
</filter>
|
</filter>
|
||||||
|
|
||||||
<listeners>
|
|
||||||
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
|
|
||||||
</listeners>
|
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use App\Kernel;
|
|
||||||
use Symfony\Component\Debug\Debug;
|
|
||||||
use Symfony\Component\Dotenv\Dotenv;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
|
|
||||||
require __DIR__.'/../vendor/autoload.php';
|
|
||||||
|
|
||||||
// The check is to ensure we don't use .env in production
|
|
||||||
if (!isset($_SERVER['APP_ENV'])) {
|
|
||||||
if (!class_exists(Dotenv::class)) {
|
|
||||||
throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
|
|
||||||
}
|
|
||||||
(new Dotenv())->load(__DIR__.'/../.env');
|
|
||||||
}
|
|
||||||
|
|
||||||
$env = $_SERVER['APP_ENV'] ?? 'dev';
|
|
||||||
$debug = $_SERVER['APP_DEBUG'] ?? ('prod' !== $env);
|
|
||||||
|
|
||||||
if ($debug) {
|
|
||||||
umask(0000);
|
|
||||||
|
|
||||||
Debug::enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) {
|
|
||||||
Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) {
|
|
||||||
Request::setTrustedHosts(explode(',', $trustedHosts));
|
|
||||||
}
|
|
||||||
|
|
||||||
$kernel = new Kernel($env, $debug);
|
|
||||||
$request = Request::createFromGlobals();
|
|
||||||
$response = $kernel->handle($request);
|
|
||||||
$response->send();
|
|
||||||
$kernel->terminate($request, $response);
|
|
7
src/.htaccess
Normal file
7
src/.htaccess
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
</IfModule>
|
9
src/AppBundle/AppBundle.php
Normal file
9
src/AppBundle/AppBundle.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
|
||||||
|
class AppBundle extends Bundle
|
||||||
|
{
|
||||||
|
}
|
46
src/AppBundle/Controller/DefaultController.php
Normal file
46
src/AppBundle/Controller/DefaultController.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Controller;
|
||||||
|
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
class DefaultController extends Controller {
|
||||||
|
/**
|
||||||
|
* @Route("/", name="homepage")
|
||||||
|
*/
|
||||||
|
public function indexAction( Request $request ) {
|
||||||
|
$m = $this->getDoctrine()->getManager();
|
||||||
|
$userRepo = $m->getRepository( 'AppBundle:User' );
|
||||||
|
$allUsers = $userRepo->findAll();
|
||||||
|
|
||||||
|
// replace this example code with whatever you need
|
||||||
|
return $this->render( 'default/index.html.twig',
|
||||||
|
[
|
||||||
|
'usersCount' => count( $allUsers ),
|
||||||
|
'base_dir' => realpath( $this->getParameter( 'kernel.project_dir' ) ) . DIRECTORY_SEPARATOR,
|
||||||
|
] );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/test-ajax-request", name="test_ajax")
|
||||||
|
*/
|
||||||
|
public function testAjaxAction( Request $request ) {
|
||||||
|
$req = $request->request;
|
||||||
|
var_dump( $request->getMethod() );
|
||||||
|
var_dump( $request->isXmlHttpRequest() );
|
||||||
|
if ( $request->isXmlHttpRequest() ) {
|
||||||
|
var_dump( $request->get( 'data' ) );
|
||||||
|
}
|
||||||
|
$recieved = $request->request->get( 'data' );
|
||||||
|
// var_dump( $request->request );
|
||||||
|
$json = [
|
||||||
|
'test' => 'it works',
|
||||||
|
'recieved' => $recieved,
|
||||||
|
];
|
||||||
|
|
||||||
|
return new JsonResponse( $json );
|
||||||
|
}
|
||||||
|
}
|
34
src/AppBundle/Entity/User.php
Normal file
34
src/AppBundle/Entity/User.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
use FOS\UserBundle\Model\User as BaseUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User
|
||||||
|
*
|
||||||
|
* @ORM\Table(name="custom_user")
|
||||||
|
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
|
||||||
|
*/
|
||||||
|
class User extends BaseUser {
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="id", type="integer")
|
||||||
|
* @ORM\Id
|
||||||
|
* @ORM\GeneratedValue(strategy="AUTO")
|
||||||
|
*/
|
||||||
|
protected $id;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get id
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getId() {
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
13
src/AppBundle/Repository/UserRepository.php
Normal file
13
src/AppBundle/Repository/UserRepository.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UserRepository
|
||||||
|
*
|
||||||
|
* This class was generated by the Doctrine ORM. Add your own custom
|
||||||
|
* repository methods below.
|
||||||
|
*/
|
||||||
|
class UserRepository extends \Doctrine\ORM\EntityRepository
|
||||||
|
{
|
||||||
|
}
|
@ -1,40 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Controller;
|
|
||||||
|
|
||||||
use App\Entity\Product;
|
|
||||||
use App\Entity\ProductCategory;
|
|
||||||
use FOS\RestBundle\Controller\FOSRestController;
|
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
||||||
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
|
||||||
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
|
|
||||||
use Symfony\Component\Serializer\Serializer;
|
|
||||||
|
|
||||||
use Endroid\Pdf\Pdf;
|
|
||||||
use Endroid\Pdf\Response\InlinePdfResponse;
|
|
||||||
|
|
||||||
class ProductController extends FOSRestController {
|
|
||||||
/**
|
|
||||||
* @Route("/", name="product")
|
|
||||||
*/
|
|
||||||
public function index() {
|
|
||||||
$normalizer = new ObjectNormalizer();
|
|
||||||
$normalizer->setCircularReferenceLimit( 1 );
|
|
||||||
|
|
||||||
$normalizer->setCircularReferenceHandler( function ( $object ) {
|
|
||||||
return $object->getName();
|
|
||||||
} );
|
|
||||||
$serializer = new Serializer( [ $normalizer ], [ new JsonEncoder() ] );
|
|
||||||
|
|
||||||
$allCategories = $this->getDoctrine()
|
|
||||||
->getRepository( ProductCategory::class )
|
|
||||||
->findAll();
|
|
||||||
$allCategories = $serializer->serialize( $allCategories, 'json' );
|
|
||||||
|
|
||||||
return new Response( $allCategories );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App;
|
|
||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
|
||||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
|
||||||
use Symfony\Component\Routing\RouteCollectionBuilder;
|
|
||||||
|
|
||||||
class Kernel extends BaseKernel
|
|
||||||
{
|
|
||||||
use MicroKernelTrait;
|
|
||||||
|
|
||||||
const CONFIG_EXTS = '.{php,xml,yaml,yml}';
|
|
||||||
|
|
||||||
public function getCacheDir()
|
|
||||||
{
|
|
||||||
return $this->getProjectDir().'/var/cache/'.$this->environment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLogDir()
|
|
||||||
{
|
|
||||||
return $this->getProjectDir().'/var/log';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function registerBundles()
|
|
||||||
{
|
|
||||||
$contents = require $this->getProjectDir().'/config/bundles.php';
|
|
||||||
foreach ($contents as $class => $envs) {
|
|
||||||
if (isset($envs['all']) || isset($envs[$this->environment])) {
|
|
||||||
yield new $class();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
|
|
||||||
{
|
|
||||||
// Feel free to remove the "container.autowiring.strict_mode" parameter
|
|
||||||
// if you are using symfony/dependency-injection 4.0+ as it's the default behavior
|
|
||||||
$container->setParameter('container.autowiring.strict_mode', true);
|
|
||||||
$container->setParameter('container.dumper.inline_class_loader', true);
|
|
||||||
$confDir = $this->getProjectDir().'/config';
|
|
||||||
|
|
||||||
$loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob');
|
|
||||||
$loader->load($confDir.'/{packages}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, 'glob');
|
|
||||||
$loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob');
|
|
||||||
$loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function configureRoutes(RouteCollectionBuilder $routes)
|
|
||||||
{
|
|
||||||
$confDir = $this->getProjectDir().'/config';
|
|
||||||
|
|
||||||
$routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob');
|
|
||||||
$routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob');
|
|
||||||
$routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace DoctrineMigrations;
|
|
||||||
|
|
||||||
use Doctrine\DBAL\Migrations\AbstractMigration;
|
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Auto-generated Migration: Please modify to your needs!
|
|
||||||
*/
|
|
||||||
class Version20180315151516 extends AbstractMigration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param Schema $schema
|
|
||||||
*/
|
|
||||||
public function up(Schema $schema)
|
|
||||||
{
|
|
||||||
// this up() migration is auto-generated, please modify it to your needs
|
|
||||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
|
|
||||||
|
|
||||||
$this->addSql('ALTER TABLE facture DROP FOREIGN KEY FK_FE86641019EB6921');
|
|
||||||
$this->addSql('ALTER TABLE transaction DROP FOREIGN KEY FK_723705D1C54C8C93');
|
|
||||||
$this->addSql('CREATE TABLE product_category (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(100) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('CREATE TABLE product (id INT AUTO_INCREMENT NOT NULL, category_id INT DEFAULT NULL, name VARCHAR(100) NOT NULL, price NUMERIC(10, 2) DEFAULT NULL, INDEX IDX_D34A04AD12469DE2 (category_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('CREATE TABLE sell_record (date DATETIME NOT NULL, products_id INT DEFAULT NULL, INDEX IDX_F9F12A026C8A81A9 (products_id), PRIMARY KEY(date)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('ALTER TABLE product ADD CONSTRAINT FK_D34A04AD12469DE2 FOREIGN KEY (category_id) REFERENCES product_category (id)');
|
|
||||||
$this->addSql('ALTER TABLE sell_record ADD CONSTRAINT FK_F9F12A026C8A81A9 FOREIGN KEY (products_id) REFERENCES product (id)');
|
|
||||||
$this->addSql('DROP TABLE client');
|
|
||||||
$this->addSql('DROP TABLE facture');
|
|
||||||
$this->addSql('DROP TABLE transaction');
|
|
||||||
$this->addSql('DROP TABLE transaction_type');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Schema $schema
|
|
||||||
*/
|
|
||||||
public function down(Schema $schema)
|
|
||||||
{
|
|
||||||
// this down() migration is auto-generated, please modify it to your needs
|
|
||||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.');
|
|
||||||
|
|
||||||
$this->addSql('ALTER TABLE product DROP FOREIGN KEY FK_D34A04AD12469DE2');
|
|
||||||
$this->addSql('ALTER TABLE sell_record DROP FOREIGN KEY FK_F9F12A026C8A81A9');
|
|
||||||
$this->addSql('CREATE TABLE client (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL COLLATE utf8_unicode_ci, address VARCHAR(500) DEFAULT NULL COLLATE utf8_unicode_ci, type VARCHAR(255) DEFAULT NULL COLLATE utf8_unicode_ci, pay_delay INT DEFAULT NULL, UNIQUE INDEX UNIQ_C74404555E237E06 (name), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('CREATE TABLE facture (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, title VARCHAR(255) DEFAULT NULL COLLATE utf8_unicode_ci, description LONGTEXT DEFAULT NULL COLLATE utf8_unicode_ci, days DOUBLE PRECISION NOT NULL, total_ht DOUBLE PRECISION NOT NULL, total_ttc DOUBLE PRECISION DEFAULT NULL, sent_date DATETIME DEFAULT NULL, paid_date DATETIME DEFAULT NULL, days_to_pay INT DEFAULT NULL, INDEX IDX_FE86641019EB6921 (client_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('CREATE TABLE transaction (id INT AUTO_INCREMENT NOT NULL, type_id INT DEFAULT NULL, total_ht DOUBLE PRECISION NOT NULL, total_ttc DOUBLE PRECISION NOT NULL, title VARCHAR(255) NOT NULL COLLATE utf8_unicode_ci, date_paid DATETIME NOT NULL, date_creation DATETIME NOT NULL, INDEX IDX_723705D1C54C8C93 (type_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('CREATE TABLE transaction_type (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL COLLATE utf8_unicode_ci, UNIQUE INDEX UNIQ_6E9D69885E237E06 (name), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
|
|
||||||
$this->addSql('ALTER TABLE facture ADD CONSTRAINT FK_FE86641019EB6921 FOREIGN KEY (client_id) REFERENCES client (id)');
|
|
||||||
$this->addSql('ALTER TABLE transaction ADD CONSTRAINT FK_723705D1C54C8C93 FOREIGN KEY (type_id) REFERENCES transaction_type (id)');
|
|
||||||
$this->addSql('DROP TABLE product_category');
|
|
||||||
$this->addSql('DROP TABLE product');
|
|
||||||
$this->addSql('DROP TABLE sell_record');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Repository;
|
|
||||||
|
|
||||||
use App\Entity\ProductCategory;
|
|
||||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
||||||
use Symfony\Bridge\Doctrine\RegistryInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method ProductCategory|null find($id, $lockMode = null, $lockVersion = null)
|
|
||||||
* @method ProductCategory|null findOneBy(array $criteria, array $orderBy = null)
|
|
||||||
* @method ProductCategory[] findAll()
|
|
||||||
* @method ProductCategory[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
|
||||||
*/
|
|
||||||
class ProductCategoryRepository extends ServiceEntityRepository
|
|
||||||
{
|
|
||||||
public function __construct(RegistryInterface $registry)
|
|
||||||
{
|
|
||||||
parent::__construct($registry, ProductCategory::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public function findBySomething($value)
|
|
||||||
{
|
|
||||||
return $this->createQueryBuilder('p')
|
|
||||||
->where('p.something = :value')->setParameter('value', $value)
|
|
||||||
->orderBy('p.id', 'ASC')
|
|
||||||
->setMaxResults(10)
|
|
||||||
->getQuery()
|
|
||||||
->getResult()
|
|
||||||
;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Repository;
|
|
||||||
|
|
||||||
use App\Entity\Product;
|
|
||||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
||||||
use Symfony\Bridge\Doctrine\RegistryInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method Product|null find($id, $lockMode = null, $lockVersion = null)
|
|
||||||
* @method Product|null findOneBy(array $criteria, array $orderBy = null)
|
|
||||||
* @method Product[] findAll()
|
|
||||||
* @method Product[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
|
||||||
*/
|
|
||||||
class ProductRepository extends ServiceEntityRepository
|
|
||||||
{
|
|
||||||
public function __construct(RegistryInterface $registry)
|
|
||||||
{
|
|
||||||
parent::__construct($registry, Product::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public function findBySomething($value)
|
|
||||||
{
|
|
||||||
return $this->createQueryBuilder('p')
|
|
||||||
->where('p.something = :value')->setParameter('value', $value)
|
|
||||||
->orderBy('p.id', 'ASC')
|
|
||||||
->setMaxResults(10)
|
|
||||||
->getQuery()
|
|
||||||
->getResult()
|
|
||||||
;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Repository;
|
|
||||||
|
|
||||||
use App\Entity\SellRecord;
|
|
||||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
||||||
use Symfony\Bridge\Doctrine\RegistryInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method SellRecord|null find($id, $lockMode = null, $lockVersion = null)
|
|
||||||
* @method SellRecord|null findOneBy(array $criteria, array $orderBy = null)
|
|
||||||
* @method SellRecord[] findAll()
|
|
||||||
* @method SellRecord[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
|
||||||
*/
|
|
||||||
class SellRecordRepository extends ServiceEntityRepository
|
|
||||||
{
|
|
||||||
public function __construct(RegistryInterface $registry)
|
|
||||||
{
|
|
||||||
parent::__construct($registry, SellRecord::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
public function findBySomething($value)
|
|
||||||
{
|
|
||||||
return $this->createQueryBuilder('s')
|
|
||||||
->where('s.something = :value')->setParameter('value', $value)
|
|
||||||
->orderBy('s.id', 'ASC')
|
|
||||||
->setMaxResults(10)
|
|
||||||
->getQuery()
|
|
||||||
->getResult()
|
|
||||||
;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
440
symfony.lock
440
symfony.lock
@ -1,440 +0,0 @@
|
|||||||
{
|
|
||||||
"composer/ca-bundle": {
|
|
||||||
"version": "1.1.0"
|
|
||||||
},
|
|
||||||
"doctrine/annotations": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"doctrine/cache": {
|
|
||||||
"version": "v1.6.2"
|
|
||||||
},
|
|
||||||
"doctrine/collections": {
|
|
||||||
"version": "v1.4.0"
|
|
||||||
},
|
|
||||||
"doctrine/common": {
|
|
||||||
"version": "v2.7.3"
|
|
||||||
},
|
|
||||||
"doctrine/data-fixtures": {
|
|
||||||
"version": "v1.2.2"
|
|
||||||
},
|
|
||||||
"doctrine/dbal": {
|
|
||||||
"version": "v2.5.13"
|
|
||||||
},
|
|
||||||
"doctrine/doctrine-bundle": {
|
|
||||||
"version": "1.6",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.6",
|
|
||||||
"ref": "c407ab0b5e5a39b242a52d323a5e84e6d3b7e4c0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"doctrine/doctrine-cache-bundle": {
|
|
||||||
"version": "1.3.2"
|
|
||||||
},
|
|
||||||
"doctrine/doctrine-fixtures-bundle": {
|
|
||||||
"version": "3.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.0",
|
|
||||||
"ref": "2ea6070ecf365f9a801ccaed4b31d4a3b7af5693"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"doctrine/doctrine-migrations-bundle": {
|
|
||||||
"version": "1.2",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.2",
|
|
||||||
"ref": "c1431086fec31f17fbcfe6d6d7e92059458facc1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"doctrine/inflector": {
|
|
||||||
"version": "v1.2.0"
|
|
||||||
},
|
|
||||||
"doctrine/instantiator": {
|
|
||||||
"version": "1.0.5"
|
|
||||||
},
|
|
||||||
"doctrine/lexer": {
|
|
||||||
"version": "v1.0.1"
|
|
||||||
},
|
|
||||||
"doctrine/migrations": {
|
|
||||||
"version": "v1.5.0"
|
|
||||||
},
|
|
||||||
"doctrine/orm": {
|
|
||||||
"version": "v2.5.14"
|
|
||||||
},
|
|
||||||
"easycorp/easy-log-handler": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "70062abc2cd58794d2a90274502f81b55cd9951b"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"egulias/email-validator": {
|
|
||||||
"version": "2.1.3"
|
|
||||||
},
|
|
||||||
"fig/link-util": {
|
|
||||||
"version": "1.0.0"
|
|
||||||
},
|
|
||||||
"friendsofsymfony/rest-bundle": {
|
|
||||||
"version": "2.2",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes-contrib",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "2.2",
|
|
||||||
"ref": "258300d52be6ad59b32a888d5ddafbf9638540ff"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jdorn/sql-formatter": {
|
|
||||||
"version": "v1.2.17"
|
|
||||||
},
|
|
||||||
"monolog/monolog": {
|
|
||||||
"version": "1.23.0"
|
|
||||||
},
|
|
||||||
"msgphp/domain": {
|
|
||||||
"version": "v0.2.3"
|
|
||||||
},
|
|
||||||
"msgphp/user": {
|
|
||||||
"version": "v0.2.3"
|
|
||||||
},
|
|
||||||
"msgphp/user-bundle": {
|
|
||||||
"version": "0.2",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes-contrib",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "0.2",
|
|
||||||
"ref": "467ccfceb0143c35ed852ccd8f1d03effb73afc4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ocramius/proxy-manager": {
|
|
||||||
"version": "2.0.4"
|
|
||||||
},
|
|
||||||
"phpdocumentor/reflection-common": {
|
|
||||||
"version": "1.0.1"
|
|
||||||
},
|
|
||||||
"phpdocumentor/reflection-docblock": {
|
|
||||||
"version": "4.3.0"
|
|
||||||
},
|
|
||||||
"phpdocumentor/type-resolver": {
|
|
||||||
"version": "0.4.0"
|
|
||||||
},
|
|
||||||
"psr/cache": {
|
|
||||||
"version": "1.0.1"
|
|
||||||
},
|
|
||||||
"psr/container": {
|
|
||||||
"version": "1.0.0"
|
|
||||||
},
|
|
||||||
"psr/link": {
|
|
||||||
"version": "1.0.0"
|
|
||||||
},
|
|
||||||
"psr/log": {
|
|
||||||
"version": "1.0.2"
|
|
||||||
},
|
|
||||||
"psr/simple-cache": {
|
|
||||||
"version": "1.0.1"
|
|
||||||
},
|
|
||||||
"sensio/framework-extra-bundle": {
|
|
||||||
"version": "4.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "4.0",
|
|
||||||
"ref": "aaddfdf43cdecd4cf91f992052d76c2cadc04543"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sensio/generator-bundle": {
|
|
||||||
"version": "v3.1.7"
|
|
||||||
},
|
|
||||||
"sensiolabs/security-checker": {
|
|
||||||
"version": "4.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "4.0",
|
|
||||||
"ref": "e65a105bf4cd5b1b79012ba029954927f05922e8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"swiftmailer/swiftmailer": {
|
|
||||||
"version": "v6.0.2"
|
|
||||||
},
|
|
||||||
"symfony/asset": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/browser-kit": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/cache": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/class-loader": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/config": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/console": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "c646e4b71af082e94b5014daca36ef6812bad076"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/css-selector": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/debug": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/debug-bundle": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "71d29aaf710fd59cd3abff2b1ade907ed73103c6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/debug-pack": {
|
|
||||||
"version": "v1.0.4"
|
|
||||||
},
|
|
||||||
"symfony/dependency-injection": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/doctrine-bridge": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/dom-crawler": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/dotenv": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/event-dispatcher": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/expression-language": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/filesystem": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/finder": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/flex": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "cc1afd81841db36fbef982fe56b48ade6716fac4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/form": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/framework-bundle": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "b9f462a47f7fd28d56c61f59c027fd7ad8e1aac8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/http-foundation": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/http-kernel": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/inflector": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/intl": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/lts": {
|
|
||||||
"version": "v3"
|
|
||||||
},
|
|
||||||
"symfony/maker-bundle": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/monolog-bridge": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/monolog-bundle": {
|
|
||||||
"version": "3.1",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.1",
|
|
||||||
"ref": "371d1a2b69984710646b09a1182ef1d4308c904f"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/options-resolver": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/orm-pack": {
|
|
||||||
"version": "v1.0.5"
|
|
||||||
},
|
|
||||||
"symfony/phpunit-bridge": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "41416370e732d1c8e7a0953a5ce815b641cfba0f"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/polyfill-apcu": {
|
|
||||||
"version": "v1.7.0"
|
|
||||||
},
|
|
||||||
"symfony/polyfill-intl-icu": {
|
|
||||||
"version": "v1.7.0"
|
|
||||||
},
|
|
||||||
"symfony/polyfill-mbstring": {
|
|
||||||
"version": "v1.7.0"
|
|
||||||
},
|
|
||||||
"symfony/process": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/profiler-pack": {
|
|
||||||
"version": "v1.0.3"
|
|
||||||
},
|
|
||||||
"symfony/property-access": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/property-info": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/routing": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "a249484db698d1a847a30291c8f732414ac47e25"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/security": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/security-bundle": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "f8a63faa0d9521526499c0a8f403c9964ecb0527"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/serializer": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/serializer-pack": {
|
|
||||||
"version": "v1.0.1"
|
|
||||||
},
|
|
||||||
"symfony/stopwatch": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/swiftmailer-bundle": {
|
|
||||||
"version": "2.5",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "2.5",
|
|
||||||
"ref": "3db029c03e452b4a23f7fc45cec7c922c2247eb8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/templating": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/translation": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "6bcd6c570c017ea6ae5a7a6a027c929fd3542cd8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/twig-bridge": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/twig-bundle": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "f75ac166398e107796ca94cc57fa1edaa06ec47f"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/validator": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/var-dumper": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/web-link": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"symfony/web-profiler-bundle": {
|
|
||||||
"version": "3.3",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "3.3",
|
|
||||||
"ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/webpack-encore-pack": {
|
|
||||||
"version": "1.0",
|
|
||||||
"recipe": {
|
|
||||||
"repo": "github.com/symfony/recipes",
|
|
||||||
"branch": "master",
|
|
||||||
"version": "1.0",
|
|
||||||
"ref": "a2f276eff6e95ca94be135d2d3e5c1247c6f8807"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"symfony/yaml": {
|
|
||||||
"version": "v3.4.6"
|
|
||||||
},
|
|
||||||
"twig/twig": {
|
|
||||||
"version": "v2.4.6"
|
|
||||||
},
|
|
||||||
"webmozart/assert": {
|
|
||||||
"version": "1.3.0"
|
|
||||||
},
|
|
||||||
"willdurand/jsonp-callback-validator": {
|
|
||||||
"version": "v1.1.0"
|
|
||||||
},
|
|
||||||
"willdurand/negotiation": {
|
|
||||||
"version": "v2.3.1"
|
|
||||||
},
|
|
||||||
"zendframework/zend-code": {
|
|
||||||
"version": "3.1.0"
|
|
||||||
},
|
|
||||||
"zendframework/zend-eventmanager": {
|
|
||||||
"version": "3.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
18
tests/AppBundle/Controller/DefaultControllerTest.php
Normal file
18
tests/AppBundle/Controller/DefaultControllerTest.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\AppBundle\Controller;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
|
|
||||||
|
class DefaultControllerTest extends WebTestCase
|
||||||
|
{
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$crawler = $client->request('GET', '/');
|
||||||
|
|
||||||
|
$this->assertEquals(200, $client->getResponse()->getStatusCode());
|
||||||
|
$this->assertContains('Welcome to Symfony', $crawler->filter('#container h1')->text());
|
||||||
|
}
|
||||||
|
}
|
817
var/SymfonyRequirements.php
Normal file
817
var/SymfonyRequirements.php
Normal file
@ -0,0 +1,817 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* 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 bool $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 bool $optional Whether this is only an optional recommendation not a mandatory requirement
|
||||||
|
*/
|
||||||
|
public function __construct($fulfilled, $testMessage, $helpHtml, $helpText = null, $optional = false)
|
||||||
|
{
|
||||||
|
$this->fulfilled = (bool) $fulfilled;
|
||||||
|
$this->testMessage = (string) $testMessage;
|
||||||
|
$this->helpHtml = (string) $helpHtml;
|
||||||
|
$this->helpText = null === $helpText ? strip_tags($this->helpHtml) : (string) $helpText;
|
||||||
|
$this->optional = (bool) $optional;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the requirement is fulfilled.
|
||||||
|
*
|
||||||
|
* @return bool 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 bool 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 bool|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 bool $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 bool $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
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Requirement[]
|
||||||
|
*/
|
||||||
|
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 bool $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 bool $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 bool|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 bool $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 bool|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 bool $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 Requirement[]
|
||||||
|
*/
|
||||||
|
public function all()
|
||||||
|
{
|
||||||
|
return $this->requirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all mandatory requirements.
|
||||||
|
*
|
||||||
|
* @return Requirement[]
|
||||||
|
*/
|
||||||
|
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 Requirement[]
|
||||||
|
*/
|
||||||
|
public function getFailedRequirements()
|
||||||
|
{
|
||||||
|
$array = array();
|
||||||
|
foreach ($this->requirements as $req) {
|
||||||
|
if (!$req->isFulfilled() && !$req->isOptional()) {
|
||||||
|
$array[] = $req;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all optional recommendations.
|
||||||
|
*
|
||||||
|
* @return Requirement[]
|
||||||
|
*/
|
||||||
|
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 Requirement[]
|
||||||
|
*/
|
||||||
|
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 bool 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 <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class SymfonyRequirements extends RequirementCollection
|
||||||
|
{
|
||||||
|
const LEGACY_REQUIRED_PHP_VERSION = '5.3.3';
|
||||||
|
const REQUIRED_PHP_VERSION = '5.5.9';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor that initializes the requirements.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
/* mandatory requirements follow */
|
||||||
|
|
||||||
|
$installedPhpVersion = phpversion();
|
||||||
|
$requiredPhpVersion = $this->getPhpRequiredVersion();
|
||||||
|
|
||||||
|
$this->addRecommendation(
|
||||||
|
$requiredPhpVersion,
|
||||||
|
'Vendors should be installed in order to check all requirements.',
|
||||||
|
'Run the <code>composer install</code> command.',
|
||||||
|
'Run the "composer install" command.'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (false !== $requiredPhpVersion) {
|
||||||
|
$this->addRequirement(
|
||||||
|
version_compare($installedPhpVersion, $requiredPhpVersion, '>='),
|
||||||
|
sprintf('PHP version must be at least %s (%s installed)', $requiredPhpVersion, $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, $requiredPhpVersion),
|
||||||
|
sprintf('Install PHP %s or newer (installed version is %s)', $requiredPhpVersion, $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.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$cacheDir = is_dir(__DIR__.'/../var/cache') ? __DIR__.'/../var/cache' : __DIR__.'/cache';
|
||||||
|
|
||||||
|
$this->addRequirement(
|
||||||
|
is_writable($cacheDir),
|
||||||
|
'app/cache/ or var/cache/ directory must be writable',
|
||||||
|
'Change the permissions of either "<strong>app/cache/</strong>" or "<strong>var/cache/</strong>" directory so that the web server can write into it.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$logsDir = is_dir(__DIR__.'/../var/logs') ? __DIR__.'/../var/logs' : __DIR__.'/logs';
|
||||||
|
|
||||||
|
$this->addRequirement(
|
||||||
|
is_writable($logsDir),
|
||||||
|
'app/logs/ or var/logs/ directory must be writable',
|
||||||
|
'Change the permissions of either "<strong>app/logs/</strong>" or "<strong>var/logs/</strong>" directory so that the web server can write into it.'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (version_compare($installedPhpVersion, '7.0.0', '<')) {
|
||||||
|
$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 (false !== $requiredPhpVersion && version_compare($installedPhpVersion, $requiredPhpVersion, '>=')) {
|
||||||
|
$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('iconv'),
|
||||||
|
'iconv() must be available',
|
||||||
|
'Install and enable the <strong>iconv</strong> extension.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$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+).'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (extension_loaded('mbstring')) {
|
||||||
|
$this->addPhpIniRequirement(
|
||||||
|
'mbstring.func_overload',
|
||||||
|
create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
|
||||||
|
true,
|
||||||
|
'string functions should not be overloaded',
|
||||||
|
'Set "<strong>mbstring.func_overload</strong>" to <strong>0</strong> in php.ini<a href="#phpini">*</a> to disable function overloading by the mbstring extension.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* optional recommendations follow */
|
||||||
|
|
||||||
|
if (file_exists(__DIR__.'/../vendor/composer')) {
|
||||||
|
require_once __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
|
try {
|
||||||
|
$r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle');
|
||||||
|
|
||||||
|
$contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php');
|
||||||
|
} catch (ReflectionException $e) {
|
||||||
|
$contents = '';
|
||||||
|
}
|
||||||
|
$this->addRecommendation(
|
||||||
|
file_get_contents(__FILE__) === $contents,
|
||||||
|
'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-DOM and PHP-XML modules should be installed',
|
||||||
|
'Install and enable the <strong>PHP-DOM</strong> and the <strong>PHP-XML</strong> modules.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addRecommendation(
|
||||||
|
function_exists('mb_strlen'),
|
||||||
|
'mb_strlen() should be available',
|
||||||
|
'Install and enable the <strong>mbstring</strong> extension.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addRecommendation(
|
||||||
|
function_exists('utf8_decode'),
|
||||||
|
'utf8_decode() should be available',
|
||||||
|
'Install and enable the <strong>XML</strong> extension.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addRecommendation(
|
||||||
|
function_exists('filter_var'),
|
||||||
|
'filter_var() should be available',
|
||||||
|
'Install and enable the <strong>filter</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(
|
||||||
|
extension_loaded('intl'),
|
||||||
|
'intl extension should be available',
|
||||||
|
'Install and enable the <strong>intl</strong> extension (used for validators).'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (extension_loaded('intl')) {
|
||||||
|
// in some WAMP server installations, new Collator() returns null
|
||||||
|
$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.'
|
||||||
|
);
|
||||||
|
|
||||||
|
// check for compatible ICU versions (only done when you have the intl extension)
|
||||||
|
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+).'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (class_exists('Symfony\Component\Intl\Intl')) {
|
||||||
|
$this->addRecommendation(
|
||||||
|
\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion(),
|
||||||
|
sprintf('intl ICU version installed on your system is outdated (%s) and does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
|
||||||
|
'To get the latest internationalization data upgrade the ICU system package and the intl PHP extension.'
|
||||||
|
);
|
||||||
|
if (\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion()) {
|
||||||
|
$this->addRecommendation(
|
||||||
|
\Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(),
|
||||||
|
sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()),
|
||||||
|
'To avoid internationalization data inconsistencies upgrade the symfony/intl component.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addPhpIniRecommendation(
|
||||||
|
'intl.error_level',
|
||||||
|
create_function('$cfgValue', 'return (int) $cfgValue === 0;'),
|
||||||
|
true,
|
||||||
|
'intl.error_level should be 0 in php.ini',
|
||||||
|
'Set "<strong>intl.error_level</strong>" to "<strong>0</strong>" in php.ini<a href="#phpini">*</a> to inhibit the messages when an error occurs in ICU functions.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$accelerator =
|
||||||
|
(extension_loaded('eaccelerator') && ini_get('eaccelerator.enable'))
|
||||||
|
||
|
||||||
|
(extension_loaded('apc') && ini_get('apc.enabled'))
|
||||||
|
||
|
||||||
|
(extension_loaded('Zend Optimizer+') && ini_get('zend_optimizerplus.enable'))
|
||||||
|
||
|
||||||
|
(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/or enable a <strong>PHP accelerator</strong> (highly recommended).'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
|
||||||
|
$this->addRecommendation(
|
||||||
|
$this->getRealpathCacheSize() >= 5 * 1024 * 1024,
|
||||||
|
'realpath_cache_size should be at least 5M in php.ini',
|
||||||
|
'Setting "<strong>realpath_cache_size</strong>" to e.g. "<strong>5242880</strong>" or "<strong>5M</strong>" in php.ini<a href="#phpini">*</a> may improve performance on Windows significantly in some cases.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$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) > 0,
|
||||||
|
sprintf('PDO should have some drivers installed (currently available: %s)', count($drivers) ? implode(', ', $drivers) : 'none'),
|
||||||
|
'Install <strong>PDO drivers</strong> (mandatory for Doctrine).'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads realpath_cache_size from php.ini and converts it to int.
|
||||||
|
*
|
||||||
|
* (e.g. 16k is converted to 16384 int)
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected function getRealpathCacheSize()
|
||||||
|
{
|
||||||
|
$size = ini_get('realpath_cache_size');
|
||||||
|
$size = trim($size);
|
||||||
|
$unit = '';
|
||||||
|
if (!ctype_digit($size)) {
|
||||||
|
$unit = strtolower(substr($size, -1, 1));
|
||||||
|
$size = (int) substr($size, 0, -1);
|
||||||
|
}
|
||||||
|
switch ($unit) {
|
||||||
|
case 'g':
|
||||||
|
return $size * 1024 * 1024 * 1024;
|
||||||
|
case 'm':
|
||||||
|
return $size * 1024 * 1024;
|
||||||
|
case 'k':
|
||||||
|
return $size * 1024;
|
||||||
|
default:
|
||||||
|
return (int) $size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines PHP required version from Symfony version.
|
||||||
|
*
|
||||||
|
* @return string|false The PHP required version or false if it could not be guessed
|
||||||
|
*/
|
||||||
|
protected function getPhpRequiredVersion()
|
||||||
|
{
|
||||||
|
if (!file_exists($path = __DIR__.'/../composer.lock')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$composerLock = json_decode(file_get_contents($path), true);
|
||||||
|
foreach ($composerLock['packages'] as $package) {
|
||||||
|
$name = $package['name'];
|
||||||
|
if ('symfony/symfony' !== $name && 'symfony/http-kernel' !== $name) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) $package['version'][1] > 2 ? self::REQUIRED_PHP_VERSION : self::LEGACY_REQUIRED_PHP_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
0
var/logs/.gitkeep
Normal file
0
var/logs/.gitkeep
Normal file
0
var/sessions/.gitkeep
Executable file
0
var/sessions/.gitkeep
Executable file
68
web/.htaccess
Normal file
68
web/.htaccess
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# Use the front controller as index file. It serves as a 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
|
||||||
|
# start page (path "/") because otherwise Apache will apply the rewriting rules
|
||||||
|
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
|
||||||
|
DirectoryIndex app.php
|
||||||
|
|
||||||
|
# By default, Apache does not evaluate symbolic links if you did not enable this
|
||||||
|
# feature in your server configuration. Uncomment the following line if you
|
||||||
|
# install assets as symlinks or if you experience problems related to symlinks
|
||||||
|
# when compiling LESS/Sass/CoffeScript assets.
|
||||||
|
# Options FollowSymlinks
|
||||||
|
|
||||||
|
# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
|
||||||
|
# to the front controller "/app.php" but be rewritten to "/app.php/app".
|
||||||
|
<IfModule mod_negotiation.c>
|
||||||
|
Options -MultiViews
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
# Determine the RewriteBase automatically and set it as environment variable.
|
||||||
|
# If you are using Apache aliases to do mass virtual hosting or installed the
|
||||||
|
# project in a subdirectory, the base path will be prepended to allow proper
|
||||||
|
# resolution of the app.php file and to redirect to the correct URI. It will
|
||||||
|
# work in environments without path prefix as well, providing a safe, one-size
|
||||||
|
# fits all solution. But as you do not need it in this case, you can comment
|
||||||
|
# the following 2 lines to eliminate the overhead.
|
||||||
|
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
|
||||||
|
RewriteRule ^(.*) - [E=BASE:%1]
|
||||||
|
|
||||||
|
# Sets the HTTP_AUTHORIZATION header removed by Apache
|
||||||
|
RewriteCond %{HTTP:Authorization} .
|
||||||
|
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||||
|
|
||||||
|
# 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 start page 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(?:/(.*)|$) %{ENV:BASE}/$1 [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]
|
||||||
|
|
||||||
|
# Rewrite all other queries to the front controller.
|
||||||
|
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 start page 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>
|
21
web/app.php
Normal file
21
web/app.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
if (PHP_VERSION_ID < 70000) {
|
||||||
|
include_once __DIR__.'/../var/bootstrap.php.cache';
|
||||||
|
}
|
||||||
|
|
||||||
|
$kernel = new AppKernel('prod', false);
|
||||||
|
if (PHP_VERSION_ID < 70000) {
|
||||||
|
$kernel->loadClassCache();
|
||||||
|
}
|
||||||
|
//$kernel = new AppCache($kernel);
|
||||||
|
|
||||||
|
// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
|
||||||
|
//Request::enableHttpMethodParameterOverride();
|
||||||
|
$request = Request::createFromGlobals();
|
||||||
|
$response = $kernel->handle($request);
|
||||||
|
$response->send();
|
||||||
|
$kernel->terminate($request, $response);
|
31
web/app_dev.php
Normal file
31
web/app_dev.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\Debug\Debug;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
||||||
|
// If you don't want to setup permissions the proper way, just uncomment the following PHP line
|
||||||
|
// read https://symfony.com/doc/current/setup.html#checking-symfony-application-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'], ['127.0.0.1', '::1'], true) || PHP_SAPI === 'cli-server')
|
||||||
|
) {
|
||||||
|
header('HTTP/1.0 403 Forbidden');
|
||||||
|
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
|
||||||
|
}
|
||||||
|
|
||||||
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
Debug::enable();
|
||||||
|
|
||||||
|
$kernel = new AppKernel('dev', true);
|
||||||
|
if (PHP_VERSION_ID < 70000) {
|
||||||
|
$kernel->loadClassCache();
|
||||||
|
}
|
||||||
|
$request = Request::createFromGlobals();
|
||||||
|
$response = $kernel->handle($request);
|
||||||
|
$response->send();
|
||||||
|
$kernel->terminate($request, $response);
|
BIN
web/apple-touch-icon.png
Normal file
BIN
web/apple-touch-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
422
web/config.php
Normal file
422
web/config.php
Normal file
@ -0,0 +1,422 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ************** 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 **************
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!isset($_SERVER['HTTP_HOST'])) {
|
||||||
|
exit("This script cannot be run from the CLI. Run it from a browser.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
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__).'/../var/SymfonyRequirements.php';
|
||||||
|
|
||||||
|
$symfonyRequirements = new SymfonyRequirements();
|
||||||
|
|
||||||
|
$majorProblems = $symfonyRequirements->getFailedRequirements();
|
||||||
|
$minorProblems = $symfonyRequirements->getFailedRecommendations();
|
||||||
|
$hasMajorProblems = (bool) count($majorProblems);
|
||||||
|
$hasMinorProblems = (bool) count($minorProblems);
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
|
<meta name="robots" content="noindex,nofollow" />
|
||||||
|
<title>Symfony Configuration Checker</title>
|
||||||
|
<style>
|
||||||
|
/* styles copied from symfony framework bundle */
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
#content pre {
|
||||||
|
white-space: normal;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
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 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 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-wrap: break-word;
|
||||||
|
}
|
||||||
|
.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;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
.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: 0 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* styles copied from bundles/sensiodistribution/webconfigurator/css/install.css */
|
||||||
|
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(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAICAYAAAAx8TU7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFdJREFUeNpiYACBjjOhDEiACSggCKTLgXQ5TJARqhIkcReIKxgqTGYxwvV0nDEGkmeAOIwJySiQ4HsgvseIpGo3ELsCtZ9lRDIvDCiwhwHJPEFkJwEEGACq6hdnax8y1AAAAABJRU5ErkJggg==) no-repeat right 7px;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
.sf-reset p.help {
|
||||||
|
padding: 12px 16px;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="content">
|
||||||
|
<div class="header clear-fix">
|
||||||
|
<div class="header-logo">
|
||||||
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALYAAAA+CAMAAACxzRGDAAAAUVBMVEX////Ly8yko6WLioxkYmVXVVkwLjLl5eWxsLJKSEzy8vJxcHLY2Ni+vb89Oz9XVVh+fH+Yl5n///+xsbLY2Nlxb3KkpKWXlph+fX+LiYy+vr/IZP61AAAAAXRSTlMAQObYZgAABRBJREFUeNrVmtuWoyAQRS1FEEQSzQU7//+hYxUiXsKQZLJWM+chsUloN+WhCuguYoKyYqzmvGasKqH4HyRKxndipcgcumH8qViTM7TkUclcwaHmf5XM0eWq4km1KjdqXfMXJHVe1J3hL8lk5fCGv6wmT+o0d87U+XNrk0Y9nfv+7LM6ZJH5ZBL6LAbSxQ3Q5FDr22Skr8PQSy4n7isnsQxSX4r6pobhjCHHeDNOKrO3yGmCvZOjV9jmt8ulTdXFKdbKLNh+kOMvBzuVRa4Y7MUsdEUSWQe7xxCfZmcwjHU83LqzFvSbJQOXQvptbPnEFoyZtUUGwTeKuLuTHyT1kaP0P6cR01OKvv448gtl61dqZfmJezQmU/t+1R2fJLtBwXV6uWGwB9SZPrn0fKO2WAvQN1PUhHjTom3xgXYTkvlSKHs19OhslETq6X3HrXbjt8XbGj9b4Gi+lUAnL6XxQj8Pyk9N4Bt1xUrsLVN/3isYMug8rODMdbgOvoHs8uAb2fcANIAzkKCLYy+AXRpSU8sr1r4P67xhLgPp7vM32zlqt7Bhq2fI1Hwp+VgANxok59SsGV3oqdUL0YVDMRY7Yg8QLbVUU4NZNoOq5hJHuxEM28Sh/IyUZ8D3reR+yc58EGvOy2U0HQL6G9V+kWyEWHmzaMx6t4o9RhOm/riUiYrzqij4Ptqkn7AaCXqc+F47m04ahfde7YIz8RHEBN6BdVwdIGRVdNbKqYu1Hc0x0wBY4wqC8+XUgBGnj81SZsQB+0yAS1x/BlI/6ebHHk0lauQLuPDpu6EwAVJ7T0rl2uXa23jcqNyOZekhqYHRz3JOANrF4wCCmEs1f9D1lUe0n4NAATed80Y5e0Q7CO2TezM/BR6wKdgQzKbCF4uOQC3Bk0fKAzbFlyRWg3gksA/gmm7eOjrpaKX7fHlEW2xLbE6GZsPiCiShVzN7RG2xTz2G+OJtEqzdJ7APxy3MrSsV0VukXbKMp9lhs5BN6dr3CN+sySUaoxGwfRUM3I/gdPYONgVU+PLX4vUWm32AvUySarbONvcpV2RQEPKKjEBHFk01kQDGRblnn8ZuE9g+JUl8OWAPbkFK2K6JxhJVvF47FzYYnAN22ttwxKYCoH36rheEB7KG/HF/YUaa2G5JF+55tpyrl7B1WHM39HuP2N2EXPl1UBu8vbj4OjvD+NoTE4ssF+ScARgaJY1N7+u8bY/Y9BSM5PKwJbvMVab32YP5FB5TtcYVrGoASolVLTzI7kVsYVxRtAb5n2JXq1vCdtd47XtYItynrN0835PasLg0y13aOPbmPI+on2Lr9e5tjSHvgkAvclUjL3Fsdaw03IzgTR62yYClk7QMah4IQ0qSsoYYbOix6zJR1ZGDNMOY3Bb6W5S6jiyovep3t7bUPyoq7OkjYumrfESp8zSBc/OLosVf+nTnnKjsqR16++WDwpI8FxJWRFTlI6NKnqYJaL96TqjAbo9Toi5QiWBDcmfdFV+T8dkvFe5bItgstbM2X6QG2mVun+cazfRwOS0eiaeRRJKgLfc3BQAqfnhJyz8lfR6580SF/FXVu83Nz1xrrnFqqXL6Qxl47DNSm4RFflvN5sABDD8peouqLLKQXVdGbnqf+qIpOxON4ZyYdJEJ6sy4zS2c5eRPTT4Jyp46qDE5/ptAWqJOQ9e6yE82FXBbZCk1/tXVoshVoopE3CB0zmraI3nbqCJ/gW3ZMgtbC5nh/QHlOoOZBxQCRgAAAABJRU5ErkJggg==" alt="Symfony" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="search">
|
||||||
|
<form method="get" action="http://symfony.com/search">
|
||||||
|
<div class="form-row">
|
||||||
|
|
||||||
|
<label for="search-id">
|
||||||
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAABUElEQVQoz2NgAIJ29iBdD0d7X2cPb+tY2f9MDMjgP2O2hKu7vS8CBlisZUNSMJ3fxRMkXO61wm2ue6I3iB1q8Z8ZriDZFCS03fm/wX+1/xp/TBo8QPxeqf+MUAW+QIFKj/+q/wX/c/3n/i/6Qd/bx943z/Q/K1SBI1D9fKv/AhCn/Wf5L5EHdFGKw39OqAIXoPpOMziX4T9/DFBBnuN/HqhAEtCKCNf/XDA/rZRyAmrpsvrPDVUw3wrkqCiLaewg6TohX1d7X0ffs5r/OaAKfinmgt3t4ulr4+Xg4ANip3j+l/zPArNT4LNOD0pAgWCSOUIBy3+h/+pXbBa5tni0eMx23+/mB1YSYnENroT5Pw/QSOX/mkCo+l/jgo0v2KJA643s8PgAmsMBDCbu/5xALHPB2husxN9uCzsDOgAq5kAoaZVnYMCh5Ky1r88Eh/+iABM8jUk7ClYIAAAAAElFTkSuQmCC" 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">Configuration Checker</h1>
|
||||||
|
<p>
|
||||||
|
This script analyzes your system to check whether is
|
||||||
|
ready to run Symfony applications.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php if ($hasMajorProblems): ?>
|
||||||
|
<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->getTestMessage() ?>
|
||||||
|
<p class="help"><em><?php echo $problem->getHelpHtml() ?></em></p>
|
||||||
|
</li>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</ol>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if ($hasMinorProblems): ?>
|
||||||
|
<h2>Recommendations</h2>
|
||||||
|
<p>
|
||||||
|
<?php if ($hasMajorProblems): ?>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->getTestMessage() ?>
|
||||||
|
<p class="help"><em><?php echo $problem->getHelpHtml() ?></em></p>
|
||||||
|
</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 (!$hasMajorProblems && !$hasMinorProblems): ?>
|
||||||
|
<p class="ok">All checks passed successfully. Your system is ready to run Symfony applications.</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<ul class="symfony-install-continue">
|
||||||
|
<?php if ($hasMajorProblems || $hasMinorProblems): ?>
|
||||||
|
<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
web/favicon.ico
Normal file
BIN
web/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
5
web/robots.txt
Normal file
5
web/robots.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# www.robotstxt.org/
|
||||||
|
# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
31
webpack.config.js
Executable file → Normal file
31
webpack.config.js
Executable file → Normal file
@ -1,23 +1,32 @@
|
|||||||
var Encore = require('@symfony/webpack-encore');
|
var Encore = require('@symfony/webpack-encore');
|
||||||
|
|
||||||
Encore
|
Encore
|
||||||
// the project directory where compiled assets will be stored
|
// the project directory where all compiled assets will be stored
|
||||||
.setOutputPath('public/build/')
|
.setOutputPath('web/build/')
|
||||||
|
|
||||||
// the public path used by the web server to access the previous directory
|
// the public path used by the web server to access the previous directory
|
||||||
.setPublicPath('/build')
|
.setPublicPath('/build')
|
||||||
.cleanupOutputBeforeBuild()
|
|
||||||
.enableSourceMaps(!Encore.isProduction())
|
|
||||||
// uncomment to create hashed filenames (e.g. app.abc123.css)
|
|
||||||
// .enableVersioning(Encore.isProduction())
|
|
||||||
|
|
||||||
// uncomment to define the assets of the project
|
// will create web/build/app.js and web/build/app.css
|
||||||
.addEntry('js/app', './assets/js/app.js')
|
.addEntry('app', './assets/js/app.js')
|
||||||
.addStyleEntry('css/app', './assets/css/global.scss')
|
|
||||||
// uncomment if you use Sass/SCSS files
|
// allow sass/scss files to be processed
|
||||||
.enableSassLoader()
|
.enableSassLoader()
|
||||||
|
|
||||||
// uncomment for legacy applications that require $/jQuery as a global variable
|
// allow legacy applications to use $/jQuery as a global variable
|
||||||
.autoProvidejQuery()
|
.autoProvidejQuery()
|
||||||
|
|
||||||
|
// .enableSourceMaps(!Encore.isProduction())
|
||||||
|
|
||||||
|
// empty the outputPath dir before each build
|
||||||
|
.cleanupOutputBeforeBuild()
|
||||||
|
|
||||||
|
// show OS notifications when builds finish/fail
|
||||||
|
// .enableBuildNotifications()
|
||||||
|
|
||||||
|
// create hashed filenames (e.g. app.abc123.css)
|
||||||
|
// .enableVersioning()
|
||||||
;
|
;
|
||||||
|
|
||||||
|
// export the final configuration
|
||||||
module.exports = Encore.getWebpackConfig();
|
module.exports = Encore.getWebpackConfig();
|
||||||
|
142
yarn.lock
Executable file → Normal file
142
yarn.lock
Executable file → Normal file
@ -2,9 +2,9 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@symfony/webpack-encore@^0.17.0":
|
"@symfony/webpack-encore@^0.19.0":
|
||||||
version "0.17.1"
|
version "0.19.0"
|
||||||
resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.17.1.tgz#4889d92bd241eff48ff4b72e76fa367b4c085c9e"
|
resolved "https://registry.yarnpkg.com/@symfony/webpack-encore/-/webpack-encore-0.19.0.tgz#f0725dbbede5ff9d9fdbd7a07f84accafc83ca14"
|
||||||
dependencies:
|
dependencies:
|
||||||
babel-core "^6.24.0"
|
babel-core "^6.24.0"
|
||||||
babel-loader "^7.1.0"
|
babel-loader "^7.1.0"
|
||||||
@ -29,22 +29,22 @@
|
|||||||
yargs "^8.0.1"
|
yargs "^8.0.1"
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "9.4.7"
|
version "9.6.0"
|
||||||
resolved "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7"
|
||||||
|
|
||||||
"@types/tapable@^0":
|
"@types/tapable@^0":
|
||||||
version "0.2.5"
|
version "0.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz#2443fc12da514c81346b1a665675559cee21fa75"
|
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.5.tgz#2443fc12da514c81346b1a665675559cee21fa75"
|
||||||
|
|
||||||
"@types/uglify-js@*":
|
"@types/uglify-js@*":
|
||||||
version "2.6.30"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-2.6.30.tgz#257d2b6dd86673d60da476680fba90f2e30c6eef"
|
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.0.tgz#b765cf23abdc6ab2a67f2b72a9e94a1d43c6432e"
|
||||||
dependencies:
|
dependencies:
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
"@types/webpack@^3.0.5":
|
"@types/webpack@^3.0.5":
|
||||||
version "3.8.10"
|
version "3.8.11"
|
||||||
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.10.tgz#2086c1d3969afea84ffc4159e646d3919248ee7b"
|
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.11.tgz#df2d7f8db43dbc15b4e8ecbdc91e6f68ed6b83ab"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
"@types/tapable" "^0"
|
"@types/tapable" "^0"
|
||||||
@ -109,8 +109,8 @@ ajv@^5.0.0, ajv@^5.1.0:
|
|||||||
json-schema-traverse "^0.3.0"
|
json-schema-traverse "^0.3.0"
|
||||||
|
|
||||||
ajv@^6.1.0:
|
ajv@^6.1.0:
|
||||||
version "6.2.1"
|
version "6.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7"
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal "^1.0.0"
|
fast-deep-equal "^1.0.0"
|
||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
@ -886,6 +886,10 @@ bootstrap-sass@^3.3.7:
|
|||||||
version "3.3.7"
|
version "3.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498"
|
resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498"
|
||||||
|
|
||||||
|
bootstrap@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.0.0.tgz#ceb03842c145fcc1b9b4e15da2a05656ba68469a"
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
@ -1063,12 +1067,12 @@ caniuse-api@^1.5.2:
|
|||||||
lodash.uniq "^4.5.0"
|
lodash.uniq "^4.5.0"
|
||||||
|
|
||||||
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
|
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
|
||||||
version "1.0.30000815"
|
version "1.0.30000819"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000815.tgz#0e218fa133d0d071c886aa041b435258cc746891"
|
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000819.tgz#c3b7dd559e5e6d63d5dcaa62bac6bd04c7619709"
|
||||||
|
|
||||||
caniuse-lite@^1.0.30000792:
|
caniuse-lite@^1.0.30000792:
|
||||||
version "1.0.30000815"
|
version "1.0.30000819"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz#3a4258e6850362185adb11b0d754a48402d35bf6"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2"
|
||||||
|
|
||||||
caseless@~0.11.0:
|
caseless@~0.11.0:
|
||||||
version "0.11.0"
|
version "0.11.0"
|
||||||
@ -1095,7 +1099,7 @@ chalk@^1.1.1, chalk@^1.1.3:
|
|||||||
strip-ansi "^3.0.0"
|
strip-ansi "^3.0.0"
|
||||||
supports-color "^2.0.0"
|
supports-color "^2.0.0"
|
||||||
|
|
||||||
chalk@^2.3.1:
|
chalk@^2.3.2:
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -1104,8 +1108,8 @@ chalk@^2.3.1:
|
|||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
chokidar@^2.0.0, chokidar@^2.0.2:
|
chokidar@^2.0.0, chokidar@^2.0.2:
|
||||||
version "2.0.2"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7"
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176"
|
||||||
dependencies:
|
dependencies:
|
||||||
anymatch "^2.0.0"
|
anymatch "^2.0.0"
|
||||||
async-each "^1.0.0"
|
async-each "^1.0.0"
|
||||||
@ -1119,7 +1123,7 @@ chokidar@^2.0.0, chokidar@^2.0.2:
|
|||||||
readdirp "^2.0.0"
|
readdirp "^2.0.0"
|
||||||
upath "^1.0.0"
|
upath "^1.0.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "^1.0.0"
|
fsevents "^1.1.2"
|
||||||
|
|
||||||
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
@ -1175,8 +1179,8 @@ clone-deep@^2.0.1:
|
|||||||
shallow-clone "^1.0.0"
|
shallow-clone "^1.0.0"
|
||||||
|
|
||||||
clone@^1.0.2:
|
clone@^1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
|
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||||
|
|
||||||
co@^4.6.0:
|
co@^4.6.0:
|
||||||
version "4.6.0"
|
version "4.6.0"
|
||||||
@ -1242,8 +1246,8 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5:
|
|||||||
delayed-stream "~1.0.0"
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
commander@^2.9.0:
|
commander@^2.9.0:
|
||||||
version "2.15.0"
|
version "2.15.1"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.0.tgz#ad2a23a1c3b036e392469b8012cec6b33b4c1322"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
||||||
|
|
||||||
commondir@^1.0.1:
|
commondir@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
@ -1710,8 +1714,8 @@ ee-first@1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
|
|
||||||
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
|
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
|
||||||
version "1.3.37"
|
version "1.3.40"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz#4a92734e0044c8cf0b1553be57eae21a4c6e5fab"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf"
|
||||||
|
|
||||||
elliptic@^6.0.0:
|
elliptic@^6.0.0:
|
||||||
version "6.4.0"
|
version "6.4.0"
|
||||||
@ -1765,8 +1769,8 @@ error-stack-parser@^2.0.0:
|
|||||||
stackframe "^1.0.3"
|
stackframe "^1.0.3"
|
||||||
|
|
||||||
es-abstract@^1.7.0:
|
es-abstract@^1.7.0:
|
||||||
version "1.10.0"
|
version "1.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
|
||||||
dependencies:
|
dependencies:
|
||||||
es-to-primitive "^1.1.1"
|
es-to-primitive "^1.1.1"
|
||||||
function-bind "^1.1.1"
|
function-bind "^1.1.1"
|
||||||
@ -1783,11 +1787,12 @@ es-to-primitive@^1.1.1:
|
|||||||
is-symbol "^1.0.1"
|
is-symbol "^1.0.1"
|
||||||
|
|
||||||
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
|
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
|
||||||
version "0.10.40"
|
version "0.10.41"
|
||||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.40.tgz#ab3d2179b943008c5e9ef241beb25ef41424c774"
|
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.41.tgz#bab3e982d750f0112f0cb9e6abed72c59eb33eb2"
|
||||||
dependencies:
|
dependencies:
|
||||||
es6-iterator "~2.0.3"
|
es6-iterator "~2.0.3"
|
||||||
es6-symbol "~3.1.1"
|
es6-symbol "~3.1.1"
|
||||||
|
next-tick "1"
|
||||||
|
|
||||||
es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
|
es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
|
||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
@ -2119,6 +2124,10 @@ flatten@^1.0.2:
|
|||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
|
||||||
|
|
||||||
|
font-awesome@^4.7.0:
|
||||||
|
version "4.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
|
||||||
|
|
||||||
for-in@^0.1.3:
|
for-in@^0.1.3:
|
||||||
version "0.1.8"
|
version "0.1.8"
|
||||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
||||||
@ -2196,7 +2205,7 @@ fs.realpath@^1.0.0:
|
|||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
|
||||||
fsevents@^1.0.0:
|
fsevents@^1.1.2:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -2342,6 +2351,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
|||||||
version "4.1.11"
|
version "4.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||||
|
|
||||||
|
growly@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
|
||||||
|
|
||||||
handle-thing@^1.2.5:
|
handle-thing@^1.2.5:
|
||||||
version "1.2.5"
|
version "1.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
|
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
|
||||||
@ -2585,8 +2598,8 @@ icss-replace-symbols@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
||||||
|
|
||||||
ieee754@^1.1.4:
|
ieee754@^1.1.4:
|
||||||
version "1.1.8"
|
version "1.1.10"
|
||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.10.tgz#719a6f7b026831e64bdb838b0de1bb0029bbf716"
|
||||||
|
|
||||||
import-local@^1.0.0:
|
import-local@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
@ -2835,8 +2848,8 @@ is-path-cwd@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
||||||
|
|
||||||
is-path-in-cwd@^1.0.0:
|
is-path-in-cwd@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
|
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
|
||||||
dependencies:
|
dependencies:
|
||||||
is-path-inside "^1.0.0"
|
is-path-inside "^1.0.0"
|
||||||
|
|
||||||
@ -3306,8 +3319,8 @@ micromatch@^2.3.11:
|
|||||||
regex-cache "^0.4.2"
|
regex-cache "^0.4.2"
|
||||||
|
|
||||||
micromatch@^3.1.4:
|
micromatch@^3.1.4:
|
||||||
version "3.1.9"
|
version "3.1.10"
|
||||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89"
|
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
|
||||||
dependencies:
|
dependencies:
|
||||||
arr-diff "^4.0.0"
|
arr-diff "^4.0.0"
|
||||||
array-unique "^0.3.2"
|
array-unique "^0.3.2"
|
||||||
@ -3321,7 +3334,7 @@ micromatch@^3.1.4:
|
|||||||
object.pick "^1.3.0"
|
object.pick "^1.3.0"
|
||||||
regex-not "^1.0.0"
|
regex-not "^1.0.0"
|
||||||
snapdragon "^0.8.1"
|
snapdragon "^0.8.1"
|
||||||
to-regex "^3.0.1"
|
to-regex "^3.0.2"
|
||||||
|
|
||||||
miller-rabin@^4.0.0:
|
miller-rabin@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
@ -3410,8 +3423,8 @@ multicast-dns@^6.0.1:
|
|||||||
thunky "^1.0.2"
|
thunky "^1.0.2"
|
||||||
|
|
||||||
nan@^2.3.0, nan@^2.3.2:
|
nan@^2.3.0, nan@^2.3.2:
|
||||||
version "2.9.2"
|
version "2.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
|
||||||
|
|
||||||
nanomatch@^1.2.9:
|
nanomatch@^1.2.9:
|
||||||
version "1.2.9"
|
version "1.2.9"
|
||||||
@ -3438,6 +3451,10 @@ neo-async@^2.5.0:
|
|||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f"
|
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f"
|
||||||
|
|
||||||
|
next-tick@1:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
||||||
|
|
||||||
node-forge@0.7.1:
|
node-forge@0.7.1:
|
||||||
version "0.7.1"
|
version "0.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
|
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300"
|
||||||
@ -3488,6 +3505,15 @@ node-libs-browser@^2.0.0:
|
|||||||
util "^0.10.3"
|
util "^0.10.3"
|
||||||
vm-browserify "0.0.4"
|
vm-browserify "0.0.4"
|
||||||
|
|
||||||
|
node-notifier@^5.1.2:
|
||||||
|
version "5.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
|
||||||
|
dependencies:
|
||||||
|
growly "^1.3.0"
|
||||||
|
semver "^5.4.1"
|
||||||
|
shellwords "^0.1.1"
|
||||||
|
which "^1.3.0"
|
||||||
|
|
||||||
node-pre-gyp@^0.6.39:
|
node-pre-gyp@^0.6.39:
|
||||||
version "0.6.39"
|
version "0.6.39"
|
||||||
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
|
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
|
||||||
@ -3843,7 +3869,7 @@ pify@^3.0.0:
|
|||||||
|
|
||||||
pinkie-promise@^2.0.0:
|
pinkie-promise@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "http://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||||
dependencies:
|
dependencies:
|
||||||
pinkie "^2.0.0"
|
pinkie "^2.0.0"
|
||||||
|
|
||||||
@ -4114,12 +4140,12 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
|
|||||||
supports-color "^3.2.3"
|
supports-color "^3.2.3"
|
||||||
|
|
||||||
postcss@^6.0.1:
|
postcss@^6.0.1:
|
||||||
version "6.0.19"
|
version "6.0.21"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d"
|
||||||
dependencies:
|
dependencies:
|
||||||
chalk "^2.3.1"
|
chalk "^2.3.2"
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
supports-color "^5.2.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
prepend-http@^1.0.0:
|
prepend-http@^1.0.0:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
@ -4639,7 +4665,7 @@ selfsigned@^1.9.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
node-forge "0.7.1"
|
node-forge "0.7.1"
|
||||||
|
|
||||||
"semver@2 || 3 || 4 || 5", semver@^5.3.0:
|
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1:
|
||||||
version "5.5.0"
|
version "5.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||||
|
|
||||||
@ -4725,8 +4751,8 @@ setprototypeof@1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
|
||||||
|
|
||||||
sha.js@^2.4.0, sha.js@^2.4.8:
|
sha.js@^2.4.0, sha.js@^2.4.8:
|
||||||
version "2.4.10"
|
version "2.4.11"
|
||||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
|
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||||
dependencies:
|
dependencies:
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.1"
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
@ -4749,6 +4775,10 @@ shebang-regex@^1.0.0:
|
|||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||||
|
|
||||||
|
shellwords@^0.1.1:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
|
||||||
|
|
||||||
signal-exit@^3.0.0:
|
signal-exit@^3.0.0:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
@ -4904,8 +4934,8 @@ spdx-license-ids@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
|
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
|
||||||
|
|
||||||
spdy-transport@^2.0.18:
|
spdy-transport@^2.0.18:
|
||||||
version "2.0.20"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
|
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1"
|
||||||
dependencies:
|
dependencies:
|
||||||
debug "^2.6.8"
|
debug "^2.6.8"
|
||||||
detect-node "^2.0.3"
|
detect-node "^2.0.3"
|
||||||
@ -5091,7 +5121,7 @@ supports-color@^4.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
has-flag "^2.0.0"
|
has-flag "^2.0.0"
|
||||||
|
|
||||||
supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0:
|
supports-color@^5.1.0, supports-color@^5.3.0:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5169,7 +5199,7 @@ to-regex-range@^2.1.0:
|
|||||||
is-number "^3.0.0"
|
is-number "^3.0.0"
|
||||||
repeat-string "^1.6.1"
|
repeat-string "^1.6.1"
|
||||||
|
|
||||||
to-regex@^3.0.1:
|
to-regex@^3.0.1, to-regex@^3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
|
resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5434,6 +5464,14 @@ webpack-dev-server@^2.4.5:
|
|||||||
webpack-dev-middleware "1.12.2"
|
webpack-dev-middleware "1.12.2"
|
||||||
yargs "6.6.0"
|
yargs "6.6.0"
|
||||||
|
|
||||||
|
webpack-notifier@^1.6.0:
|
||||||
|
version "1.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/webpack-notifier/-/webpack-notifier-1.6.0.tgz#ffac8e55ff8c469752b8c1bbb011a16f10986e02"
|
||||||
|
dependencies:
|
||||||
|
node-notifier "^5.1.2"
|
||||||
|
object-assign "^4.1.0"
|
||||||
|
strip-ansi "^3.0.1"
|
||||||
|
|
||||||
webpack-sources@^1.0.1:
|
webpack-sources@^1.0.1:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
|
||||||
@ -5491,7 +5529,7 @@ which-module@^2.0.0:
|
|||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||||
|
|
||||||
which@1, which@^1.2.9:
|
which@1, which@^1.2.9, which@^1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
Loading…
Reference in New Issue
Block a user