Browse Source

update composer

Luciano Andrade 7 năm trước cách đây
mục cha
commit
0a38bb1647

+ 24 - 2
.drone.yml

@@ -11,6 +11,14 @@ services:
 pipeline:
  build:
   image: docker.infra.flowdat.com/fd3/sf-php:latest
+  environment:
+    HOST_FTTH: ftth.test.fd3.flowdat.com
+    HOST_STATS: stats.test.fd3.flowdat.com
+    HOST_MAPAS: mapas.test.fd3.flowdat.com
+    HOST_BASE: base.test.fd3.flowdat.com
+    OAUTH_CLIENT_ID: ""
+    OAUTH_CLIENT_SECRET: ""
+ 
   commands:
       - command -v mysqladmin >/dev/null 2>&1 || { echo "I require mysqladmin but it's not installed.  Aborting." >&2; exit 1; }
       - while ! mysqladmin ping -h 127.0.0.1 --silent; do :; done
@@ -36,7 +44,21 @@ pipeline:
    registry: docker.infra.flowdat.com
    username: drone
    password: 6hd2dLfL
-   tag: latest
+   tag: 
+     - latest
    when:
      event: [pull_request, push, tag]
-     branch: master
+     branch: [master]
+
+ tag_docker:
+   repo : docker.infra.flowdat.com/fd3/stats
+   image: plugins/docker
+   email: luciano@interlink.com.ar
+   registry: docker.infra.flowdat.com
+   username: drone
+   password: 6hd2dLfL
+   tag: 
+     - ${DRONE_TAG##v}
+   when:
+     event: [pull_request, push, tag]
+     branch: [v*]

+ 12 - 0
Dockerfile

@@ -8,9 +8,21 @@ RUN cp /opt/stats/app/config/bundles/ik/base-admin-bundle/parameters.yml.dist /o
 
 WORKDIR /opt/stats
 
+RUN rm -rf /opt/ftth/vendor/*
+RUN rm -rf app/config/parameters.yml 
+RUN rm -rf app/config/bundles/hwi/oauth-bundle/parameters.yml 
+RUN rm -rf app/config/bundles/ik/webservice-bundle/parameters.yml 
+ 
+RUN cp app/config/parameters.yml.docker app/config/parameters.yml 
+RUN cp app/config/bundles/hwi/oauth-bundle/parameters.yml.docker app/config/bundles/hwi/oauth-bundle/parameters.yml 
+RUN cp app/config/bundles/ik/webservice-bundle/parameters.yml.docker app/config/bundles/ik/webservice-bundle/parameters.yml 
+ 
+
 RUN cp -r keys /opt/keys/
 RUN chmod 0600 /opt/keys/*
 
+RUN eval $(ssh-agent) ; ssh-add /opt/keys/bitbucket.id_rsa ; composer install --no-scripts --no-interaction 
+
 CMD  eval $(ssh-agent) ; ssh-add /opt/keys/bitbucket.id_rsa ; composer install --no-scripts --no-interaction ;\
      rm var/cache/* -rf ;\
      cp app/config/parameters.yml.docker app/config/parameters.yml ;\

+ 3 - 0
app/AppKernel.php

@@ -48,6 +48,9 @@ class AppKernel extends Kernel
             new SimpleThings\EntityAudit\SimpleThingsEntityAuditBundle(),
             new AuditBundle\AuditBundle(),
             new AuthBundle\AuthBundle(),
+
+            new OldSound\RabbitMqBundle\OldSoundRabbitMqBundle(),
+            new WorkflowBundle\WorkflowBundle(),
         ];
 
         if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {

+ 5 - 0
app/config/parameters.yml.dist

@@ -35,3 +35,8 @@ parameters:
     geoserver_user: admin
     geoserver_pass: geoserver
     geoserver_path_shapes: '/var/flowdat/geoserver-shapes'
+
+    # Url del webservice de crontab para crear los archivos
+    url_crontab: http://127.0.0.1/cron.php?wsdl
+
+    env(HOST_BASE): base

+ 2 - 0
app/config/parameters.yml.docker

@@ -44,3 +44,5 @@ parameters:
     geoserver_user: admin
     geoserver_pass: geoserver
     geoserver_path_shapes: '/var/flowdat/geoserver-shapes'
+
+    url_crontab: http://supervisord/cron.php?wsdl

+ 9 - 12
bin/symfony_requirements

@@ -7,13 +7,13 @@ $lineSize = 70;
 $symfonyRequirements = new SymfonyRequirements();
 $iniPath = $symfonyRequirements->getPhpIniConfigPath();
 
-echo_title('Symfony Requirements Checker');
+echo_title('Symfony2 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_style('warning', '  WARNING: No configuration file (php.ini) used by PHP!');
 }
 
 echo PHP_EOL.PHP_EOL;
@@ -22,6 +22,7 @@ echo '> Checking Symfony requirements:'.PHP_EOL.'  ';
 
 $messages = array();
 foreach ($symfonyRequirements->getRequirements() as $req) {
+    /** @var $req Requirement */
     if ($helpText = get_error_message($req, $lineSize)) {
         echo_style('red', 'E');
         $messages['error'][] = $helpText;
@@ -42,9 +43,9 @@ foreach ($symfonyRequirements->getRecommendations() as $req) {
 }
 
 if ($checkPassed) {
-    echo_block('success', 'OK', 'Your system is ready to run Symfony projects');
+    echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects');
 } else {
-    echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects');
+    echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects');
 
     echo_title('Fix the following mandatory requirements', 'red');
 
@@ -120,14 +121,10 @@ function echo_block($style, $title, $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;
+    echo_style($style, str_repeat(' ', $width).PHP_EOL);
+    echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL);
+    echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL);
+    echo_style($style, str_repeat(' ', $width).PHP_EOL);
 }
 
 function has_color_support()

+ 9 - 0
composer.json

@@ -121,6 +121,13 @@
             "options": {
                 "local_pk": "./keys/bitbucket.id_rsa"
             }
+        },
+        {
+            "type": "vcs",
+            "url": "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/WorkflowBundle.git",
+            "options": {
+                "local_pk": "./keys/bitbucket.id_rsa"
+            }
         }
     ],
     "require": {
@@ -143,7 +150,9 @@
         "ik/stats/huawei-bundle": "dev-master",
         "ik/statsd-bundle": "dev-master",
         "ik/webservice-bundle": "dev-master",
+        "ik/workflow-bundle": "dev-workflow_update",
         "ik/auth-bundle": "dev-master",
+        "ik/workflow-bundle": "dev-master",
         "incenteev/composer-parameter-handler": "^2.0",
         "jms/serializer-bundle": "^1.1",
         "opensolutions/oss-snmp": "dev-master",

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 768 - 1245
composer.lock


+ 169 - 0
src/StatsBundle/Command/GenerateRemoteCrontabCommand.php

@@ -0,0 +1,169 @@
+<?php
+
+namespace StatsBundle\Command;
+
+use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class GenerateRemoteCrontabCommand extends ContainerAwareCommand
+{
+
+    protected function configure()
+    {
+        $this
+            ->setName('stats:crontab:remote')
+            ->setDescription('Generate Remote Stats Crontab File')
+            ->setHelp('El comando genera/actualiza el archivo crontab de manera remota para realizar consultas a dispositivos')
+            ->setDefinition(array(
+                new InputOption('file-crontab', false, InputOption::VALUE_OPTIONAL, "File Crontab","/etc/cron.d/fd3_stats"),
+                new InputOption('path-app', false, InputOption::VALUE_OPTIONAL, "Path App"),
+                new InputOption('url', false, InputOption::VALUE_OPTIONAL, "Crontab webservice url"),
+                new InputOption('amqp', false, InputOption::VALUE_OPTIONAL, "Execute the commands via amqp", true),
+                new InputOption('routing_key', false, InputOption::VALUE_OPTIONAL, "AMQP Routing key"),
+            ))
+        ;
+    }
+
+    /**
+     * @param InputInterface $input
+     * @param OutputInterface $output
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $this->output = $output;
+        $fileCrontab = $input->getOption('file-crontab');
+        $pathApp = $input->getOption('path-app');
+        $url = $input->getOption('url');
+        if (is_null($url)) {
+            if ($this->getContainer()->hasParameter('url_crontab')) {
+                $url = $this->getContainer()->getParameter('url_crontab');
+            } else {
+                $output->writeln('<error>ERROR:</error> Debe definir una url para generar el crontab.');
+                $output->writeln($this->getSynopsis());
+
+                return;
+            }
+        }
+
+        $times = array();
+        $now = date("d-m-Y H:i:s");
+        $content = PHP_EOL."# NO EDITAR este archivo, se autogenera con el comando stats:crontab:remote. Generado {$now}.".PHP_EOL;
+
+        $doctrine = $this->getContainer()->get('doctrine.orm.entity_manager');
+        
+        if(is_null($pathApp)) {
+            $pathApp = $this->getContainer()->getParameter('app_path');
+        }
+        $pathConsole = "root $(wich php) {$pathApp}/bin/console"; 
+        
+        $serverDevices = $doctrine->getRepository('\StatsBundle\Entity\DeviceServer')->findAll();
+        
+        $oltMarks = array('FiberHome','FiberLink','Huawei');
+        $oltLibraries = array('OIDSFiberHomeV1','OIDSHuaweiV1');
+
+        $amqp = $input->getOption('amqp');
+        $amqpRemote = '';
+        $routing_key = '';
+        if ($amqp) {
+            $amqpRemote = 'amqp:remote';
+            
+            // Verifico la routing key si se pasa como parametro o variable de entorno
+            // default routing_key = stats
+            $routing_key = $input->getOption('routing_key');
+            if (!$routing_key) {
+                $routing_key = getenv('AMQP_KEY') !== false ? getenv('AMQP_KEY') : 'stats';
+            }
+            $routing_key = "--route={$routing_key}";
+        }
+        
+        $content .= "*/5 * * * * {$pathConsole} {$amqpRemote} {$routing_key} generate:crontab".PHP_EOL;
+
+        foreach($serverDevices as $server) {
+
+            $content .= PHP_EOL.PHP_EOL."# SERVER {$server->getName()} / {$server->getUrl()}".PHP_EOL;
+        
+            // APARTADO OLT
+            $oltDevices = $doctrine->getRepository('\StatsBundle\Entity\Device')->findBy(array('deviceType' => 'FTTHBundle\Entity\OLT','deviceServer' => $server));
+
+            $serverId = $server->getId();
+
+            foreach($oltDevices as $device) {
+                $commands = array();
+                $data = $device->jsonExtraData();
+                
+                if($data['executeSnmp'] == 0) continue;
+
+                if(!in_array($data['mark'],$oltMarks)) continue;
+                
+                if(!in_array($data['library'],$oltLibraries)) continue;
+
+                $oltName = $data['name'];
+                $mark = strtolower($data['mark']);
+                $library = $data['library'];
+                $snmpCommunity = $data['snmpCommunity'];
+                $deviceIp = $device->getIp();
+                $deviceId = $device->getDeviceId();
+
+                $timeScan = $data['timeScan'];
+                $timeOnuStats = $data['timeOnuStats'];
+                $timePonStats = $data['timePonStats'];
+                $timeOltOctets = $data['timeOltOctets'];
+
+                $params = "--olt-ip={$deviceIp} --olt-community={$snmpCommunity} --olt-snmp-library={$library} --olt-device-id={$deviceId} --olt-server-id={$serverId}";
+                if ($amqp) {
+                    $params = "--args=--olt-ip:{$deviceIp} --args=--olt-community:{$snmpCommunity} --args=--olt-snmp-library:{$library} --args=--olt-device-id:{$deviceId} --args=--olt-server-id:{$serverId}";
+                }
+
+                $commands[] = "*/{$timeScan} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:scan {$params}";
+                $commands[] = "*/{$timeScan} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:onu:scan {$params}";
+                
+                $commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:onu:stats {$params}";
+                $commands[] = "*/{$timePonStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:stats {$params}";
+                $commands[] = "*/{$timeOltOctets} * * * * {$pathConsole} {$amqpRemote} {$routing_key} {$mark}:pon:octets {$params}";
+                
+                $params = '--olt-device-id={$deviceId} --olt-server-id={$serverId}';
+                if ($amqp) {
+                    $params = '--args=--olt-device-id:{$deviceId} --args=--olt-server-id:{$serverId}';
+                }
+                $commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:onu {$params}";
+                $commands[] = "*/{$timeOnuStats} * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:ponport {$params}";
+                
+                $content .= PHP_EOL."# OLT {$oltName} ({$deviceIp})".PHP_EOL;
+                
+                $content .= implode(PHP_EOL, $commands);
+            }
+            
+            if($this->getContainer()->getParameter('geoserver_service')) {
+                $content .= PHP_EOL.PHP_EOL."# MAPAS".PHP_EOL;
+                
+                $params = '--olt-server-id={$serverId}';
+                if ($amqp) {
+                    $params = '--args=--olt-server-id:{$serverId}';
+                }
+                
+                $commands = array();
+                $commands[] = "*/5 * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:onu:geo {$params}";
+                $commands[] = "*/10 * * * * {$pathConsole} {$amqpRemote} {$routing_key} stats:ponport:geo {$params}";
+                
+                $content .= implode(PHP_EOL, $commands);
+                $content .= PHP_EOL;
+            }
+        }
+        $this->soap($url, $fileCrontab, $content);
+    }
+
+    /**
+    * @param string $url
+    * @param string $filename
+    * @param string $content
+    */
+    protected function soap($url, $filename, $content)
+    {
+        $client = new \SoapClient($url);
+        $result = $client->__soapCall('crontab', compact('filename', 'content'));
+        $this->output->writeln($result); 
+    }
+
+}

