diff --git a/.env.example b/.env.example index fd6377df..074ba148 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://laravel.cm.test +APP_LOCALE=fr FILAMENT_PATH=cp LOG_CHANNEL=stack diff --git a/app/Http/Middleware/LocaleMiddleware.php b/app/Http/Middleware/LocaleMiddleware.php new file mode 100644 index 00000000..b8ecda32 --- /dev/null +++ b/app/Http/Middleware/LocaleMiddleware.php @@ -0,0 +1,37 @@ +getPreferredLanguage())[0]; + $currentLocale = app()->getLocale(); + $activeLocale = session()->get('locale'); + $supportedLocales = config('lcm.supported_locales'); + + if (Auth::check()) { + $userLocale = Auth::user()?->setting('locale', $currentLocale); + + if ($userLocale && $userLocale !== $currentLocale) { + app()->setLocale($userLocale); + } + } else { + if (! $activeLocale && in_array($browserLocale, $supportedLocales)) { + app()->setLocale($browserLocale); + } else { + app()->setLocale($activeLocale); + } + } + + return $next($request); + } +} diff --git a/app/Livewire/Components/ChangeLocale.php b/app/Livewire/Components/ChangeLocale.php new file mode 100644 index 00000000..4ce220d4 --- /dev/null +++ b/app/Livewire/Components/ChangeLocale.php @@ -0,0 +1,49 @@ +currentLocale = app()->getLocale(); + } + + public function changeLocale(): void + { + $locale = $this->currentLocale === 'fr' ? 'en' : 'fr'; + + if (Auth::check()) { + Auth::user()?->settings(['locale' => $locale]); + } + + $this->currentLocale = $locale; + app()->setLocale($locale); + session()->put('locale', $locale); + + Pluralizer::useLanguage($this->currentLocale === 'fr' ? 'french' : 'english'); + + $this->redirectRoute('home', navigate: true); + } + + #[Computed] + public function locale(): string + { + return $this->currentLocale === 'fr' ? 'English' : 'Français'; + } + + public function render(): View + { + return view('livewire.components.change-locale'); + } +} diff --git a/app/Models/Article.php b/app/Models/Article.php index 2fa94065..f3a5fdb7 100644 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -6,6 +6,7 @@ use App\Contracts\ReactableInterface; use App\Models\Builders\ArticleQueryBuilder; +use App\Models\Scopes\LocaleScope; use App\Traits\HasAuthor; use App\Traits\HasSlug; use App\Traits\HasTags; @@ -13,6 +14,7 @@ use App\Traits\RecordsActivity; use CyrildeWit\EloquentViewable\Contracts\Viewable; use CyrildeWit\EloquentViewable\InteractsWithViews; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -40,6 +42,7 @@ * @property \Illuminate\Support\Carbon $created_at * @property \Illuminate\Support\Carbon $updated_at */ +#[ScopedBy([LocaleScope::class])] final class Article extends Model implements HasMedia, ReactableInterface, Viewable { use HasAuthor; diff --git a/app/Models/Discussion.php b/app/Models/Discussion.php index a2fded4f..e9798ff4 100644 --- a/app/Models/Discussion.php +++ b/app/Models/Discussion.php @@ -9,6 +9,7 @@ use App\Contracts\SpamReportableContract; use App\Contracts\SubscribeInterface; use App\Models\Builders\DiscussionQueryBuilder; +use App\Models\Scopes\LocaleScope; use App\Traits\HasAuthor; use App\Traits\HasReplies; use App\Traits\HasSlug; @@ -20,6 +21,7 @@ use Carbon\Carbon; use CyrildeWit\EloquentViewable\Contracts\Viewable; use CyrildeWit\EloquentViewable\InteractsWithViews; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -40,6 +42,7 @@ * @property User $user * @property Collection | SpamReport[] $spamReports */ +#[ScopedBy([LocaleScope::class])] final class Discussion extends Model implements ReactableInterface, ReplyInterface, SpamReportableContract, SubscribeInterface, Viewable { use HasAuthor; diff --git a/app/Models/Scopes/LocaleScope.php b/app/Models/Scopes/LocaleScope.php new file mode 100644 index 00000000..7a3851ff --- /dev/null +++ b/app/Models/Scopes/LocaleScope.php @@ -0,0 +1,17 @@ +where('locale', app()->getLocale()); + } +} diff --git a/app/Models/Thread.php b/app/Models/Thread.php index 0673b41a..cfa62aa3 100644 --- a/app/Models/Thread.php +++ b/app/Models/Thread.php @@ -10,6 +10,7 @@ use App\Contracts\SubscribeInterface; use App\Exceptions\CouldNotMarkReplyAsSolution; use App\Filters\Thread\ThreadFilters; +use App\Models\Scopes\LocaleScope; use App\Traits\HasAuthor; use App\Traits\HasReplies; use App\Traits\HasSlug; @@ -21,6 +22,7 @@ use CyrildeWit\EloquentViewable\Contracts\Viewable; use CyrildeWit\EloquentViewable\InteractsWithViews; use Exception; +use Illuminate\Database\Eloquent\Attributes\ScopedBy; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -51,6 +53,7 @@ * @property Reply | null $solutionReply * @property \Illuminate\Database\Eloquent\Collection | Channel[] $channels */ +#[ScopedBy([LocaleScope::class])] final class Thread extends Model implements Feedable, ReactableInterface, ReplyInterface, SpamReportableContract, SubscribeInterface, Viewable { use HasAuthor; diff --git a/app/Models/User.php b/app/Models/User.php index d2bffbb1..d88a0483 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -46,10 +46,12 @@ * @property string | null $bio * @property string | null $website * @property string | null $banned_reason + * @property array $settings * @property Carbon | null $email_verified_at * @property Carbon | null $last_login_at * @property Carbon | null $banned_at * @property Collection | Activity[] $activities + * @property-read Collection | SocialAccount[] $providers */ final class User extends Authenticatable implements FilamentUser, HasAvatar, HasMedia, HasName, MustVerifyEmail { diff --git a/app/Traits/HasSettings.php b/app/Traits/HasSettings.php index 17a5cea1..445f1fb3 100644 --- a/app/Traits/HasSettings.php +++ b/app/Traits/HasSettings.php @@ -6,7 +6,7 @@ trait HasSettings { - public function setting(string $name, string $default): string + public function setting(string $name, string $default): mixed { if ($this->settings && array_key_exists($name, $this->settings)) { return $this->settings[$name]; diff --git a/bootstrap/app.php b/bootstrap/app.php index 9b8a54b2..3f6d2e38 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use App\Http\Middleware\LocaleMiddleware; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; @@ -17,6 +18,9 @@ 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'checkIfBanned' => \App\Http\Middleware\CheckIfBanned::class, ]); + $middleware->web(append: [ + LocaleMiddleware::class, + ]); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/composer.lock b/composer.lock index a090f717..4d3feafe 100644 --- a/composer.lock +++ b/composer.lock @@ -995,16 +995,16 @@ }, { "name": "archtechx/laravel-seo", - "version": "v0.10.1", + "version": "v0.10.2", "source": { "type": "git", "url": "https://github.com/archtechx/laravel-seo.git", - "reference": "76d0f9efac160e499daae2d1a79e2d09ca0daaae" + "reference": "f6fd5f4a551313926acf991f0f225ae6c3199cd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/archtechx/laravel-seo/zipball/76d0f9efac160e499daae2d1a79e2d09ca0daaae", - "reference": "76d0f9efac160e499daae2d1a79e2d09ca0daaae", + "url": "https://api.github.com/repos/archtechx/laravel-seo/zipball/f6fd5f4a551313926acf991f0f225ae6c3199cd1", + "reference": "f6fd5f4a551313926acf991f0f225ae6c3199cd1", "shasum": "" }, "require": { @@ -1047,9 +1047,9 @@ ], "support": { "issues": "https://github.com/archtechx/laravel-seo/issues", - "source": "https://github.com/archtechx/laravel-seo/tree/v0.10.1" + "source": "https://github.com/archtechx/laravel-seo/tree/v0.10.2" }, - "time": "2024-05-03T22:09:30+00:00" + "time": "2024-11-22T23:46:28+00:00" }, { "name": "awcodes/filament-badgeable-column", @@ -1400,16 +1400,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.3", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2" + "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/3b1fc3f0be055baa7c6258b1467849c3e8204eb2", - "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/bc0593537a463e55cadf45fd938d23b75095b7e1", + "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1", "shasum": "" }, "require": { @@ -1456,7 +1456,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.3" + "source": "https://github.com/composer/ca-bundle/tree/1.5.4" }, "funding": [ { @@ -1472,7 +1472,7 @@ "type": "tidelift" } ], - "time": "2024-11-04T10:15:26+00:00" + "time": "2024-11-27T15:35:25+00:00" }, { "name": "composer/semver", @@ -2780,7 +2780,7 @@ }, { "name": "filament/spatie-laravel-media-library-plugin", - "version": "v3.2.124", + "version": "v3.2.126", "source": { "type": "git", "url": "https://github.com/filamentphp/spatie-laravel-media-library-plugin.git", @@ -4395,23 +4395,23 @@ }, { "name": "laravel/framework", - "version": "v11.33.2", + "version": "v11.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "6b9832751cf8eed18b3c73df5071f78f0682aa5d" + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/6b9832751cf8eed18b3c73df5071f78f0682aa5d", - "reference": "6b9832751cf8eed18b3c73df5071f78f0682aa5d", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -4421,35 +4421,36 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0", - "symfony/error-handler": "^7.0", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mailer": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0", - "symfony/routing": "^7.0", - "symfony/uid": "^7.0", - "symfony/var-dumper": "^7.0", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { "mockery/mockery": "1.6.8", @@ -4499,29 +4500,32 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "fakerphp/faker": "^1.23", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "nyholm/psr7": "^1.2", "orchestra/testbench-core": "^9.6", - "pda/pheanstalk": "^5.0", + "pda/pheanstalk": "^5.0.6", "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", @@ -4535,16 +4539,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", @@ -4600,7 +4604,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-19T22:47:13+00:00" + "time": "2024-11-27T15:43:57+00:00" }, { "name": "laravel/prompts", @@ -4663,16 +4667,16 @@ }, { "name": "laravel/sanctum", - "version": "v4.0.4", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "819782c75aaf2b08da1765503893bd2b8023d3b3" + "reference": "fe361b9a63407a228f884eb78d7217f680b50140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/819782c75aaf2b08da1765503893bd2b8023d3b3", - "reference": "819782c75aaf2b08da1765503893bd2b8023d3b3", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/fe361b9a63407a228f884eb78d7217f680b50140", + "reference": "fe361b9a63407a228f884eb78d7217f680b50140", "shasum": "" }, "require": { @@ -4723,7 +4727,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-11-15T14:47:23+00:00" + "time": "2024-11-26T14:36:23+00:00" }, { "name": "laravel/serializable-closure", @@ -5784,16 +5788,16 @@ }, { "name": "livewire/livewire", - "version": "v3.5.12", + "version": "v3.5.14", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d" + "reference": "e94a2cd1da95abc2c219190df09f1b34786dd00b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", - "reference": "3c8d1f9d7d9098aaea663093ae168f2d5d2ae73d", + "url": "https://api.github.com/repos/livewire/livewire/zipball/e94a2cd1da95abc2c219190df09f1b34786dd00b", + "reference": "e94a2cd1da95abc2c219190df09f1b34786dd00b", "shasum": "" }, "require": { @@ -5819,12 +5823,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Livewire\\LivewireServiceProvider" - ], "aliases": { "Livewire": "Livewire\\Livewire" - } + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] } }, "autoload": { @@ -5848,7 +5852,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.5.12" + "source": "https://github.com/livewire/livewire/tree/v3.5.14" }, "funding": [ { @@ -5856,7 +5860,7 @@ "type": "github" } ], - "time": "2024-10-15T19:35:06+00:00" + "time": "2024-11-28T15:35:31+00:00" }, { "name": "livewire/volt", @@ -6861,31 +6865,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.5" + "symfony/console": "^7.1.8" }, "require-dev": { - "illuminate/console": "^11.28.0", - "laravel/pint": "^1.18.1", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", "mockery/mockery": "^1.6.12", "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.5", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -6928,7 +6932,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -6944,7 +6948,7 @@ "type": "github" } ], - "time": "2024-10-15T16:15:16+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "nyholm/psr7", @@ -8171,16 +8175,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.5", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/36a03ff27986682c22985e56aabaf840dd173cb5", + "reference": "36a03ff27986682c22985e56aabaf840dd173cb5", "shasum": "" }, "require": { @@ -8207,12 +8211,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -8244,9 +8248,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.5" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2024-11-29T06:14:30+00:00" }, { "name": "qcod/laravel-gamify", @@ -8785,16 +8789,16 @@ }, { "name": "sentry/sentry-laravel", - "version": "4.10.0", + "version": "4.10.1", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "cbdd224cc5a224528bf6b19507ad76187b3bccfa" + "reference": "1c007fb111ff00f02efba2aca022310dae412c3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/cbdd224cc5a224528bf6b19507ad76187b3bccfa", - "reference": "cbdd224cc5a224528bf6b19507ad76187b3bccfa", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1c007fb111ff00f02efba2aca022310dae412c3a", + "reference": "1c007fb111ff00f02efba2aca022310dae412c3a", "shasum": "" }, "require": { @@ -8858,7 +8862,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.10.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.10.1" }, "funding": [ { @@ -8870,7 +8874,7 @@ "type": "custom" } ], - "time": "2024-11-07T08:05:24+00:00" + "time": "2024-11-24T11:02:20+00:00" }, { "name": "socialiteproviders/manager", @@ -9712,16 +9716,16 @@ }, { "name": "spatie/laravel-medialibrary", - "version": "11.10.0", + "version": "11.10.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "39b7b54a690ffd7caf5c37cd2afc8798c21e29da" + "reference": "33c8406b9274af743f78057ae72065ef40a72073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/39b7b54a690ffd7caf5c37cd2afc8798c21e29da", - "reference": "39b7b54a690ffd7caf5c37cd2afc8798c21e29da", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/33c8406b9274af743f78057ae72065ef40a72073", + "reference": "33c8406b9274af743f78057ae72065ef40a72073", "shasum": "" }, "require": { @@ -9805,7 +9809,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/11.10.0" + "source": "https://github.com/spatie/laravel-medialibrary/tree/11.10.1" }, "funding": [ { @@ -9817,7 +9821,7 @@ "type": "github" } ], - "time": "2024-11-08T15:48:58+00:00" + "time": "2024-11-21T15:57:39+00:00" }, { "name": "spatie/laravel-package-tools", @@ -10448,16 +10452,16 @@ }, { "name": "symfony/clock", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { @@ -10502,7 +10506,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.6" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -10518,20 +10522,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", "shasum": "" }, "require": { @@ -10595,7 +10599,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.8" + "source": "https://github.com/symfony/console/tree/v7.2.0" }, "funding": [ { @@ -10611,20 +10615,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -10660,7 +10664,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -10676,20 +10680,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -10727,7 +10731,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -10743,7 +10747,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/dom-crawler", @@ -10814,16 +10818,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", "shasum": "" }, "require": { @@ -10869,7 +10873,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.0" }, "funding": [ { @@ -10885,20 +10889,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-11-05T15:35:02+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -10949,7 +10953,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -10965,20 +10969,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -11025,7 +11029,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -11041,20 +11045,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { @@ -11089,7 +11093,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -11105,7 +11109,7 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/html-sanitizer", @@ -11178,26 +11182,27 @@ }, { "name": "symfony/http-client", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a" + "reference": "955e43336aff03df1e8a8e17daefabb0127a313b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a", - "reference": "c30d91a1deac0dc3ed5e604683cf2e1dfc635b8a", + "url": "https://api.github.com/repos/symfony/http-client/zipball/955e43336aff03df1e8a8e17daefabb0127a313b", + "reference": "955e43336aff03df1e8a8e17daefabb0127a313b", "shasum": "" }, "require": { "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", + "symfony/http-client-contracts": "~3.4.3|^3.5.1", "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "amphp/amp": "<2.5", "php-http/discovery": "<1.15", "symfony/http-foundation": "<6.4" }, @@ -11208,14 +11213,14 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", "amphp/socket": "^1.1", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", + "symfony/amphp-http-client-meta": "^1.0|^2.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", "symfony/messenger": "^6.4|^7.0", @@ -11252,7 +11257,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.8" + "source": "https://github.com/symfony/http-client/tree/v7.2.0" }, "funding": [ { @@ -11268,20 +11273,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:40:27+00:00" + "time": "2024-11-29T08:22:02+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/c2f3ad828596624ca39ea40f83617ef51ca8bbf9", + "reference": "c2f3ad828596624ca39ea40f83617ef51ca8bbf9", "shasum": "" }, "require": { @@ -11330,7 +11335,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.1" }, "funding": [ { @@ -11346,24 +11351,25 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-11-25T12:02:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112" + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4419ec69ccfc3f725a4de7c20e4e57626d10112", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -11407,7 +11413,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.8" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -11423,20 +11429,20 @@ "type": "tidelift" } ], - "time": "2024-11-09T09:16:45+00:00" + "time": "2024-11-13T18:58:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e" + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", "shasum": "" }, "require": { @@ -11465,7 +11471,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -11493,7 +11499,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -11521,7 +11527,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.8" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.0" }, "funding": [ { @@ -11537,20 +11543,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T14:25:32+00:00" + "time": "2024-11-29T08:42:40+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { @@ -11559,7 +11565,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -11601,7 +11607,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -11617,25 +11623,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "b0117bf42b6dd8dfcfcab2a7e18508b594520b5a" + "reference": "3c1dfd9ff0a487a4116baec42d11ae21a061e3f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/b0117bf42b6dd8dfcfcab2a7e18508b594520b5a", - "reference": "b0117bf42b6dd8dfcfcab2a7e18508b594520b5a", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/3c1dfd9ff0a487a4116baec42d11ae21a061e3f1", + "reference": "3c1dfd9ff0a487a4116baec42d11ae21a061e3f1", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/mailer": "^6.4|^7.0" + "symfony/mailer": "^7.2" }, "conflict": { "symfony/http-foundation": "<6.4" @@ -11670,7 +11676,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailgun-mailer/tree/v7.2.0" }, "funding": [ { @@ -11686,20 +11692,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-28T08:24:38+00:00" }, { "name": "symfony/mime", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", "shasum": "" }, "require": { @@ -11754,7 +11760,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.6" + "source": "https://github.com/symfony/mime/tree/v7.2.0" }, "funding": [ { @@ -11770,20 +11776,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-11-23T09:19:39+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/85e95eeede2d41cd146146e98c9c81d9214cae85", - "reference": "85e95eeede2d41cd146146e98c9c81d9214cae85", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { @@ -11821,7 +11827,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.6" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -11837,7 +11843,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/polyfill-ctype", @@ -12477,16 +12483,16 @@ }, { "name": "symfony/process", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -12518,7 +12524,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.8" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -12534,20 +12540,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6" + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/f16471bb19f6685b9ccf0a2c03c213840ae68cd6", - "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", "shasum": "" }, "require": { @@ -12601,7 +12607,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.6" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" }, "funding": [ { @@ -12617,20 +12623,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-26T08:57:56+00:00" }, { "name": "symfony/routing", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -12682,7 +12688,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.6" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -12698,20 +12704,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -12765,7 +12771,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -12781,20 +12787,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -12852,7 +12858,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.8" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -12868,24 +12874,25 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:21+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -12946,7 +12953,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -12962,20 +12969,20 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2024-11-12T20:47:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -13024,7 +13031,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -13040,20 +13047,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -13098,7 +13105,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.6" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -13114,20 +13121,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -13143,7 +13150,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -13181,7 +13188,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -13197,7 +13204,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:46:42+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -13403,16 +13410,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -13437,7 +13444,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -13449,7 +13456,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -13473,7 +13480,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -13821,16 +13828,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.24.0", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "a136842a532bac9ecd8a1c723852b09915d7db50" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/a136842a532bac9ecd8a1c723852b09915d7db50", - "reference": "a136842a532bac9ecd8a1c723852b09915d7db50", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -13878,9 +13885,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.24.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2024-11-07T15:11:20+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "fidry/cpu-core-counter", @@ -14067,16 +14074,16 @@ }, { "name": "larastan/larastan", - "version": "v3.0.0", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "88f46e3f2cd9d2a14dba13ef293b822a75832e62" + "reference": "b2e24e1605cff1d1097ccb6fb8af3bbd1dfe1c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/88f46e3f2cd9d2a14dba13ef293b822a75832e62", - "reference": "88f46e3f2cd9d2a14dba13ef293b822a75832e62", + "url": "https://api.github.com/repos/larastan/larastan/zipball/b2e24e1605cff1d1097ccb6fb8af3bbd1dfe1c6f", + "reference": "b2e24e1605cff1d1097ccb6fb8af3bbd1dfe1c6f", "shasum": "" }, "require": { @@ -14090,7 +14097,7 @@ "illuminate/support": "^11.15.0", "php": "^8.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^2.0.0" + "phpstan/phpstan": "^2.0.2" }, "require-dev": { "doctrine/coding-standard": "^12.0", @@ -14107,13 +14114,13 @@ }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -14148,7 +14155,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v3.0.0" + "source": "https://github.com/larastan/larastan/tree/v3.0.2" }, "funding": [ { @@ -14156,20 +14163,20 @@ "type": "github" } ], - "time": "2024-11-15T09:38:34+00:00" + "time": "2024-11-26T23:15:21+00:00" }, { "name": "laravel/breeze", - "version": "v2.2.5", + "version": "v2.2.6", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "e698f651ac55920fd2ee1336c3c6cdd2467ea784" + "reference": "907b12160d1b8b8213e7e2e011987fffb5567edc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/e698f651ac55920fd2ee1336c3c6cdd2467ea784", - "reference": "e698f651ac55920fd2ee1336c3c6cdd2467ea784", + "url": "https://api.github.com/repos/laravel/breeze/zipball/907b12160d1b8b8213e7e2e011987fffb5567edc", + "reference": "907b12160d1b8b8213e7e2e011987fffb5567edc", "shasum": "" }, "require": { @@ -14181,8 +14188,9 @@ "symfony/console": "^7.0" }, "require-dev": { - "orchestra/testbench": "^9.0", - "phpstan/phpstan": "^1.10" + "laravel/framework": "^11.0", + "orchestra/testbench-core": "^9.0", + "phpstan/phpstan": "^2.0" }, "type": "library", "extra": { @@ -14216,20 +14224,20 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2024-11-12T14:56:47+00:00" + "time": "2024-11-20T15:01:15+00:00" }, { "name": "laravel/pint", - "version": "v1.18.1", + "version": "v1.18.3", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", "shasum": "" }, "require": { @@ -14240,13 +14248,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", "laravel-zero/framework": "^10.4.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" }, "bin": [ "builds/pint" @@ -14282,7 +14290,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-09-24T17:22:50+00:00" + "time": "2024-11-26T15:34:00+00:00" }, { "name": "mockery/mockery", @@ -15121,16 +15129,16 @@ }, { "name": "phpstan/phpstan", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82" + "reference": "46b4d3529b12178112d9008337beda0cc2a1a6b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6c98c7600fc717b2c78c11ef60040d5b1e359c82", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/46b4d3529b12178112d9008337beda0cc2a1a6b4", + "reference": "46b4d3529b12178112d9008337beda0cc2a1a6b4", "shasum": "" }, "require": { @@ -15175,7 +15183,7 @@ "type": "github" } ], - "time": "2024-11-17T14:17:00+00:00" + "time": "2024-11-28T22:19:37+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/config/lcm.php b/config/lcm.php index eda80e6c..bc0c0c24 100644 --- a/config/lcm.php +++ b/config/lcm.php @@ -26,6 +26,8 @@ 'web_hook' => env('SLACK_WEBHOOK_URL', ''), ], + 'supported_locales' => ['fr', 'en'], + 'spa_url' => env('FRONTEND_APP_URL', 'http://localhost:4200'), 'notch-pay-public-token' => env('NOTCHPAY_PUBLIC_KEY', null), diff --git a/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php b/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php new file mode 100644 index 00000000..c1f976ae --- /dev/null +++ b/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php @@ -0,0 +1,30 @@ +tables as $tab) { + Schema::table($tab, function (Blueprint $table): void { + $table->string('locale')->default('fr'); + }); + } + } + + public function down(): void + { + foreach ($this->tables as $tab) { + Schema::table($tab, function (Blueprint $table): void { + $table->dropColumn('locale'); + }); + } + } +}; diff --git a/lang/en/pages/article.php b/lang/en/pages/article.php index 044645cb..89fa22ca 100644 --- a/lang/en/pages/article.php +++ b/lang/en/pages/article.php @@ -5,7 +5,7 @@ return [ 'title' => 'Laravel Cameroon Blog', - 'blog' => 'Le Blog de Laravel Cameroun', + 'blog' => 'The Laravel Cameroon Blog', 'blog_summary' => 'All the latest articles, tips and tutorials published just for you.', 'about_author' => 'About author', 'next_article' => 'Next article', diff --git a/lang/en/pages/auth.php b/lang/en/pages/auth.php index acfc225a..31426b4b 100644 --- a/lang/en/pages/auth.php +++ b/lang/en/pages/auth.php @@ -23,15 +23,15 @@ 'heading' => 'Open your mind and discover new horizons.', 'quote' => 'A lone developer is like an isolated node—limited in reach, influence, and growth. Just as software thrives on interconnected components, so do developers flourish in the collaborative ecosystem of a community.', 'quote_authors' => 'by Andrew Hunt and David Thomas', + 'podcast' => 'Podcast', + 'podcast_description' => 'Follow podcasts on different topics with freelancers, developers, entrepreneurs, etc.', + 'discussion' => 'Discussions', + 'discussion_description' => 'Take part in open discussions and debates with several other participants.', + 'snippet' => 'Snippets code', + 'snippet_description' => 'Share source code for different languages to help other developers.', + 'premium' => 'Premium', + 'premium_description' => 'Become premium, support the community and access private content and source code.', ], - 'podcast' => 'Podcast', - 'podcast_description' => 'Follow podcasts on different topics with freelancers, developers, entrepreneurs, etc.', - 'discussion' => 'Discussions', - 'discussion_description' => 'Take part in open discussions and debates with several other participants.', - 'snippet' => 'Snippets code', - 'snippet_description' => 'Share source code for different languages to help other developers.', - 'premium' => 'Premium', - 'premium_description' => 'Become premium, support the community and access private content and source code.', ], 'forgot' => [ diff --git a/lang/en/pages/notification.php b/lang/en/pages/notification.php new file mode 100644 index 00000000..90e6d25a --- /dev/null +++ b/lang/en/pages/notification.php @@ -0,0 +1,17 @@ + 'You have no unread notifications.', + 'new_content' => 'Start new forum content ?', + 'choose_content' => 'Start by choosing the type of content you want to create.', + 'article_action' => 'Write an article', + 'share_content' => 'Share a tutorial or important information.', + 'start_discussion' => 'Start a discussion.', + 'start_discussion_description_text' => 'You\'d like to make a contribution.', + 'ask_help' => 'Ask for help', + 'ask_help_description' => 'Got a problem? Let\'s find a solution together.', + +]; diff --git a/lang/en/pages/privacy.php b/lang/en/pages/privacy.php new file mode 100644 index 00000000..d4dbc39b --- /dev/null +++ b/lang/en/pages/privacy.php @@ -0,0 +1,42 @@ + 'Privacy policy', + 'first_description' => 'This page is used to inform website visitors of our policies regarding the collection, use and disclosure of personal information if someone decides to use our service, the Laravel Cameroun website.', + 'second_description' => 'If you choose to use our Service, you consent to the collection and use of information in connection with this policy. The personal information we collect is used to provide and improve the Service. We will not use or share your information with anyone except as described in this Privacy Policy.', + + 'use_share_information' => [ + 'title' => 'Collecting, using and sharing information', + 'first_paragraph' => 'For a better experience when using our service, we may ask you to provide certain personally identifiable information, including, but not limited to, your name, telephone number and mailing address. The information we collect will be used to contact or identify you.', + ], + 'cookies' => [ + 'title' => 'Cookies', + 'first_paragraph' => 'Cookies are files containing a small amount of data that are commonly used as an anonymous unique identifier. They are sent to your browser from the website you are visiting and stored on your computer\'s hard drive.', + 'second_paragraph' => 'Our website uses these “cookies” to collect information and improve our service. You have the option of accepting or rejecting these cookies and of knowing when a cookie is being sent to your computer. If you choose to reject our cookies, you may not be able to use certain parts of our service.', + ], + 'security' => [ + 'title' => 'Security', + 'first_paragraph' => 'We value your trust in providing us with your personal information, so we strive to use commercially acceptable means to protect it. But please remember that no method of transmission over the Internet or method of electronic storage is 100% secure or reliable, and we cannot guarantee its absolute security.', + + ], + 'create_account' => [ + 'title' => 'Create an account', + 'description' => 'To use this website, a user must first complete the registration form. When registering, a user is required to provide certain information (such as name and e-mail address). This information is used to contact you about products/services on our site in which you have expressed an interest. At your option, you may also provide demographic information (such as gender or links to your social accounts) about yourself, but this is not mandatory.', + ], + 'content_to_others_website' => [ + 'title' => 'Content to other sites', + 'description' => 'Our service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Please note that these external sites are not operated by us. Therefore, we strongly advise you to consult the privacy policy of these websites. We have no control over, and assume no responsibility for, the content, privacy policies or practices of any third-party site or service.', + ], + 'updated' => [ + 'title' => 'Update', + 'description' => 'We may update our privacy policy from time to time. Therefore, we advise you to check this page regularly for any changes. We will notify you of any changes by posting the new privacy policy on this page. Such changes will take effect immediately upon posting on this page.', + ], + 'contact' => [ + 'title' => 'Contact', + 'description' => 'If you feel that we are not abiding by this privacy policy, you should contact us immediately by email at support@laravel.cm.', + ], + +]; diff --git a/lang/fr/pages/article.php b/lang/fr/pages/article.php index 0780602d..f5fdfb13 100644 --- a/lang/fr/pages/article.php +++ b/lang/fr/pages/article.php @@ -5,7 +5,7 @@ return [ 'title' => 'Blog Laravel Cameroun', - 'blog' => 'The Laravel Cameroon Blog', + 'blog' => 'Le Blog de Laravel Cameroun', 'blog_summary' => 'Tous les articles, tips et tutoriels récemment publiés juste pour vous.', 'about_author' => 'À propos de l’auteur', 'next_article' => 'Article suivant', diff --git a/lang/fr/pages/auth.php b/lang/fr/pages/auth.php index 39b4bfdb..38128cd7 100644 --- a/lang/fr/pages/auth.php +++ b/lang/fr/pages/auth.php @@ -37,9 +37,7 @@ 'forgot' => [ 'page_title' => 'Mot de passe oublié', 'title' => 'Réinitialisation du mot de passe', - 'description' => "Mot de passe oublié ? Aucun problème. Communiquez-nous simplement votre adresse e-mail et nous vous - enverrons par e-mail un lien de réinitialisation de mot de passe qui vous permettra d'en choisir un - nouveau.", + 'description' => "Mot de passe oublié ? Aucun problème. Communiquez-nous simplement votre adresse e-mail et nous vous enverrons par e-mail un lien de réinitialisation de mot de passe qui vous permettra d'en choisir un nouveau.", ], 'reset' => [ @@ -49,9 +47,7 @@ 'verify' => [ 'page_title' => "Vérification de l'adresse e-mail", - 'description' => "Merci pour votre inscription ! Avant de commencer, pourriez-vous vérifier votre adresse e-mail en - cliquant sur le lien que nous venons de vous envoyer par e-mail ? Si vous n'avez pas reçu l'e-mail, nous - nous ferons un plaisir de vous en envoyer un autre.", + 'description' => "Merci pour votre inscription ! Avant de commencer, pourriez-vous vérifier votre adresse e-mail en cliquant sur le lien que nous venons de vous envoyer par e-mail ? Si vous n'avez pas reçu l'e-mail, nous nous ferons un plaisir de vous en envoyer un autre.", 'success' => "Un nouveau lien de vérification a été envoyé à l'adresse e-mail que vous avez fournie lors de l'inscription ou la modification de votre adresse.", 'submit' => "Renvoyer l'e-mail de vérification", ], diff --git a/lang/fr/pages/notification.php b/lang/fr/pages/notification.php new file mode 100644 index 00000000..dc72deaf --- /dev/null +++ b/lang/fr/pages/notification.php @@ -0,0 +1,17 @@ + 'Vous n\'avez pas de notifications non lues.', + 'new_content' => 'Lancer un nouveau contenu forum ?', + 'choose_content' => ' Commencer par choisir quel type de contenu vous voulez créer.', + 'article_action' => 'Rédiger un article', + 'share_content' => 'Partager un tutoriel ou une information importante.', + 'start_discussion' => ' Démarrer une discussion', + 'start_discussion_description_text' => 'Vous souhaitez apporter une pierre à l\'édifice.', + 'ask_help' => 'Demander de l\'aide', + 'ask_help_description' => ' Vous avez un problème ? Trouvons ensemble une solution.', + +]; diff --git a/lang/fr/pages/privacy.php b/lang/fr/pages/privacy.php new file mode 100644 index 00000000..f2d9290d --- /dev/null +++ b/lang/fr/pages/privacy.php @@ -0,0 +1,42 @@ + 'Politique de confidentialité', + 'first_description' => 'Cette page est utilisée pour informer les visiteurs du site Web de nos politiques concernant la collecte, l\'utilisation et la divulgation des informations personnelles si quelqu\'un décide d\'utiliser notre service, le site Web de Laravel Cameroun.', + 'second_description' => 'Si vous choisissez d\'utiliser notre Service, vous acceptez la collecte et l\'utilisation d\'informations en relation avec cette politique. Les informations personnelles que nous collectons sont utilisées pour fournir et améliorer le service. Nous n\'utiliserons ni ne partagerons vos informations avec personne, sauf comme décrit dans la présente politique de confidentialité.', + + 'use_share_information' => [ + 'title' => 'Collecte, utilisation et partage des informations', + 'first_paragraph' => 'Pour une meilleure expérience lors de l\'utilisation de notre service, nous pouvons vous demander de nous fournir certaines informations personnellement identifiables, y compris, mais sans s\'y limiter, votre nom, numéro de téléphone et adresse postale. Les informations que nous collectons seront utilisées pour vous contacter ou vous identifier.', + ], + 'cookies' => [ + 'title' => 'Cookies', + 'first_paragraph' => 'Les cookies sont des fichiers contenant une petite quantité de données qui sont couramment utilisés comme identifiant unique anonyme. Celles-ci sont envoyées à votre navigateur à partir du site Web que vous visitez et sont stockées sur le disque dur de votre ordinateur.', + 'second_paragraph' => 'Notre site Web utilise ces « cookies » pour collecter des informations et améliorer notre service. Vous avez la possibilité d\'accepter ou de refuser ces cookies et de savoir quand un cookie est envoyé à votre ordinateur. Si vous choisissez de refuser nos cookies, vous ne pourrez peut-être pas utiliser certaines parties de notre service.', + ], + 'security' => [ + 'title' => 'Sécurité', + 'first_paragraph' => 'Nous apprécions votre confiance en nous fournissant vos informations personnelles, nous nous efforçons donc d\'utiliser des moyens commercialement acceptables pour les protéger. Mais rappelez-vous qu\'aucune méthode de transmission sur Internet ou méthode de stockage électronique n\'est sûre et fiable à 100%, et nous ne pouvons garantir sa sécurité absolue.', + + ], + 'create_account' => [ + 'title' => 'Création de compte', + 'description' => 'Pour utiliser ce site Web, un utilisateur doit d\'abord remplir le formulaire d\'inscription. Lors de l\'inscription, un utilisateur est tenu de fournir certaines informations (telles que le nom et l\'adresse e-mail). Ces informations sont utilisées pour vous contacter au sujet des produits / services sur notre site pour lesquels vous avez manifesté votre intérêt. À votre choix, vous pouvez également fournir des informations démographiques (telles que le sexe ou liens vers vos comptes sociaux) vous concernant, mais elles ne sont pas obligatoires.', + ], + 'content_to_others_website' => [ + 'title' => 'Contenu vers d\'autres sites', + 'description' => 'Notre service peut contenir des liens vers d\'autres sites. Si vous cliquez sur un lien tiers, vous serez dirigé vers ce site. Notez que ces sites externes ne sont pas exploités par nous. Par conséquent, nous vous conseillons fortement de consulter la politique de confidentialité de ces sites Web. Nous n\'avons aucun contrôle sur, et n\'assumons aucune responsabilité pour le contenu, les politiques de confidentialité ou les pratiques de tout site ou service tiers.', + ], + 'updated' => [ + 'title' => 'Mise à jour', + 'description' => 'Nous pouvons mettre à jour notre politique de confidentialité de temps en temps. Ainsi, nous vous conseillons de consulter régulièrement cette page pour tout changement. Nous vous informerons de tout changement en publiant la nouvelle politique de confidentialité sur cette page. Ces modifications prennent effet immédiatement après leur publication sur cette page.', + ], + 'contact' => [ + 'title' => 'Contact', + 'description' => 'Si vous pensez que nous ne respectons pas cette politique de confidentialité, vous devez nous contacter immédiatement par e-mail à support@laravel.cm', + ], + +]; diff --git a/resources/views/components/layouts/footer.blade.php b/resources/views/components/layouts/footer.blade.php index c8022351..ddfb6353 100644 --- a/resources/views/components/layouts/footer.blade.php +++ b/resources/views/components/layouts/footer.blade.php @@ -53,19 +53,22 @@ class="ml-2 size-6 rounded-full" {{ __('global.joins_us.description') }}
-Vous n'avez pas de notifications non lues.
+{{ __('pages/notification.empty') }}
- Commencer par choisir quel type de contenu vous voulez créer. + {{ __('pages/notification.choose_content') }}
- Partager un tutoriel ou une information importante. + {{ __('pages/notification.share_content') }}
- Vous souhaitez apporter une pierre à l'édifice. + {{ __('pages/notification.start_discussion_description_text') }}
- Vous avez un problème ? Trouvons ensemble une solution. + {{ __('pages/notification.ask_help_description') }}
- Cette page est utilisée pour informer les visiteurs du site Web de nos politiques concernant la collecte, - l'utilisation et la divulgation des informations personnelles si quelqu'un décide d'utiliser notre service, - le site Web de Laravel Cameroun. + {{ __('pages/privacy.first_description') }}
- Si vous choisissez d'utiliser notre Service, vous acceptez la collecte et l'utilisation d'informations en - relation avec cette politique. Les informations personnelles que nous collectons sont utilisées pour fournir - et améliorer le service. Nous n'utiliserons ni ne partagerons vos informations avec personne, sauf comme - décrit dans la présente politique de confidentialité. + {{ __('pages/privacy.second_description') }}
-- Pour une meilleure expérience lors de l'utilisation de notre service, nous pouvons vous demander de nous - fournir certaines informations personnellement identifiables, y compris, mais sans s'y limiter, votre nom, - numéro de téléphone et adresse postale. Les informations que nous collectons seront utilisées pour vous - contacter ou vous identifier. + {{ __('pages/privacy.use_share_information.first_paragraph') }}
-- Les cookies sont des fichiers contenant une petite quantité de données qui sont couramment utilisés comme - identifiant unique anonyme. Celles-ci sont envoyées à votre navigateur à partir du site Web que vous visitez - et sont stockées sur le disque dur de votre ordinateur. + {{ __('pages/privacy.cookies.first_paragraph') }}
- Notre site Web utilise ces « cookies » pour collecter des informations et améliorer notre service. Vous avez - la possibilité d'accepter ou de refuser ces cookies et de savoir quand un cookie est envoyé à votre - ordinateur. Si vous choisissez de refuser nos cookies, vous ne pourrez peut-être pas utiliser certaines - parties de notre service. + {{ __('pages/privacy.cookies.second_paragraph') }}
-- Nous apprécions votre confiance en nous fournissant vos informations personnelles, nous nous efforçons donc - d'utiliser des moyens commercialement acceptables pour les protéger. Mais rappelez-vous qu'aucune méthode de - transmission sur Internet ou méthode de stockage électronique n'est sûre et fiable à 100%, et nous ne - pouvons garantir sa sécurité absolue. + {{ __('pages/privacy.security.first_paragraph') }}
-- Pour utiliser ce site Web, un utilisateur doit d'abord remplir le formulaire d'inscription. Lors de - l'inscription, un utilisateur est tenu de fournir certaines informations (telles que le nom et l'adresse - e-mail). Ces informations sont utilisées pour vous contacter au sujet des produits / services sur notre site - pour lesquels vous avez manifesté votre intérêt. À votre choix, vous pouvez également fournir des - informations démographiques (telles que le sexe ou liens vers vos comptes sociaux) vous concernant, mais - elles ne sont pas obligatoires. + {{ __('pages/privacy.create_account.description') }}
-- Notre service peut contenir des liens vers d'autres sites. Si vous cliquez sur un lien tiers, vous serez - dirigé vers ce site. Notez que ces sites externes ne sont pas exploités par nous. Par conséquent, nous vous - conseillons fortement de consulter la politique de confidentialité de ces sites Web. Nous n'avons aucun - contrôle sur, et n'assumons aucune responsabilité pour le contenu, les politiques de confidentialité ou les - pratiques de tout site ou service tiers. + {{ __('pages/privacy.content_to_others_website.description') }}
-- Nous pouvons mettre à jour notre politique de confidentialité de temps en temps. Ainsi, nous vous - conseillons de consulter régulièrement cette page pour tout changement. Nous vous informerons de tout - changement en publiant la nouvelle politique de confidentialité sur cette page. Ces modifications prennent - effet immédiatement après leur publication sur cette page. + {{ __('pages/privacy.updated.description') }}
-- Si vous pensez que nous ne respectons pas cette politique de confidentialité, vous devez nous contacter - immédiatement par e-mail à support@laravel.cm + {{ __('pages/privacy.contact.description') }}