diff --git a/.env.example b/.env.example index 1bec7794..fd6377df 100644 --- a/.env.example +++ b/.env.example @@ -76,3 +76,8 @@ SENTRY_LARAVEL_DSN= SENTRY_TRACES_SAMPLE_RATE= NOTCHPAY_PUBLIC_KEY= + +TWITTER_CONSUMER_KEY=your-consumer-key +TWITTER_CONSUMER_SECRET=your-consumer-secret +TWITTER_ACCESS_TOKEN=your-accesss_token +TWITTER_ACCESS_SECRET=your-access-token-secret diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 0adc327f..6e4582f6 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: 👀 Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: 🪄 Setup uses: ./.github/actions/setup - name: 🔮 Install Composer Dependencies @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: 👀 Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: 🪄 Setup uses: ./.github/actions/setup - name: 🔮 Install Composer Dependencies @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: 👀 Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: 🪄 Setup uses: ./.github/actions/setup - name: 🕵️‍♂️ Run Composer Validate diff --git a/.gitignore b/.gitignore index b3f5acc2..999f728e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ npm-debug.log yarn-error.log yarn.lock - /vendor composer.phar diff --git a/app/Console/Commands/PostArticleToTwitter.php b/app/Console/Commands/PostArticleToTwitter.php index 32110fee..ba59b28a 100644 --- a/app/Console/Commands/PostArticleToTwitter.php +++ b/app/Console/Commands/PostArticleToTwitter.php @@ -17,12 +17,10 @@ final class PostArticleToTwitter extends Command public function handle(AnonymousNotifiable $notifiable): void { - if (app()->environment('production')) { - if ($article = Article::nextForSharing()) { - $notifiable->notify(new PostArticleToTwitterNotification($article)); - - $article->markAsShared(); - } + if ($article = Article::nextForSharing()) { + $notifiable->notify(new PostArticleToTwitterNotification($article)); + + $article->markAsShared(); } } -} +} \ No newline at end of file diff --git a/app/Filament/Resources/ChannelResource.php b/app/Filament/Resources/ChannelResource.php new file mode 100644 index 00000000..8cf56117 --- /dev/null +++ b/app/Filament/Resources/ChannelResource.php @@ -0,0 +1,104 @@ +schema([ + Forms\Components\Section::make() + ->schema([ + Forms\Components\TextInput::make('name') + ->required() + ->live(onBlur: true) + ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { + $set('slug', Str::slug($state)); + }), + Forms\Components\TextInput::make('slug') + ->readOnly() + ->helperText(__('Cette valeur est générée dynamiquement en fonction du Name.')), + Forms\Components\Select::make('parent_id') + ->relationship('parent', 'name', fn (Builder $query) => $query->whereNull('parent_id')) + ->default(null), + Forms\Components\TextInput::make('color') + ->maxLength(255) + ->type('color'), + Forms\Components\Textarea::make('description.fr') + ->label('Description') + ->columnSpanFull(), + ]) + ->columnSpan(['lg' => 2]), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('name') + ->searchable(), + Tables\Columns\TextColumn::make('slug') + ->searchable(), + Tables\Columns\TextColumn::make('parent.name') + ->numeric() + ->sortable(), + Tables\Columns\TextColumn::make('thread_number') + ->label('Nombre de thead') + ->getStateUsing(fn ($record) => $record->threads()->count()), + Tables\Columns\TextColumn::make('color') + ->searchable(), + Tables\Columns\TextColumn::make('created_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->filters([ + + ]) + ->actions([ + ActionGroup::make([ + Tables\Actions\DeleteAction::make(), + Tables\Actions\EditAction::make() + ->slideOver() + ->modalWidth(MaxWidth::Large), + ]), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListChannels::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/ChannelResource/Pages/ListChannels.php b/app/Filament/Resources/ChannelResource/Pages/ListChannels.php new file mode 100644 index 00000000..077d704b --- /dev/null +++ b/app/Filament/Resources/ChannelResource/Pages/ListChannels.php @@ -0,0 +1,24 @@ +slideOver() + ->modalWidth(MaxWidth::Large), + ]; + } +} diff --git a/app/Filament/Resources/TagResource.php b/app/Filament/Resources/TagResource.php new file mode 100644 index 00000000..2bb2a12c --- /dev/null +++ b/app/Filament/Resources/TagResource.php @@ -0,0 +1,92 @@ +schema([ + Forms\Components\TextInput::make('name') + ->live(onBlur: true) + ->required() + ->unique() + ->validationMessages([ + 'unique' => 'Cette valeur existe déjà', + ]) + ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { + $set('slug', Str::slug($state)); + }) + ->columnSpanFull(), + Forms\Components\TextInput::make('slug') + ->readOnly() + ->required() + ->helperText(__('Cette valeur est générée dynamiquement en fonction du Name.')) + ->columnSpanFull(), + Select::make('concerns') + ->multiple() + ->options([ + 'post' => 'Post', + 'tutorial' => 'Tutoriel', + 'discussion' => 'Discussion', + ]) + ->required() + ->columnSpanFull(), + Forms\Components\Textarea::make('description') + ->columnSpanFull(), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('name') + ->searchable(), + Tables\Columns\TextColumn::make('slug') + ->searchable(), + Tables\Columns\TextColumn::make(name: 'concerns'), + ]) + ->filters([ + // + ]) + ->actions([ + \Filament\Tables\Actions\ActionGroup::make([ + Tables\Actions\DeleteAction::make(), + Tables\Actions\EditAction::make() + ->slideOver() + ->modalWidth(MaxWidth::Large), + ]), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListTags::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/TagResource/Pages/ListTags.php b/app/Filament/Resources/TagResource/Pages/ListTags.php new file mode 100644 index 00000000..d40fbf2b --- /dev/null +++ b/app/Filament/Resources/TagResource/Pages/ListTags.php @@ -0,0 +1,24 @@ +slideOver() + ->modalWidth(MaxWidth::Large), + ]; + } +} diff --git a/composer.json b/composer.json index e984ef41..2106f810 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "php": "^8.2", "ext-fileinfo": "*", "ext-json": "*", - "archtechx/laravel-seo": "^0.9", + "archtechx/laravel-seo": "^0.10", "arrilot/laravel-widgets": "^3.13.2", "blade-ui-kit/blade-heroicons": "^2.0", "cyrildewit/eloquent-viewable": "^7.0", @@ -21,7 +21,7 @@ "guzzlehttp/guzzle": "^7.7.0", "jenssegers/agent": "^2.6.4", "laravel-notification-channels/telegram": "^4.0", - "laravel-notification-channels/twitter": "^8.0", + "laravel-notification-channels/twitter": "^8.1", "laravel/framework": "^10.0", "laravel/sanctum": "^3.2.5", "laravel/slack-notification-channel": "^2.5", @@ -33,7 +33,7 @@ "livewire/volt": "^1.6", "mckenziearts/blade-untitledui-icons": "^1.3", "notchpay/notchpay-php": "^1.6", - "qcod/laravel-gamify": "1.0.7", + "qcod/laravel-gamify": "1.0.8", "ramsey/uuid": "^4.7.4", "sentry/sentry-laravel": "^3.7", "socialiteproviders/twitter": "^4.1.2", @@ -41,12 +41,12 @@ "spatie/laravel-feed": "^4.2.1", "spatie/laravel-google-fonts": "^1.2.3", "spatie/laravel-medialibrary": "^10.10.0", - "spatie/laravel-permission": "^5.10.1", + "spatie/laravel-permission": "^6.10.0", "spatie/laravel-sitemap": "^7.2.1", "spatie/laravel-translatable": "^6.8", "stevebauman/location": "^6.6.2", "symfony/http-client": "^6.3.1", - "symfony/mailgun-mailer": "^6.3", + "symfony/mailgun-mailer": "^7.1", "torchlight/torchlight-commonmark": "^0.5.5", "wire-elements/modal": "^2.0", "wire-elements/spotlight": "^2.0", diff --git a/composer.lock b/composer.lock index ebba4005..6d89e86f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "676bfee6284c52a07b36c680e3d569d5", + "content-hash": "562e88dc1318f556213369c52730ec26", "packages": [ { "name": "abraham/twitteroauth", @@ -995,29 +995,29 @@ }, { "name": "archtechx/laravel-seo", - "version": "v0.9.0", + "version": "v0.10.1", "source": { "type": "git", "url": "https://github.com/archtechx/laravel-seo.git", - "reference": "6d6903ad6254f854387de6c42f811f4d51561f23" + "reference": "76d0f9efac160e499daae2d1a79e2d09ca0daaae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/archtechx/laravel-seo/zipball/6d6903ad6254f854387de6c42f811f4d51561f23", - "reference": "6d6903ad6254f854387de6c42f811f4d51561f23", + "url": "https://api.github.com/repos/archtechx/laravel-seo/zipball/76d0f9efac160e499daae2d1a79e2d09ca0daaae", + "reference": "76d0f9efac160e499daae2d1a79e2d09ca0daaae", "shasum": "" }, "require": { - "illuminate/support": "^8.24|^9.0|^10.0", - "illuminate/view": "^8.24|^9.0|^10.0", - "php": "^8.0" + "illuminate/support": "^10.0|^11.0", + "illuminate/view": "^10.0|^11.0", + "php": "^8.2" }, "require-dev": { "intervention/image": "^2.7", - "nunomaduro/larastan": "^1.0|^2.4", - "orchestra/testbench": "^6.23|^7.0|^8.0", - "pestphp/pest": "^1.2|^2.0", - "pestphp/pest-plugin-laravel": "^1.0|^2.0" + "nunomaduro/larastan": "^2.4", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.0" }, "type": "library", "extra": { @@ -1047,9 +1047,9 @@ ], "support": { "issues": "https://github.com/archtechx/laravel-seo/issues", - "source": "https://github.com/archtechx/laravel-seo/tree/v0.9.0" + "source": "https://github.com/archtechx/laravel-seo/tree/v0.10.1" }, - "time": "2023-05-31T17:02:49+00:00" + "time": "2024-05-03T22:09:30+00:00" }, { "name": "arrilot/laravel-widgets", @@ -8881,26 +8881,29 @@ }, { "name": "qcod/laravel-gamify", - "version": "1.0.7", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/qcod/laravel-gamify.git", - "reference": "6eac88194fa1516ecc1d0cc6412ef20984503825" + "reference": "8e9c04085b79bcf016c7753900bf2932789bceee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/qcod/laravel-gamify/zipball/6eac88194fa1516ecc1d0cc6412ef20984503825", - "reference": "6eac88194fa1516ecc1d0cc6412ef20984503825", + "url": "https://api.github.com/repos/qcod/laravel-gamify/zipball/8e9c04085b79bcf016c7753900bf2932789bceee", + "reference": "8e9c04085b79bcf016c7753900bf2932789bceee", "shasum": "" }, "require": { - "laravel/framework": "~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0", - "php": "^7.3|^8.0" + "illuminate/contracts": "^8.83.27|^9.51.0|^10.0.0|^11.0", + "php": "^8.0", + "spatie/laravel-package-tools": "^1.12" }, "require-dev": { + "laravel/pint": "^1.5", "mockery/mockery": "^0.9.4 || ~1.0", - "orchestra/testbench": "~3.8|^4.0|^5.0|^7.0|^8.0", - "phpunit/phpunit": "~8.5|^9.0" + "orchestra/testbench": "^6.25.1|^7.22.0|^8.0.0|^9.0", + "pestphp/pest": "^1.23.1|^2.11", + "pestphp/pest-plugin-laravel": "^1.4|^2.1" }, "type": "library", "extra": { @@ -8943,9 +8946,9 @@ ], "support": { "issues": "https://github.com/qcod/laravel-gamify/issues", - "source": "https://github.com/qcod/laravel-gamify/tree/1.0.7" + "source": "https://github.com/qcod/laravel-gamify/tree/1.0.8" }, - "time": "2023-03-06T01:30:26+00:00" + "time": "2024-08-24T04:32:17+00:00" }, { "name": "ralouphie/getallheaders", @@ -10575,35 +10578,36 @@ }, { "name": "spatie/laravel-permission", - "version": "5.11.1", + "version": "6.10.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-permission.git", - "reference": "7090824cca57e693b880ce3aaf7ef78362e28bbd" + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/7090824cca57e693b880ce3aaf7ef78362e28bbd", - "reference": "7090824cca57e693b880ce3aaf7ef78362e28bbd", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704", "shasum": "" }, "require": { - "illuminate/auth": "^7.0|^8.0|^9.0|^10.0", - "illuminate/container": "^7.0|^8.0|^9.0|^10.0", - "illuminate/contracts": "^7.0|^8.0|^9.0|^10.0", - "illuminate/database": "^7.0|^8.0|^9.0|^10.0", - "php": "^7.3|^8.0" + "illuminate/auth": "^8.12|^9.0|^10.0|^11.0", + "illuminate/container": "^8.12|^9.0|^10.0|^11.0", + "illuminate/contracts": "^8.12|^9.0|^10.0|^11.0", + "illuminate/database": "^8.12|^9.0|^10.0|^11.0", + "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0", - "phpunit/phpunit": "^9.4", - "predis/predis": "^1.1" + "larastan/larastan": "^1.0|^2.0", + "laravel/passport": "^11.0|^12.0", + "orchestra/testbench": "^6.23|^7.0|^8.0|^9.0", + "phpunit/phpunit": "^9.4|^10.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.x-dev", - "dev-master": "5.x-dev" + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" }, "laravel": { "providers": [ @@ -10631,7 +10635,7 @@ "role": "Developer" } ], - "description": "Permission handling for Laravel 6.0 and up", + "description": "Permission handling for Laravel 8.0 and up", "homepage": "https://github.com/spatie/laravel-permission", "keywords": [ "acl", @@ -10645,7 +10649,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/5.11.1" + "source": "https://github.com/spatie/laravel-permission/tree/6.10.1" }, "funding": [ { @@ -10653,7 +10657,7 @@ "type": "github" } ], - "time": "2023-10-25T05:12:01+00:00" + "time": "2024-11-08T18:45:41+00:00" }, { "name": "spatie/laravel-sitemap", @@ -12239,28 +12243,28 @@ }, { "name": "symfony/mailgun-mailer", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "ad4e79798a5eb80af99004a4871b4fe5effe33a3" + "reference": "b0117bf42b6dd8dfcfcab2a7e18508b594520b5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/ad4e79798a5eb80af99004a4871b4fe5effe33a3", - "reference": "ad4e79798a5eb80af99004a4871b4fe5effe33a3", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/b0117bf42b6dd8dfcfcab2a7e18508b594520b5a", + "reference": "b0117bf42b6dd8dfcfcab2a7e18508b594520b5a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/mailer": "^5.4.21|^6.2.7|^7.0" + "php": ">=8.2", + "symfony/mailer": "^6.4|^7.0" }, "conflict": { - "symfony/http-foundation": "<6.2" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^6.3|^7.0", - "symfony/webhook": "^6.3|^7.0" + "symfony/http-client": "^6.4|^7.0", + "symfony/webhook": "^6.4|^7.0" }, "type": "symfony-mailer-bridge", "autoload": { @@ -12288,7 +12292,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.13" + "source": "https://github.com/symfony/mailgun-mailer/tree/v7.1.6" }, "funding": [ { @@ -12304,7 +12308,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/mime", @@ -15129,16 +15133,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -15177,7 +15181,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -15185,7 +15189,7 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nunomaduro/collision", diff --git a/config/services.php b/config/services.php index b2faa32f..032a45b8 100644 --- a/config/services.php +++ b/config/services.php @@ -44,8 +44,8 @@ 'client_id' => env('TWITTER_CLIENT_ID'), 'client_secret' => env('TWITTER_CLIENT_SECRET'), 'redirect' => env('TWITTER_REDIRECT'), - 'consumer_key' => env('TWITTER_CLIENT_ID'), - 'consumer_secret' => env('TWITTER_CLIENT_SECRET'), + 'consumer_key' => env('TWITTER_CONSUMER_KEY'), + 'consumer_secret' => env('TWITTER_CONSUMER_SECRET'), 'access_token' => env('TWITTER_ACCESS_TOKEN'), 'access_secret' => env('TWITTER_ACCESS_SECRET'), 'scopes' => [], diff --git a/lang/en/pages/auth.php b/lang/en/pages/auth.php index 1ff25e6c..acfc225a 100644 --- a/lang/en/pages/auth.php +++ b/lang/en/pages/auth.php @@ -16,7 +16,8 @@ 'page_title' => 'Create an account', 'join_us' => 'Join Laravel Cameroon', 'joins_description' => "Join nearly 1000 developers and designers. Because there's more to life than code.", - 'password_placeholder' => 'Password (min. 6 characters)', + 'password_placeholder' => 'Password (min. 8 characters)', + 'email_verification_status' => 'Please check your e-mail address to log in.', 'submit' => 'Create account', 'advantages' => [ 'heading' => 'Open your mind and discover new horizons.', diff --git a/lang/fr/pages/auth.php b/lang/fr/pages/auth.php index abb5da88..39b4bfdb 100644 --- a/lang/fr/pages/auth.php +++ b/lang/fr/pages/auth.php @@ -16,7 +16,8 @@ 'page_title' => 'Créer un compte', 'join_us' => 'Rejoindre Laravel Cameroun', 'joins_description' => 'Rejoignez près de 1000 développeurs et designers. Parce qu’il n y’a pas que le code dans la vie.', - 'password_placeholder' => 'Mot de passe (min. 6 caractères)', + 'password_placeholder' => 'Mot de passe (min. 8 caractères)', + 'email_verification_status' => 'Veuillez verifier votre email pour pouvoir vous connecter', 'submit' => 'Créer mon compte', 'advantages' => [ 'heading' => 'Ouvrez votre esprit pour découvrir de nouveaux horizons.', diff --git a/package.json b/package.json index 444a7db3..346d6891 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@alpinejs/intersect": "^3.6.1", "@awcodes/alpine-floating-ui": "^3.5.0", - "@ryangjchandler/alpine-tooltip": "^1.2.0", + "@ryangjchandler/alpine-tooltip": "^2.0.1", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.7", "@tailwindcss/typography": "^0.5.10", @@ -17,13 +17,13 @@ "autoprefixer": "^10.4.16", "highlight.js": "^11.7.0", "intl-tel-input": "^17.0.13", - "laravel-vite-plugin": "^0.7.8", + "laravel-vite-plugin": "^1.0.5", "lodash": "^4.17.19", "postcss": "^8.4.32", - "postcss-loader": "^6.2.1", + "postcss-loader": "^8.1.1", "postcss-preset-env": "^7.0.1", "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.14", + "prettier-plugin-tailwindcss": "^0.6.8", "tailwindcss": "^3.4.10", "tippy.js": "^6.3.7", "vite": "^5.4.6" diff --git a/resources/views/components/user/stats.blade.php b/resources/views/components/user/stats.blade.php index 898b784f..c963e792 100644 --- a/resources/views/components/user/stats.blade.php +++ b/resources/views/components/user/stats.blade.php @@ -44,7 +44,7 @@ {{ __('pages/account.dashboard.stats.experience') }}
- 0 + {{ $user->getPoints() }}