mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-08-04 15:12:12 +00:00
* test(pdf): render every stock template through the real pdf routes Blade templates reference PHP classes as plain strings, so a namespace move leaves them dangling without Pint, the IDE, or CI noticing — which is how #695 shipped a fatal ImageUtils reference in all seven stock templates and left it there for three months. Renders each invoice, estimate and payment template end-to-end through the pdf routes with a company logo attached, since every template guards the logo behind `@if ($logo)` and the fallback branch never reaches ImageUtils. One extra assertion checks the rendered markup actually carries the base64 data URI, so a template that silently drops the logo fails too rather than emitting a valid but logo-less PDF. Template names are globbed off disk rather than hardcoded, so a new stock template is covered as soon as it lands. * fix(config): resolve the mysql SSL CA attribute per PHP version PHP 8.5 deprecated PDO::MYSQL_ATTR_SSL_CA in favour of Pdo\Mysql::ATTR_SSL_CA, so every test in the suite was reported as deprecated rather than passed — noise that would hide a real one. Pdo\Mysql does not exist before 8.5 and this package supports ^8.4, so the constant is resolved at runtime; the untaken ternary branch is never looked up, which keeps 8.4 working. The lookup stays behind the extension_loaded() check because neither name is defined when pdo_mysql is missing. Verified against both runtimes: with MYSQL_ATTR_SSL_CA set, 8.4 resolves to attribute 1009 and 8.5 to 1008 — each version's own value, matching what the previous code produced there.
194 lines
7.2 KiB
PHP
194 lines
7.2 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Str;
|
|
use Pdo\Mysql;
|
|
|
|
// PHP 8.5 deprecated PDO::MYSQL_ATTR_SSL_CA in favour of Pdo\Mysql::ATTR_SSL_CA,
|
|
// which does not exist before 8.5. This package supports ^8.4, so resolve
|
|
// whichever name the running version provides — both refer to the same
|
|
// attribute. Kept behind the extension check because neither constant is
|
|
// defined at all when pdo_mysql is missing.
|
|
$mysqlSslCaAttribute = extension_loaded('pdo_mysql')
|
|
? (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA)
|
|
: null;
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default Database Connection Name
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Here you may specify which of the database connections below you wish
|
|
| to use as your default connection for database operations. This is
|
|
| the connection which will be utilized unless another connection
|
|
| is explicitly specified when you execute a query / statement.
|
|
|
|
|
*/
|
|
|
|
'default' => env('DB_CONNECTION', 'sqlite'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Database Connections
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Below are all of the database connections defined for your application.
|
|
| An example configuration is provided for each database system which
|
|
| is supported by Laravel. You're free to add / remove connections.
|
|
|
|
|
*/
|
|
|
|
'connections' => [
|
|
|
|
'sqlite' => [
|
|
'driver' => 'sqlite',
|
|
'url' => env('DB_URL'),
|
|
'database' => env('DB_DATABASE') ?: storage_path('app/database.sqlite'),
|
|
'prefix' => '',
|
|
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
|
'busy_timeout' => null,
|
|
'journal_mode' => null,
|
|
'synchronous' => null,
|
|
'transaction_mode' => 'DEFERRED',
|
|
],
|
|
|
|
'mysql' => [
|
|
'driver' => 'mysql',
|
|
'url' => env('DB_URL'),
|
|
'host' => env('DB_HOST', '127.0.0.1'),
|
|
'port' => env('DB_PORT', '3306'),
|
|
'database' => env('DB_DATABASE', 'laravel'),
|
|
'username' => env('DB_USERNAME', 'root'),
|
|
'password' => env('DB_PASSWORD', ''),
|
|
'unix_socket' => env('DB_SOCKET', ''),
|
|
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
|
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
|
'prefix' => '',
|
|
'prefix_indexes' => true,
|
|
'strict' => true,
|
|
'engine' => null,
|
|
'options' => $mysqlSslCaAttribute !== null ? array_filter([
|
|
$mysqlSslCaAttribute => env('MYSQL_ATTR_SSL_CA'),
|
|
]) : [],
|
|
],
|
|
|
|
'mariadb' => [
|
|
'driver' => 'mariadb',
|
|
'url' => env('DB_URL'),
|
|
'host' => env('DB_HOST', '127.0.0.1'),
|
|
'port' => env('DB_PORT', '3306'),
|
|
'database' => env('DB_DATABASE', 'laravel'),
|
|
'username' => env('DB_USERNAME', 'root'),
|
|
'password' => env('DB_PASSWORD', ''),
|
|
'unix_socket' => env('DB_SOCKET', ''),
|
|
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
|
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
|
'prefix' => '',
|
|
'prefix_indexes' => true,
|
|
'strict' => true,
|
|
'engine' => null,
|
|
'options' => $mysqlSslCaAttribute !== null ? array_filter([
|
|
$mysqlSslCaAttribute => env('MYSQL_ATTR_SSL_CA'),
|
|
]) : [],
|
|
],
|
|
|
|
'pgsql' => [
|
|
'driver' => 'pgsql',
|
|
'url' => env('DB_URL'),
|
|
'host' => env('DB_HOST', '127.0.0.1'),
|
|
'port' => env('DB_PORT', '5432'),
|
|
'database' => env('DB_DATABASE', 'laravel'),
|
|
'username' => env('DB_USERNAME', 'root'),
|
|
'password' => env('DB_PASSWORD', ''),
|
|
'charset' => env('DB_CHARSET', 'utf8'),
|
|
'prefix' => '',
|
|
'prefix_indexes' => true,
|
|
'search_path' => 'public',
|
|
'sslmode' => 'prefer',
|
|
],
|
|
|
|
'sqlsrv' => [
|
|
'driver' => 'sqlsrv',
|
|
'url' => env('DB_URL'),
|
|
'host' => env('DB_HOST', 'localhost'),
|
|
'port' => env('DB_PORT', '1433'),
|
|
'database' => env('DB_DATABASE', 'laravel'),
|
|
'username' => env('DB_USERNAME', 'root'),
|
|
'password' => env('DB_PASSWORD', ''),
|
|
'charset' => env('DB_CHARSET', 'utf8'),
|
|
'prefix' => '',
|
|
'prefix_indexes' => true,
|
|
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
|
|
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
|
|
],
|
|
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Migration Repository Table
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This table keeps track of all the migrations that have already run for
|
|
| your application. Using this information, we can determine which of
|
|
| the migrations on disk haven't actually been run on the database.
|
|
|
|
|
*/
|
|
|
|
'migrations' => [
|
|
'table' => 'migrations',
|
|
'update_date_on_publish' => true,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Redis Databases
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Redis is an open source, fast, and advanced key-value store that also
|
|
| provides a richer body of commands than a typical key-value system
|
|
| such as Memcached. You may define your connection settings here.
|
|
|
|
|
*/
|
|
|
|
'redis' => [
|
|
|
|
'client' => env('REDIS_CLIENT', 'phpredis'),
|
|
|
|
'options' => [
|
|
'cluster' => env('REDIS_CLUSTER', 'redis'),
|
|
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
|
|
'persistent' => env('REDIS_PERSISTENT', false),
|
|
],
|
|
|
|
'default' => [
|
|
'url' => env('REDIS_URL'),
|
|
'host' => env('REDIS_HOST', '127.0.0.1'),
|
|
'username' => env('REDIS_USERNAME'),
|
|
'password' => env('REDIS_PASSWORD'),
|
|
'port' => env('REDIS_PORT', '6379'),
|
|
'database' => env('REDIS_DB', '0'),
|
|
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
|
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
|
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
|
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
|
],
|
|
|
|
'cache' => [
|
|
'url' => env('REDIS_URL'),
|
|
'host' => env('REDIS_HOST', '127.0.0.1'),
|
|
'username' => env('REDIS_USERNAME'),
|
|
'password' => env('REDIS_PASSWORD'),
|
|
'port' => env('REDIS_PORT', '6379'),
|
|
'database' => env('REDIS_CACHE_DB', '1'),
|
|
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
|
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
|
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
|
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
|
],
|
|
|
|
],
|
|
|
|
];
|