+ 29 - 82
var/SymfonyRequirements.php

@@ -168,9 +168,6 @@ class PhpIniRequirement extends Requirement
  */
 class RequirementCollection implements IteratorAggregate
 {
-    /**
-     * @var Requirement[]
-     */
     private $requirements = array();
 
     /**
@@ -268,7 +265,7 @@ class RequirementCollection implements IteratorAggregate
     /**
      * Returns both requirements and recommendations.
      *
-     * @return Requirement[]
+     * @return array Array of Requirement instances
      */
     public function all()
     {
@@ -278,7 +275,7 @@ class RequirementCollection implements IteratorAggregate
     /**
      * Returns all mandatory requirements.
      *
-     * @return Requirement[]
+     * @return array Array of Requirement instances
      */
     public function getRequirements()
     {
@@ -295,7 +292,7 @@ class RequirementCollection implements IteratorAggregate
     /**
      * Returns the mandatory requirements that were not met.
      *
-     * @return Requirement[]
+     * @return array Array of Requirement instances
      */
     public function getFailedRequirements()
     {
@@ -312,7 +309,7 @@ class RequirementCollection implements IteratorAggregate
     /**
      * Returns all optional recommendations.
      *
-     * @return Requirement[]
+     * @return array Array of Requirement instances
      */
     public function getRecommendations()
     {
@@ -329,7 +326,7 @@ class RequirementCollection implements IteratorAggregate
     /**
      * Returns the recommendations that were not met.
      *
-     * @return Requirement[]
+     * @return array Array of Requirement instances
      */
     public function getFailedRecommendations()
     {
@@ -379,8 +376,7 @@ class RequirementCollection implements IteratorAggregate
  */
 class SymfonyRequirements extends RequirementCollection
 {
-    const LEGACY_REQUIRED_PHP_VERSION = '5.3.3';
-    const REQUIRED_PHP_VERSION = '5.5.9';
+    const REQUIRED_PHP_VERSION = '5.3.3';
 
     /**
      * Constructor that initializes the requirements.
@@ -390,25 +386,15 @@ class SymfonyRequirements extends RequirementCollection
         /* mandatory requirements follow */
 
         $installedPhpVersion = phpversion();
-        $requiredPhpVersion = $this->getPhpRequiredVersion();
-
-        $this->addRecommendation(
-            $requiredPhpVersion,
-            'Vendors should be installed in order to check all requirements.',
-            'Run the <code>composer install</code> command.',
-            'Run the "composer install" command.'
-        );
 
-        if (false !== $requiredPhpVersion) {
-            $this->addRequirement(
-                version_compare($installedPhpVersion, $requiredPhpVersion, '>='),
-                sprintf('PHP version must be at least %s (%s installed)', $requiredPhpVersion, $installedPhpVersion),
-                sprintf('You are running PHP version "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" to run.
+        $this->addRequirement(
+            version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>='),
+            sprintf('PHP version must be at least %s (%s installed)', self::REQUIRED_PHP_VERSION, $installedPhpVersion),
+            sprintf('You are running PHP version "<strong>%s</strong>", but Symfony needs at least PHP "<strong>%s</strong>" to run.
                 Before using Symfony, upgrade your PHP installation, preferably to the latest version.',
-                    $installedPhpVersion, $requiredPhpVersion),
-                sprintf('Install PHP %s or newer (installed version is %s)', $requiredPhpVersion, $installedPhpVersion)
-            );
-        }
+                $installedPhpVersion, self::REQUIRED_PHP_VERSION),
+            sprintf('Install PHP %s or newer (installed version is %s)', self::REQUIRED_PHP_VERSION, $installedPhpVersion)
+        );
 
         $this->addRequirement(
             version_compare($installedPhpVersion, '5.3.16', '!='),
@@ -439,15 +425,13 @@ class SymfonyRequirements extends RequirementCollection
             '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).'
-            );
-        }
+        $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, '>=')) {
+        if (version_compare($installedPhpVersion, self::REQUIRED_PHP_VERSION, '>=')) {
             $timezones = array();
             foreach (DateTimeZone::listAbbreviations() as $abbreviations) {
                 foreach ($abbreviations as $abbreviation) {
@@ -633,6 +617,12 @@ class SymfonyRequirements extends RequirementCollection
             'Install and enable the <strong>mbstring</strong> extension.'
         );
 
+        $this->addRecommendation(
+            function_exists('iconv'),
+            'iconv() should be available',
+            'Install and enable the <strong>iconv</strong> extension.'
+        );
+
         $this->addRecommendation(
             function_exists('utf8_decode'),
             'utf8_decode() should be available',
@@ -687,21 +677,6 @@ class SymfonyRequirements extends RequirementCollection
                 '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;'),
@@ -733,9 +708,9 @@ class SymfonyRequirements extends RequirementCollection
 
         if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
             $this->addRecommendation(
-                $this->getRealpathCacheSize() >= 5 * 1024 * 1024,
-                'realpath_cache_size should be at least 5M in php.ini',
-                'Setting "<strong>realpath_cache_size</strong>" to e.g. "<strong>5242880</strong>" or "<strong>5M</strong>" in php.ini<a href="#phpini">*</a> may improve performance on Windows significantly in some cases.'
+                $this->getRealpathCacheSize() > 1000,
+                'realpath_cache_size should be above 1024 in php.ini',
+                'Set "<strong>realpath_cache_size</strong>" to e.g. "<strong>1024</strong>" in php.ini<a href="#phpini">*</a> to improve performance on windows.'
             );
         }
 
@@ -774,11 +749,7 @@ class SymfonyRequirements extends RequirementCollection
     {
         $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);
-        }
+        $unit = strtolower(substr($size, -1, 1));
         switch ($unit) {
             case 'g':
                 return $size * 1024 * 1024 * 1024;
@@ -790,28 +761,4 @@ class SymfonyRequirements extends RequirementCollection
                 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;
-    }
 }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 14 - 231
web/config.php