WIP: Symfony 6 project remake #2
40
.env
Normal file
40
.env
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# In all environments, the following files are loaded if they exist,
|
||||||
|
# the latter taking precedence over the former:
|
||||||
|
#
|
||||||
|
# * .env contains default values for the environment variables needed by the app
|
||||||
|
# * .env.local uncommitted file with local overrides
|
||||||
|
# * .env.$APP_ENV committed environment-specific defaults
|
||||||
|
# * .env.$APP_ENV.local uncommitted environment-specific overrides
|
||||||
|
#
|
||||||
|
# Real environment variables win over .env files.
|
||||||
|
#
|
||||||
|
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
|
||||||
|
# https://symfony.com/doc/current/configuration/secrets.html
|
||||||
|
#
|
||||||
|
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
|
||||||
|
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
|
||||||
|
|
||||||
|
###> symfony/framework-bundle ###
|
||||||
|
APP_ENV=dev
|
||||||
|
APP_SECRET=2f4d317d4333339a10be62d339df5912
|
||||||
|
###< symfony/framework-bundle ###
|
||||||
|
|
||||||
|
###> doctrine/doctrine-bundle ###
|
||||||
|
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
|
||||||
|
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
|
||||||
|
#
|
||||||
|
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
|
||||||
|
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4"
|
||||||
|
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=15&charset=utf8"
|
||||||
|
###< doctrine/doctrine-bundle ###
|
||||||
|
|
||||||
|
###> symfony/messenger ###
|
||||||
|
# Choose one of the transports below
|
||||||
|
# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
|
||||||
|
# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
|
||||||
|
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
|
||||||
|
###< symfony/messenger ###
|
||||||
|
|
||||||
|
###> symfony/mailer ###
|
||||||
|
# MAILER_DSN=null://null
|
||||||
|
###< symfony/mailer ###
|
6
.env.test
Normal file
6
.env.test
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# define your env variables for the test env here
|
||||||
|
KERNEL_CLASS='App\Kernel'
|
||||||
|
APP_SECRET='$ecretf0rt3st'
|
||||||
|
SYMFONY_DEPRECATIONS_HELPER=999999
|
||||||
|
PANTHER_APP_ENV=panther
|
||||||
|
PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots
|
31
.gitignore
vendored
31
.gitignore
vendored
|
@ -1,13 +1,20 @@
|
||||||
/web/bundles/
|
|
||||||
/app/bootstrap.php.cache
|
###> symfony/framework-bundle ###
|
||||||
/app/cache/*
|
/.env.local
|
||||||
/app/config/parameters.yml
|
/.env.local.php
|
||||||
/app/logs/*
|
/.env.*.local
|
||||||
!app/cache/.gitkeep
|
/config/secrets/prod/prod.decrypt.private.php
|
||||||
!app/logs/.gitkeep
|
/public/bundles/
|
||||||
/app/phpunit.xml
|
/var/
|
||||||
/build/
|
|
||||||
/vendor/
|
/vendor/
|
||||||
/bin/
|
###< symfony/framework-bundle ###
|
||||||
/nbproject/
|
|
||||||
/.idea/
|
###> phpunit/phpunit ###
|
||||||
|
/phpunit.xml
|
||||||
|
.phpunit.result.cache
|
||||||
|
###< phpunit/phpunit ###
|
||||||
|
|
||||||
|
###> symfony/phpunit-bridge ###
|
||||||
|
.phpunit.result.cache
|
||||||
|
/phpunit.xml
|
||||||
|
###< symfony/phpunit-bridge ###
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
<IfModule mod_authz_core.c>
|
|
||||||
Require all denied
|
|
||||||
</IfModule>
|
|
||||||
<IfModule !mod_authz_core.c>
|
|
||||||
Order deny,allow
|
|
||||||
Deny from all
|
|
||||||
</IfModule>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;
|
|
||||||
|
|
||||||
class AppCache extends HttpCache
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,810 +0,0 @@
|
||||||
<?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 = PHP_VERSION;
|
|
||||||
$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, '>=')) {
|
|
||||||
$this->addRequirement(
|
|
||||||
in_array(@date_default_timezone_get(), DateTimeZone::listIdentifiers(), true),
|
|
||||||
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 ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) {
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Doctrine\Common\Annotations\AnnotationRegistry;
|
|
||||||
use Composer\Autoload\ClassLoader;
|
|
||||||
|
|
||||||
/** @var ClassLoader $loader */
|
|
||||||
$loader = require __DIR__.'/../vendor/autoload.php';
|
|
||||||
|
|
||||||
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
|
|
||||||
|
|
||||||
return $loader;
|
|
145
app/check.php
145
app/check.php
|
@ -1,145 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
require_once dirname(__FILE__).'/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;
|
|
||||||
}
|
|
20
app/console
20
app/console
|
@ -1,20 +0,0 @@
|
||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
|
||||||
use Symfony\Component\Console\Input\ArgvInput;
|
|
||||||
use Symfony\Component\Debug\Debug;
|
|
||||||
// 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(0002);
|
|
||||||
set_time_limit(0);
|
|
||||||
require __DIR__.'/../vendor/autoload.php';
|
|
||||||
$input = new ArgvInput();
|
|
||||||
$env = $input->getParameterOption(['--env', '-e'], getenv('SYMFONY_ENV') ?: 'dev', true);
|
|
||||||
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption('--no-debug', true) && $env !== 'prod';
|
|
||||||
if ($debug) {
|
|
||||||
Debug::enable();
|
|
||||||
}
|
|
||||||
$kernel = new AppKernel($env, $debug);
|
|
||||||
$application = new Application($kernel);
|
|
||||||
$application->run($input);
|
|
17
bin/console
Executable file
17
bin/console
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Kernel;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Console\Application;
|
||||||
|
|
||||||
|
if (!is_file(dirname(__DIR__).'/vendor/autoload_runtime.php')) {
|
||||||
|
throw new LogicException('Symfony Runtime is missing. Try running "composer require symfony/runtime".');
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
|
||||||
|
|
||||||
|
return function (array $context) {
|
||||||
|
$kernel = new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
|
||||||
|
|
||||||
|
return new Application($kernel);
|
||||||
|
};
|
19
bin/phpunit
Executable file
19
bin/phpunit
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if (!ini_get('date.timezone')) {
|
||||||
|
ini_set('date.timezone', 'UTC');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_file(dirname(__DIR__).'/vendor/phpunit/phpunit/phpunit')) {
|
||||||
|
define('PHPUNIT_COMPOSER_INSTALL', dirname(__DIR__).'/vendor/autoload.php');
|
||||||
|
require PHPUNIT_COMPOSER_INSTALL;
|
||||||
|
PHPUnit\TextUI\Command::main();
|
||||||
|
} else {
|
||||||
|
if (!is_file(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php')) {
|
||||||
|
echo "Unable to find the `simple-phpunit.php` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit.php';
|
||||||
|
}
|
160
composer.json
160
composer.json
|
@ -1,75 +1,105 @@
|
||||||
{
|
{
|
||||||
"name": "skobkin/point-tools",
|
|
||||||
"license": "MIT",
|
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"description": "3rd party service for Point.im users",
|
"license": "proprietary",
|
||||||
"autoload": {
|
"minimum-stability": "stable",
|
||||||
"psr-4": { "": "src/" },
|
"prefer-stable": true,
|
||||||
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": { "Tests\\": "tests/" },
|
|
||||||
"files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ]
|
|
||||||
},
|
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1.0",
|
"php": ">=8.1",
|
||||||
"ext-json": "*",
|
"ext-ctype": "*",
|
||||||
"symfony/symfony": "^3.4",
|
"ext-iconv": "*",
|
||||||
"doctrine/orm": "^2.5",
|
"doctrine/annotations": "^2.0",
|
||||||
"doctrine/annotations": "^1.3.0",
|
"doctrine/doctrine-bundle": "^2.8",
|
||||||
"doctrine/doctrine-bundle": "^1.6",
|
"doctrine/doctrine-migrations-bundle": "^3.2",
|
||||||
"doctrine/doctrine-cache-bundle": "^1.2",
|
"doctrine/orm": "^2.14",
|
||||||
"doctrine/doctrine-migrations-bundle": "^1.0",
|
"phpdocumentor/reflection-docblock": "^5.3",
|
||||||
"twig/twig": "^2.0",
|
"phpstan/phpdoc-parser": "^1.16",
|
||||||
"twig/extensions": "~1.0",
|
"sensio/framework-extra-bundle": "^6.1",
|
||||||
"symfony/swiftmailer-bundle": "^2.6.4",
|
"symfony/asset": "6.2.*",
|
||||||
"symfony/monolog-bundle": "^3.1.0",
|
"symfony/console": "6.2.*",
|
||||||
"sensio/distribution-bundle": "^5.0.19",
|
"symfony/doctrine-messenger": "6.2.*",
|
||||||
"sensio/framework-extra-bundle": "^5.0.0",
|
"symfony/dotenv": "6.2.*",
|
||||||
"incenteev/composer-parameter-handler": "^2.0",
|
"symfony/expression-language": "6.2.*",
|
||||||
"ob/highcharts-bundle": "^1.2",
|
"symfony/flex": "^2",
|
||||||
"jms/serializer-bundle": "^2",
|
"symfony/form": "6.2.*",
|
||||||
"knplabs/knp-markdown-bundle": "^1.4",
|
"symfony/framework-bundle": "6.2.*",
|
||||||
"knplabs/knp-paginator-bundle": "^2.5",
|
"symfony/http-client": "6.2.*",
|
||||||
"unreal4u/telegram-api": "^2.2",
|
"symfony/intl": "6.2.*",
|
||||||
"csa/guzzle-bundle": "^3",
|
"symfony/mailer": "6.2.*",
|
||||||
"symfony/web-server-bundle": "^3.3",
|
"symfony/mime": "6.2.*",
|
||||||
"sentry/sentry-symfony": "^2.2"
|
"symfony/monolog-bundle": "^3.0",
|
||||||
},
|
"symfony/notifier": "6.2.*",
|
||||||
"require-dev": {
|
"symfony/process": "6.2.*",
|
||||||
"symfony/phpunit-bridge": "^3.0",
|
"symfony/property-access": "6.2.*",
|
||||||
"phpunit/phpunit": "^5.7",
|
"symfony/property-info": "6.2.*",
|
||||||
"doctrine/doctrine-fixtures-bundle": "^2.3"
|
"symfony/runtime": "6.2.*",
|
||||||
},
|
"symfony/security-bundle": "6.2.*",
|
||||||
"scripts": {
|
"symfony/serializer": "6.2.*",
|
||||||
"symfony-scripts": [
|
"symfony/string": "6.2.*",
|
||||||
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
|
"symfony/translation": "6.2.*",
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
|
"symfony/twig-bundle": "6.2.*",
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
|
"symfony/validator": "6.2.*",
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
|
"symfony/web-link": "6.2.*",
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
|
"symfony/yaml": "6.2.*",
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
|
"twig/extra-bundle": "^2.12|^3.0",
|
||||||
],
|
"twig/twig": "^2.12|^3.0"
|
||||||
"post-install-cmd": [
|
|
||||||
"@symfony-scripts"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"@symfony-scripts"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"bin-dir": "bin"
|
"allow-plugins": {
|
||||||
|
"php-http/discovery": true,
|
||||||
|
"symfony/flex": true,
|
||||||
|
"symfony/runtime": true
|
||||||
|
},
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\Tests\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"symfony/polyfill-ctype": "*",
|
||||||
|
"symfony/polyfill-iconv": "*",
|
||||||
|
"symfony/polyfill-php72": "*",
|
||||||
|
"symfony/polyfill-php73": "*",
|
||||||
|
"symfony/polyfill-php74": "*",
|
||||||
|
"symfony/polyfill-php80": "*",
|
||||||
|
"symfony/polyfill-php81": "*"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"auto-scripts": {
|
||||||
|
"cache:clear": "symfony-cmd",
|
||||||
|
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||||
|
},
|
||||||
|
"post-install-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
],
|
||||||
|
"post-update-cmd": [
|
||||||
|
"@auto-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/symfony": "*"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"symfony-app-dir": "app",
|
"symfony": {
|
||||||
"symfony-web-dir": "web",
|
"allow-contrib": false,
|
||||||
"symfony-tests-dir": "tests",
|
"require": "6.2.*",
|
||||||
"symfony-assets-install": "relative",
|
"docker": true
|
||||||
"incenteev-parameters": {
|
}
|
||||||
"file": "app/config/parameters.yml"
|
|
||||||
},
|
},
|
||||||
"branch-alias": {
|
"require-dev": {
|
||||||
"dev-master": "3.4-dev"
|
"phpunit/phpunit": "^9.5",
|
||||||
}
|
"symfony/browser-kit": "6.2.*",
|
||||||
|
"symfony/css-selector": "6.2.*",
|
||||||
|
"symfony/debug-bundle": "6.2.*",
|
||||||
|
"symfony/maker-bundle": "^1.0",
|
||||||
|
"symfony/phpunit-bridge": "^6.2",
|
||||||
|
"symfony/stopwatch": "6.2.*",
|
||||||
|
"symfony/web-profiler-bundle": "6.2.*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10234
composer.lock
generated
10234
composer.lock
generated
File diff suppressed because it is too large
Load diff
15
config/bundles.php
Normal file
15
config/bundles.php
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||||
|
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
||||||
|
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
|
||||||
|
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
|
||||||
|
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||||
|
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||||
|
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||||
|
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
||||||
|
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||||
|
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
|
||||||
|
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
|
||||||
|
];
|
19
config/packages/cache.yaml
Normal file
19
config/packages/cache.yaml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
framework:
|
||||||
|
cache:
|
||||||
|
# Unique name of your app: used to compute stable namespaces for cache keys.
|
||||||
|
#prefix_seed: your_vendor_name/app_name
|
||||||
|
|
||||||
|
# The "app" cache stores to the filesystem by default.
|
||||||
|
# The data in this cache should persist between deploys.
|
||||||
|
# Other options include:
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
#app: cache.adapter.redis
|
||||||
|
#default_redis_provider: redis://localhost
|
||||||
|
|
||||||
|
# APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
|
||||||
|
#app: cache.adapter.apcu
|
||||||
|
|
||||||
|
# Namespaced pools use the above "app" backend by default
|
||||||
|
#pools:
|
||||||
|
#my.dedicated.cache: null
|
5
config/packages/debug.yaml
Normal file
5
config/packages/debug.yaml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
when@dev:
|
||||||
|
debug:
|
||||||
|
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
|
||||||
|
# See the "server:dump" command to start a new server.
|
||||||
|
dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"
|
44
config/packages/doctrine.yaml
Normal file
44
config/packages/doctrine.yaml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
doctrine:
|
||||||
|
dbal:
|
||||||
|
url: '%env(resolve:DATABASE_URL)%'
|
||||||
|
|
||||||
|
# IMPORTANT: You MUST configure your server version,
|
||||||
|
# either here or in the DATABASE_URL env var (see .env file)
|
||||||
|
#server_version: '15'
|
||||||
|
orm:
|
||||||
|
auto_generate_proxy_classes: true
|
||||||
|
enable_lazy_ghost_objects: true
|
||||||
|
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
|
||||||
|
auto_mapping: true
|
||||||
|
mappings:
|
||||||
|
App:
|
||||||
|
is_bundle: false
|
||||||
|
dir: '%kernel.project_dir%/src/Entity'
|
||||||
|
prefix: 'App\Entity'
|
||||||
|
alias: App
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
doctrine:
|
||||||
|
dbal:
|
||||||
|
# "TEST_TOKEN" is typically set by ParaTest
|
||||||
|
dbname_suffix: '_test%env(default::TEST_TOKEN)%'
|
||||||
|
|
||||||
|
when@prod:
|
||||||
|
doctrine:
|
||||||
|
orm:
|
||||||
|
auto_generate_proxy_classes: false
|
||||||
|
proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
|
||||||
|
query_cache_driver:
|
||||||
|
type: pool
|
||||||
|
pool: doctrine.system_cache_pool
|
||||||
|
result_cache_driver:
|
||||||
|
type: pool
|
||||||
|
pool: doctrine.result_cache_pool
|
||||||
|
|
||||||
|
framework:
|
||||||
|
cache:
|
||||||
|
pools:
|
||||||
|
doctrine.result_cache_pool:
|
||||||
|
adapter: cache.app
|
||||||
|
doctrine.system_cache_pool:
|
||||||
|
adapter: cache.system
|
6
config/packages/doctrine_migrations.yaml
Normal file
6
config/packages/doctrine_migrations.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
doctrine_migrations:
|
||||||
|
migrations_paths:
|
||||||
|
# namespace is arbitrary but should be different from App\Migrations
|
||||||
|
# as migrations classes should NOT be autoloaded
|
||||||
|
'DoctrineMigrations': '%kernel.project_dir%/migrations'
|
||||||
|
enable_profiler: false
|
25
config/packages/framework.yaml
Normal file
25
config/packages/framework.yaml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# see https://symfony.com/doc/current/reference/configuration/framework.html
|
||||||
|
framework:
|
||||||
|
secret: '%env(APP_SECRET)%'
|
||||||
|
#csrf_protection: true
|
||||||
|
http_method_override: false
|
||||||
|
handle_all_throwables: true
|
||||||
|
|
||||||
|
# Enables session support. Note that the session will ONLY be started if you read or write from it.
|
||||||
|
# Remove or comment this section to explicitly disable session support.
|
||||||
|
session:
|
||||||
|
handler_id: null
|
||||||
|
cookie_secure: auto
|
||||||
|
cookie_samesite: lax
|
||||||
|
storage_factory_id: session.storage.factory.native
|
||||||
|
|
||||||
|
#esi: true
|
||||||
|
#fragments: true
|
||||||
|
php_errors:
|
||||||
|
log: true
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
framework:
|
||||||
|
test: true
|
||||||
|
session:
|
||||||
|
storage_factory_id: session.storage.factory.mock_file
|
3
config/packages/mailer.yaml
Normal file
3
config/packages/mailer.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
framework:
|
||||||
|
mailer:
|
||||||
|
dsn: '%env(MAILER_DSN)%'
|
24
config/packages/messenger.yaml
Normal file
24
config/packages/messenger.yaml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
framework:
|
||||||
|
messenger:
|
||||||
|
failure_transport: failed
|
||||||
|
|
||||||
|
transports:
|
||||||
|
# https://symfony.com/doc/current/messenger.html#transport-configuration
|
||||||
|
async:
|
||||||
|
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
|
||||||
|
options:
|
||||||
|
use_notify: true
|
||||||
|
check_delayed_interval: 60000
|
||||||
|
retry_strategy:
|
||||||
|
max_retries: 3
|
||||||
|
multiplier: 2
|
||||||
|
failed: 'doctrine://default?queue_name=failed'
|
||||||
|
# sync: 'sync://'
|
||||||
|
|
||||||
|
routing:
|
||||||
|
Symfony\Component\Mailer\Messenger\SendEmailMessage: async
|
||||||
|
Symfony\Component\Notifier\Message\ChatMessage: async
|
||||||
|
Symfony\Component\Notifier\Message\SmsMessage: async
|
||||||
|
|
||||||
|
# Route your messages to the transports
|
||||||
|
# 'App\Message\YourMessage': async
|
61
config/packages/monolog.yaml
Normal file
61
config/packages/monolog.yaml
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
monolog:
|
||||||
|
channels:
|
||||||
|
- deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists
|
||||||
|
|
||||||
|
when@dev:
|
||||||
|
monolog:
|
||||||
|
handlers:
|
||||||
|
main:
|
||||||
|
type: stream
|
||||||
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||||
|
level: debug
|
||||||
|
channels: ["!event"]
|
||||||
|
# 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
|
||||||
|
console:
|
||||||
|
type: console
|
||||||
|
process_psr_3_messages: false
|
||||||
|
channels: ["!event", "!doctrine", "!console"]
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
monolog:
|
||||||
|
handlers:
|
||||||
|
main:
|
||||||
|
type: fingers_crossed
|
||||||
|
action_level: error
|
||||||
|
handler: nested
|
||||||
|
excluded_http_codes: [404, 405]
|
||||||
|
channels: ["!event"]
|
||||||
|
nested:
|
||||||
|
type: stream
|
||||||
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||||
|
level: debug
|
||||||
|
|
||||||
|
when@prod:
|
||||||
|
monolog:
|
||||||
|
handlers:
|
||||||
|
main:
|
||||||
|
type: fingers_crossed
|
||||||
|
action_level: error
|
||||||
|
handler: nested
|
||||||
|
excluded_http_codes: [404, 405]
|
||||||
|
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
|
||||||
|
nested:
|
||||||
|
type: stream
|
||||||
|
path: php://stderr
|
||||||
|
level: debug
|
||||||
|
formatter: monolog.formatter.json
|
||||||
|
console:
|
||||||
|
type: console
|
||||||
|
process_psr_3_messages: false
|
||||||
|
channels: ["!event", "!doctrine"]
|
||||||
|
deprecation:
|
||||||
|
type: stream
|
||||||
|
channels: [deprecation]
|
||||||
|
path: php://stderr
|
16
config/packages/notifier.yaml
Normal file
16
config/packages/notifier.yaml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
framework:
|
||||||
|
notifier:
|
||||||
|
#chatter_transports:
|
||||||
|
# slack: '%env(SLACK_DSN)%'
|
||||||
|
# telegram: '%env(TELEGRAM_DSN)%'
|
||||||
|
#texter_transports:
|
||||||
|
# twilio: '%env(TWILIO_DSN)%'
|
||||||
|
# nexmo: '%env(NEXMO_DSN)%'
|
||||||
|
channel_policy:
|
||||||
|
# use chat/slack, chat/telegram, sms/twilio or sms/nexmo
|
||||||
|
urgent: ['email']
|
||||||
|
high: ['email']
|
||||||
|
medium: ['email']
|
||||||
|
low: ['email']
|
||||||
|
admin_recipients:
|
||||||
|
- { email: admin@example.com }
|
12
config/packages/routing.yaml
Normal file
12
config/packages/routing.yaml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
framework:
|
||||||
|
router:
|
||||||
|
utf8: true
|
||||||
|
|
||||||
|
# Configure how to generate URLs in non-HTTP contexts, such as CLI commands.
|
||||||
|
# See https://symfony.com/doc/current/routing.html#generating-urls-in-commands
|
||||||
|
#default_uri: http://localhost
|
||||||
|
|
||||||
|
when@prod:
|
||||||
|
framework:
|
||||||
|
router:
|
||||||
|
strict_requirements: null
|
39
config/packages/security.yaml
Normal file
39
config/packages/security.yaml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
security:
|
||||||
|
# https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
|
||||||
|
password_hashers:
|
||||||
|
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
|
||||||
|
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
|
||||||
|
providers:
|
||||||
|
users_in_memory: { memory: null }
|
||||||
|
firewalls:
|
||||||
|
dev:
|
||||||
|
pattern: ^/(_(profiler|wdt)|css|images|js)/
|
||||||
|
security: false
|
||||||
|
main:
|
||||||
|
lazy: true
|
||||||
|
provider: users_in_memory
|
||||||
|
|
||||||
|
# activate different ways to authenticate
|
||||||
|
# https://symfony.com/doc/current/security.html#the-firewall
|
||||||
|
|
||||||
|
# https://symfony.com/doc/current/security/impersonating_user.html
|
||||||
|
# switch_user: true
|
||||||
|
|
||||||
|
# Easy way to control access for large sections of your site
|
||||||
|
# Note: Only the *first* access control that matches will be used
|
||||||
|
access_control:
|
||||||
|
# - { path: ^/admin, roles: ROLE_ADMIN }
|
||||||
|
# - { path: ^/profile, roles: ROLE_USER }
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
security:
|
||||||
|
password_hashers:
|
||||||
|
# By default, password hashers are resource intensive and take time. This is
|
||||||
|
# important to generate secure password hashes. In tests however, secure hashes
|
||||||
|
# are not important, waste resources and increase test times. The following
|
||||||
|
# reduces the work factor to the lowest possible values.
|
||||||
|
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface:
|
||||||
|
algorithm: auto
|
||||||
|
cost: 4 # Lowest possible value for bcrypt
|
||||||
|
time_cost: 3 # Lowest possible value for argon
|
||||||
|
memory_cost: 10 # Lowest possible value for argon
|
3
config/packages/sensio_framework_extra.yaml
Normal file
3
config/packages/sensio_framework_extra.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
sensio_framework_extra:
|
||||||
|
router:
|
||||||
|
annotations: false
|
13
config/packages/translation.yaml
Normal file
13
config/packages/translation.yaml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
framework:
|
||||||
|
default_locale: en
|
||||||
|
translator:
|
||||||
|
default_path: '%kernel.project_dir%/translations'
|
||||||
|
fallbacks:
|
||||||
|
- en
|
||||||
|
# providers:
|
||||||
|
# crowdin:
|
||||||
|
# dsn: '%env(CROWDIN_DSN)%'
|
||||||
|
# loco:
|
||||||
|
# dsn: '%env(LOCO_DSN)%'
|
||||||
|
# lokalise:
|
||||||
|
# dsn: '%env(LOKALISE_DSN)%'
|
6
config/packages/twig.yaml
Normal file
6
config/packages/twig.yaml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
twig:
|
||||||
|
default_path: '%kernel.project_dir%/templates'
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
twig:
|
||||||
|
strict_variables: true
|
13
config/packages/validator.yaml
Normal file
13
config/packages/validator.yaml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
framework:
|
||||||
|
validation:
|
||||||
|
email_validation_mode: html5
|
||||||
|
|
||||||
|
# Enables validator auto-mapping support.
|
||||||
|
# For instance, basic validation constraints will be inferred from Doctrine's metadata.
|
||||||
|
#auto_mapping:
|
||||||
|
# App\Entity\: []
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
framework:
|
||||||
|
validation:
|
||||||
|
not_compromised_password: false
|
17
config/packages/web_profiler.yaml
Normal file
17
config/packages/web_profiler.yaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
when@dev:
|
||||||
|
web_profiler:
|
||||||
|
toolbar: true
|
||||||
|
intercept_redirects: false
|
||||||
|
|
||||||
|
framework:
|
||||||
|
profiler:
|
||||||
|
only_exceptions: false
|
||||||
|
collect_serializer_data: true
|
||||||
|
|
||||||
|
when@test:
|
||||||
|
web_profiler:
|
||||||
|
toolbar: false
|
||||||
|
intercept_redirects: false
|
||||||
|
|
||||||
|
framework:
|
||||||
|
profiler: { collect: false }
|
5
config/preload.php
Normal file
5
config/preload.php
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if (file_exists(dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php')) {
|
||||||
|
require dirname(__DIR__).'/var/cache/prod/App_KernelProdContainer.preload.php';
|
||||||
|
}
|
5
config/routes.yaml
Normal file
5
config/routes.yaml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
controllers:
|
||||||
|
resource:
|
||||||
|
path: ../src/Controller/
|
||||||
|
namespace: App\Controller
|
||||||
|
type: attribute
|
4
config/routes/framework.yaml
Normal file
4
config/routes/framework.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
when@dev:
|
||||||
|
_errors:
|
||||||
|
resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
|
||||||
|
prefix: /_error
|
8
config/routes/web_profiler.yaml
Normal file
8
config/routes/web_profiler.yaml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
when@dev:
|
||||||
|
web_profiler_wdt:
|
||||||
|
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
|
||||||
|
prefix: /_wdt
|
||||||
|
|
||||||
|
web_profiler_profiler:
|
||||||
|
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
|
||||||
|
prefix: /_profiler
|
24
config/services.yaml
Normal file
24
config/services.yaml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# This file is the entry point to configure your own services.
|
||||||
|
# Files in the packages/ subdirectory configure your dependencies.
|
||||||
|
|
||||||
|
# Put parameters here that don't need to change on each machine where the app is deployed
|
||||||
|
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
|
||||||
|
parameters:
|
||||||
|
|
||||||
|
services:
|
||||||
|
# default configuration for services in *this* file
|
||||||
|
_defaults:
|
||||||
|
autowire: true # Automatically injects dependencies in your services.
|
||||||
|
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
||||||
|
|
||||||
|
# makes classes in src/ available to be used as services
|
||||||
|
# this creates a service per class whose id is the fully-qualified class name
|
||||||
|
App\:
|
||||||
|
resource: '../src/'
|
||||||
|
exclude:
|
||||||
|
- '../src/DependencyInjection/'
|
||||||
|
- '../src/Entity/'
|
||||||
|
- '../src/Kernel.php'
|
||||||
|
|
||||||
|
# add more service definitions when explicit configuration is needed
|
||||||
|
# please note that last definitions always *replace* previous ones
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Symfony\Component\HttpKernel\Kernel;
|
|
||||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
|
|
||||||
class AppKernel extends Kernel
|
class AppKernel extends Kernel
|
||||||
{
|
{
|
||||||
|
@ -23,7 +23,7 @@ class AppKernel extends Kernel
|
||||||
new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(),
|
new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(),
|
||||||
new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(),
|
new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(),
|
||||||
new Sentry\SentryBundle\SentryBundle(),
|
new Sentry\SentryBundle\SentryBundle(),
|
||||||
new Skobkin\Bundle\PointToolsBundle\SkobkinPointToolsBundle(),
|
new \src\PointToolsBundle\SkobkinPointToolsBundle(),
|
||||||
];
|
];
|
||||||
|
|
||||||
if (in_array($this->getEnvironment(), ['dev', 'test'])) {
|
if (in_array($this->getEnvironment(), ['dev', 'test'])) {
|
46
old/phpunit.xml.dist
Normal file
46
old/phpunit.xml.dist
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
|
||||||
|
backupGlobals="false"
|
||||||
|
colors="true"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
convertNoticesToExceptions="false"
|
||||||
|
>
|
||||||
|
<php>
|
||||||
|
<ini name="error_reporting" value="-1" />
|
||||||
|
<server name="KERNEL_CLASS" value="AppKernel" />
|
||||||
|
</php>
|
||||||
|
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Project Test Suite">
|
||||||
|
<directory>tests</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
|
||||||
|
<listeners>
|
||||||
|
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener">
|
||||||
|
<arguments>
|
||||||
|
<array>
|
||||||
|
<!-- set this option to 0 to disable the DebugClassLoader integration -->
|
||||||
|
<element key="debug-class-loader"><integer>0</integer></element>
|
||||||
|
</array>
|
||||||
|
</arguments>
|
||||||
|
</listener>
|
||||||
|
</listeners>
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<whitelist>
|
||||||
|
<directory>src</directory>
|
||||||
|
<exclude>
|
||||||
|
<directory>src/*Bundle/DataFixtures</directory>
|
||||||
|
<directory>src/*/*Bundle/DataFixtures</directory>
|
||||||
|
<directory>src/*/Bundle/*Bundle/DataFixtures</directory>
|
||||||
|
<directory>src/*Bundle/Resources</directory>
|
||||||
|
<directory>src/*/*Bundle/Resources</directory>
|
||||||
|
<directory>src/*/Bundle/*Bundle/Resources</directory>
|
||||||
|
</exclude>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
</phpunit>
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Doctrine\ORM\{EntityManager, EntityManagerInterface};
|
use Doctrine\ORM\{EntityManager, EntityManagerInterface};
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\Entity\User;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\{InputInterface, InputArgument, InputOption};
|
use Symfony\Component\Console\Input\{InputInterface, InputArgument, InputOption};
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
@ -1,13 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\Entity\User;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Exception\Api\UserNotFoundException;
|
use src\PointToolsBundle\Exception\Api\UserNotFoundException;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\UserRepository;
|
use src\PointToolsBundle\Repository\UserRepository;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\Api\UserApi;
|
use src\PointToolsBundle\Service\Api\UserApi;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
@ -1,11 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\Telegram\MessageSender;
|
use src\PointToolsBundle\Service\Telegram\MessageSender;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\{InputArgument, InputInterface, InputOption};
|
use Symfony\Component\Console\Input\{InputArgument, InputInterface, InputOption};
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use function Skobkin\Bundle\PointToolsBundle\Command\mb_strlen;
|
||||||
|
use function Skobkin\Bundle\PointToolsBundle\Command\mb_substr;
|
||||||
|
|
||||||
class TelegramSendMessageCommand extends Command
|
class TelegramSendMessageCommand extends Command
|
||||||
{
|
{
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\{InputArgument, InputInterface};
|
use Symfony\Component\Console\Input\{InputArgument, InputInterface};
|
|
@ -1,13 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\{Subscription, User};
|
use src\PointToolsBundle\Entity\User;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Exception\Api\UserNotFoundException;
|
use src\PointToolsBundle\Service\SubscriptionsManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\UserRepository;
|
use src\PointToolsBundle\Entity\{Subscription};
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\{SubscriptionsManager, Api\UserApi};
|
use src\PointToolsBundle\Exception\Api\UserNotFoundException;
|
||||||
|
use src\PointToolsBundle\Repository\UserRepository;
|
||||||
|
use src\PointToolsBundle\Service\{Api\UserApi};
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Helper\ProgressBar;
|
use Symfony\Component\Console\Helper\ProgressBar;
|
||||||
use Symfony\Component\Console\Input\{InputInterface, InputOption};
|
use Symfony\Component\Console\Input\{InputInterface, InputOption};
|
|
@ -1,13 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Command;
|
namespace src\PointToolsBundle\Command;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\{Subscription, User};
|
use src\PointToolsBundle\Entity\User;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Exception\Api\{ForbiddenException, UserNotFoundException};
|
use src\PointToolsBundle\Exception\Api\ForbiddenException;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\UserRepository;
|
use src\PointToolsBundle\Entity\{Subscription};
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\Api\UserApi;
|
use src\PointToolsBundle\Exception\Api\{UserNotFoundException};
|
||||||
|
use src\PointToolsBundle\Repository\UserRepository;
|
||||||
|
use src\PointToolsBundle\Service\Api\UserApi;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Helper\ProgressBar;
|
use Symfony\Component\Console\Helper\ProgressBar;
|
||||||
use Symfony\Component\Console\Input\{InputInterface, InputOption};
|
use Symfony\Component\Console\Input\{InputInterface, InputOption};
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller\Api;
|
namespace src\PointToolsBundle\Controller\Api;
|
||||||
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
|
@ -1,12 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller\Api;
|
namespace src\PointToolsBundle\Controller\Api;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use JMS\Serializer\SerializerInterface;
|
use JMS\Serializer\SerializerInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\DTO\Api\PostsPage;
|
use src\PointToolsBundle\DTO\Api\PostsPage;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\Factory\Blogs\PostFactory;
|
use src\PointToolsBundle\Service\Factory\Blogs\PostFactory;
|
||||||
use Symfony\Component\HttpFoundation\{Request, Response};
|
use Symfony\Component\HttpFoundation\{Request, Response};
|
||||||
|
use src\PointToolsBundle\Controller\Api\AbstractApiController;
|
||||||
|
|
||||||
class CrawlerController extends AbstractApiController
|
class CrawlerController extends AbstractApiController
|
||||||
{
|
{
|
|
@ -1,10 +1,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\{SubscriptionEvent, User};
|
use src\PointToolsBundle\Entity\User;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\SubscriptionEventRepository;
|
use src\PointToolsBundle\Entity\{SubscriptionEvent};
|
||||||
|
use src\PointToolsBundle\Repository\SubscriptionEventRepository;
|
||||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Knp\Component\Pager\PaginatorInterface;
|
use Knp\Component\Pager\PaginatorInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\SubscriptionEventRepository;
|
use src\PointToolsBundle\Repository\SubscriptionEventRepository;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\{Request, Response};
|
use Symfony\Component\HttpFoundation\{Request, Response};
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Form\UserSearchType;
|
use src\PointToolsBundle\Form\UserSearchType;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\{SubscriptionEventRepository, SubscriptionRepository, UserRepository};
|
use src\PointToolsBundle\Repository\SubscriptionRepository;
|
||||||
|
use src\PointToolsBundle\Repository\UserRepository;
|
||||||
|
use src\PointToolsBundle\Repository\{SubscriptionEventRepository};
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\Form\FormError;
|
use Symfony\Component\Form\FormError;
|
||||||
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
|
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\Blogs\Post;
|
use src\PointToolsBundle\Entity\Blogs\Post;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\Blogs\PostRepository;
|
use src\PointToolsBundle\Repository\Blogs\PostRepository;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Knp\Component\Pager\PaginatorInterface;
|
use Knp\Component\Pager\PaginatorInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\Blogs\PostRepository;
|
use src\PointToolsBundle\Repository\Blogs\PostRepository;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller\Telegram;
|
namespace src\PointToolsBundle\Controller\Telegram;
|
||||||
|
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Service\Telegram\IncomingUpdateDispatcher;
|
use src\PointToolsBundle\Service\Telegram\IncomingUpdateDispatcher;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
|
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
|
||||||
use unreal4u\TelegramAPI\Telegram\Types\Update;
|
use unreal4u\TelegramAPI\Telegram\Types\Update;
|
|
@ -1,11 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
namespace src\PointToolsBundle\Controller;
|
||||||
|
|
||||||
use Knp\Component\Pager\PaginatorInterface;
|
use Knp\Component\Pager\PaginatorInterface;
|
||||||
use Skobkin\Bundle\PointToolsBundle\DTO\{DailyEvents, TopUserDTO};
|
use src\PointToolsBundle\DTO\{TopUserDTO};
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\DTO\DailyEvents;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Repository\{SubscriptionEventRepository, UserRenameEventRepository, UserRepository};
|
use src\PointToolsBundle\Entity\User;
|
||||||
|
use src\PointToolsBundle\Repository\UserRenameEventRepository;
|
||||||
|
use src\PointToolsBundle\Repository\UserRepository;
|
||||||
|
use src\PointToolsBundle\Repository\{SubscriptionEventRepository};
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Ob\HighchartsBundle\Highcharts\Highchart;
|
use Ob\HighchartsBundle\Highcharts\Highchart;
|
||||||
use Symfony\Component\HttpFoundation\{Request, Response};
|
use Symfony\Component\HttpFoundation\{Request, Response};
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DQL;
|
namespace src\PointToolsBundle\DQL;
|
||||||
|
|
||||||
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
|
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
|
||||||
use Doctrine\ORM\Query\Lexer;
|
use Doctrine\ORM\Query\Lexer;
|
|
@ -1,6 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class Auth implements ValidableInterface
|
class Auth implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\User;
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class Comment implements ValidableInterface
|
class Comment implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\Comment;
|
||||||
|
use src\PointToolsBundle\DTO\Api\Post;
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class MetaPost implements ValidableInterface
|
class MetaPost implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\User;
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class Post implements ValidableInterface
|
class Post implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\MetaPost;
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class PostsPage implements ValidableInterface
|
class PostsPage implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DTO\Api\ValidableInterface;
|
||||||
|
|
||||||
class User implements ValidableInterface
|
class User implements ValidableInterface
|
||||||
{
|
{
|
|
@ -1,5 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO\Api;
|
namespace src\PointToolsBundle\DTO\Api;
|
||||||
|
|
||||||
interface ValidableInterface
|
interface ValidableInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO;
|
namespace src\PointToolsBundle\DTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Events count by day
|
* Events count by day
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DTO;
|
namespace src\PointToolsBundle\DTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data Transfer Object for top users list
|
* Data Transfer Object for top users list
|
|
@ -1,13 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DataFixtures\ORM;
|
namespace src\PointToolsBundle\DataFixtures\ORM;
|
||||||
|
|
||||||
use Doctrine\Common\DataFixtures\AbstractFixture;
|
use Doctrine\Common\DataFixtures\AbstractFixture;
|
||||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
||||||
use Doctrine\Common\Persistence\ObjectManager;
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\Blogs\Comment;
|
use src\PointToolsBundle\Entity\Blogs\Comment;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\Blogs\Post;
|
use src\PointToolsBundle\Entity\Blogs\Post;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\Entity\User;
|
||||||
|
|
||||||
class LoadCommentsData extends AbstractFixture implements OrderedFixtureInterface
|
class LoadCommentsData extends AbstractFixture implements OrderedFixtureInterface
|
||||||
{
|
{
|
|
@ -1,10 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DataFixtures\ORM;
|
namespace src\PointToolsBundle\DataFixtures\ORM;
|
||||||
|
|
||||||
use Doctrine\Common\DataFixtures\{AbstractFixture, OrderedFixtureInterface};
|
use Doctrine\Common\DataFixtures\{AbstractFixture, OrderedFixtureInterface};
|
||||||
use Doctrine\Common\Persistence\ObjectManager;
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\{Blogs\Post, User};
|
use src\PointToolsBundle\Entity\{Blogs\Post};
|
||||||
|
use src\PointToolsBundle\DataFixtures\ORM\LoadUserData;
|
||||||
|
use src\PointToolsBundle\Entity\User;
|
||||||
|
|
||||||
class LoadPostData extends AbstractFixture implements OrderedFixtureInterface
|
class LoadPostData extends AbstractFixture implements OrderedFixtureInterface
|
||||||
{
|
{
|
|
@ -1,13 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DataFixtures\ORM;
|
namespace src\PointToolsBundle\DataFixtures\ORM;
|
||||||
|
|
||||||
use Doctrine\Common\DataFixtures\AbstractFixture;
|
use Doctrine\Common\DataFixtures\AbstractFixture;
|
||||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
||||||
use Doctrine\Common\Persistence\ObjectManager;
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\Subscription;
|
use src\PointToolsBundle\Entity\Subscription;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\SubscriptionEvent;
|
use src\PointToolsBundle\Entity\SubscriptionEvent;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\Entity\User;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load user subscriptions
|
* Load user subscriptions
|
|
@ -1,11 +1,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DataFixtures\ORM;
|
namespace src\PointToolsBundle\DataFixtures\ORM;
|
||||||
|
|
||||||
use Doctrine\Common\DataFixtures\AbstractFixture;
|
use Doctrine\Common\DataFixtures\AbstractFixture;
|
||||||
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
|
||||||
use Doctrine\Common\Persistence\ObjectManager;
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
use Skobkin\Bundle\PointToolsBundle\Entity\User;
|
use src\PointToolsBundle\Entity\User;
|
||||||
|
|
||||||
class LoadUserData extends AbstractFixture implements OrderedFixtureInterface
|
class LoadUserData extends AbstractFixture implements OrderedFixtureInterface
|
||||||
{
|
{
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DependencyInjection;
|
namespace src\PointToolsBundle\DependencyInjection;
|
||||||
|
|
||||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Skobkin\Bundle\PointToolsBundle\DependencyInjection;
|
namespace src\PointToolsBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use src\PointToolsBundle\DependencyInjection\Configuration;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\Config\FileLocator;
|
use Symfony\Component\Config\FileLocator;
|
||||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue