/var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/migrations/src
NameSizeModeActions
Command/-0755rm
Shell/-0755rm
TestSuite/-0755rm
Util/-0755rm
View/-0755rm
AbstractMigration.php15180644editdlrm
AbstractSeed.php37850644editdlrm
CakeAdapter.php26360644editdlrm
CakeManager.php124470644editdlrm
ConfigurationTrait.php110830644editdlrm
Migrations.php140470644editdlrm
MigrationsDispatcher.php17690644editdlrm
Plugin.php26040644editdlrm
Table.php77300644editdlrm
TableFinderTrait.php61630644editdlrm
Edit: /var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/migrations/src/ConfigurationTrait.php (11083B)
input === null) { throw new \RuntimeException('Input not set'); } return $this->input; } /** * Overrides the original method from phinx to just always return true to * avoid calling loadConfig method which will throw an exception as we rely on * the overridden getConfig method. * * @return bool */ public function hasConfig(): bool { return true; } /** * Overrides the original method from phinx in order to return a tailored * Config object containing the connection details for the database. * * @param bool $forceRefresh Refresh config. * @return \Phinx\Config\ConfigInterface */ public function getConfig($forceRefresh = false): ConfigInterface { if ($this->configuration && $forceRefresh === false) { return $this->configuration; } $migrationsPath = $this->getOperationsPath($this->input()); $seedsPath = $this->getOperationsPath($this->input(), 'Seeds'); $plugin = $this->getPlugin($this->input()); if (!is_dir($migrationsPath)) { if (!Configure::read('debug')) { throw new \RuntimeException(sprintf( 'Migrations path `%s` does not exist and cannot be created because `debug` is disabled.', $migrationsPath )); } mkdir($migrationsPath, 0777, true); } if (Configure::read('debug') && !is_dir($seedsPath)) { mkdir($seedsPath, 0777, true); } $phinxTable = $this->getPhinxTable($plugin); $connection = $this->getConnectionName($this->input()); $connectionConfig = (array)ConnectionManager::getConfig($connection); $adapterName = $this->getAdapterName($connectionConfig['driver']); $dsnOptions = $this->extractDsnOptions($adapterName, $connectionConfig); $templatePath = dirname(__DIR__) . DS . 'templates' . DS; $config = [ 'paths' => [ 'migrations' => $migrationsPath, 'seeds' => $seedsPath, ], 'templates' => [ 'file' => $templatePath . 'Phinx' . DS . 'create.php.template', ], 'migration_base_class' => 'Migrations\AbstractMigration', 'environments' => [ 'default_migration_table' => $phinxTable, 'default_environment' => 'default', 'default' => [ 'adapter' => $adapterName, 'host' => $connectionConfig['host'] ?? null, 'user' => $connectionConfig['username'] ?? null, 'pass' => $connectionConfig['password'] ?? null, 'port' => $connectionConfig['port'] ?? null, 'name' => $connectionConfig['database'], 'charset' => $connectionConfig['encoding'] ?? null, 'unix_socket' => $connectionConfig['unix_socket'] ?? null, 'suffix' => '', 'dsn_options' => $dsnOptions, ], ], 'feature_flags' => $this->featureFlags(), ]; if ($adapterName === 'pgsql') { if (!empty($connectionConfig['schema'])) { $config['environments']['default']['schema'] = $connectionConfig['schema']; } } if ($adapterName === 'mysql') { if (!empty($connectionConfig['ssl_key']) && !empty($connectionConfig['ssl_cert'])) { $config['environments']['default']['mysql_attr_ssl_key'] = $connectionConfig['ssl_key']; $config['environments']['default']['mysql_attr_ssl_cert'] = $connectionConfig['ssl_cert']; } if (!empty($connectionConfig['ssl_ca'])) { $config['environments']['default']['mysql_attr_ssl_ca'] = $connectionConfig['ssl_ca']; } } if ($adapterName === 'sqlite') { if (!empty($connectionConfig['cache'])) { $config['environments']['default']['cache'] = $connectionConfig['cache']; } if (!empty($connectionConfig['mode'])) { $config['environments']['default']['mode'] = $connectionConfig['mode']; } } if (!empty($connectionConfig['flags'])) { $config['environments']['default'] += $this->translateConnectionFlags($connectionConfig['flags'], $adapterName); } return $this->configuration = new Config($config); } /** * The following feature flags are disabled by default to keep BC. * The next major will turn them on. You can do so on your own before already. * * @return array */ protected function featureFlags(): array { $defaults = [ 'unsigned_primary_keys' => false, 'column_null_default' => false, ]; return (array)Configure::read('Migrations') + $defaults; } /** * Returns the correct driver name to use in phinx based on the driver class * that was configured for the configuration. * * @param string $driver The driver name as configured for the CakePHP app. * @return string Name of the adapter. * @throws \InvalidArgumentException when it was not possible to infer the information * out of the provided database configuration * @phpstan-param class-string $driver */ public function getAdapterName($driver) { switch ($driver) { case Mysql::class: case is_subclass_of($driver, Mysql::class): return 'mysql'; case Postgres::class: case is_subclass_of($driver, Postgres::class): return 'pgsql'; case Sqlite::class: case is_subclass_of($driver, Sqlite::class): return 'sqlite'; case Sqlserver::class: case is_subclass_of($driver, Sqlserver::class): return 'sqlsrv'; } throw new \InvalidArgumentException('Could not infer database type from driver'); } /** * Returns the connection name that should be used for the migrations. * * @param \Symfony\Component\Console\Input\InputInterface $input the input object * @return string * @psalm-suppress InvalidReturnType */ protected function getConnectionName(InputInterface $input) { return $input->getOption('connection') ?: 'default'; } /** * Translates driver specific connection flags (PDO attributes) to * Phinx compatible adapter options. * * Currently Phinx supports of the following flags: * * - *Most* of `PDO::ATTR_*` * - `PDO::MYSQL_ATTR_*` * - `PDO::PGSQL_ATTR_*` * - `PDO::SQLSRV_ATTR_*` * * ### Example: * * ``` * [ * \PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, * \PDO::SQLSRV_ATTR_DIRECT_QUERY => true, * // ... * ] * ``` * * will be translated to: * * ``` * [ * 'mysql_attr_ssl_verify_server_cert' => false, * 'sqlsrv_attr_direct_query' => true, * // ... * ] * ``` * * @param array $flags An array of connection flags. * @param string $adapterName The adapter name, eg `mysql` or `sqlsrv`. * @return array An array of Phinx compatible connection attribute options. */ protected function translateConnectionFlags(array $flags, $adapterName) { $pdo = new \ReflectionClass(\PDO::class); $constants = $pdo->getConstants(); $attributes = []; foreach ($constants as $name => $value) { $name = strtolower($name); if (strpos($name, "{$adapterName}_attr_") === 0 || strpos($name, 'attr_') === 0) { $attributes[$value] = $name; } } $options = []; foreach ($flags as $flag => $value) { if (isset($attributes[$flag])) { $options[$attributes[$flag]] = $value; } } return $options; } /** * Extracts DSN options from the connection configuration. * * @param string $adapterName The adapter name. * @param array $config The connection configuration. * @return array */ protected function extractDsnOptions(string $adapterName, array $config): array { $dsnOptionsMap = []; // SQLServer is currently the only Phinx adapter that supports DSN options if ($adapterName === 'sqlsrv') { $dsnOptionsMap = [ 'connectionPooling' => 'ConnectionPooling', 'failoverPartner' => 'Failover_Partner', 'loginTimeout' => 'LoginTimeout', 'multiSubnetFailover' => 'MultiSubnetFailover', 'encrypt' => 'Encrypt', 'trustServerCertificate' => 'TrustServerCertificate', ]; } $suppliedDsnOptions = array_intersect_key($dsnOptionsMap, $config); $dsnOptions = []; foreach ($suppliedDsnOptions as $alias => $option) { $dsnOptions[$option] = $config[$alias]; } return $dsnOptions; } }