Просмотр исходного кода

Merge pull request #433 from 1day2die/referral_codes

Full Referral System
Dennis 3 лет назад
Родитель
Сommit
7eacc4863b

+ 19 - 2
README.md

@@ -6,7 +6,8 @@
 -   Audit Log
 -   Admin Dashboard
 -   User/Server Management
--   Store (credit system)
+-   Store (credit system with hourly billing and invoices)
+-   Customizable server plans
 -   Vouchers
 -   and so much more!
 
@@ -14,12 +15,13 @@
 
 ![controlpanel](https://user-images.githubusercontent.com/45005889/123518824-06b05000-d6a8-11eb-91b9-d1ed36bd2317.png)
 
+
 ![](https://img.shields.io/github/stars/ControlPanel-gg/dashboard) ![](https://img.shields.io/github/forks/ControlPanel-gg/dashboard) ![](https://img.shields.io/github/tag/ControlPanel-gg/dashboard) [![Crowdin](https://badges.crowdin.net/controlpanelgg/localized.svg)](https://crowdin.com/project/controlpanelgg) ![](https://img.shields.io/github/issues/ControlPanel-gg/dashboard) ![](https://img.shields.io/github/license/ControlPanel-gg/dashboard) ![](https://img.shields.io/discord/787829714483019826)
 ## About
 
 ControlPanel's Dashboard is a dashboard application designed to offer clients a management tool to manage their pterodactyl servers. This dashboard comes with a credit-based billing solution that credits users hourly for each server they have and suspends them if they run out of credits.
 
-This dashboard offers an easy to use and free billing solution for all starting and experienced hosting providers. This dashboard has many customization options and added discord 0auth verification to offer a solid link between your discord server and your dashboard.
+This dashboard offers an easy to use and free billing solution for all starting and experienced hosting providers. This dashboard has many customization options and added discord 0auth verification to offer a solid link between your discord server and your dashboard. You can check our Demo here ([Demo](https://demo.controlpanel.gg "Demo"))
 
 ### [Installation](https://controlpanel.gg/docs/intro "Installation")
 
@@ -30,3 +32,18 @@ This dashboard offers an easy to use and free billing solution for all starting
 ### [Contributing](https://controlpanel.gg/docs/Contributing/contributing "Contributing")
 
 ### [Donating](https://controlpanel.gg/docs/Contributing/donating "Donating")
+
+
+
+# Preview
+
+### Server Creation
+![image](https://user-images.githubusercontent.com/8725848/171575021-bc248f12-2aba-44e8-82aa-bdc907b1d3fc.png)
+
+### Overview
+![image](https://user-images.githubusercontent.com/8725848/171575809-7620ed4f-5715-420f-8c25-8bfa1c4342f7.png)
+
+### Example server products
+![image](https://user-images.githubusercontent.com/8725848/171575987-c1398ff6-83fa-4cb8-bd1f-986cee4da565.png)
+
+

+ 11 - 0
app/Classes/Settings/Misc.php

@@ -37,6 +37,11 @@ class Misc
             'mailencryption' => 'nullable|string',
             'mailfromadress' => 'nullable|string',
             'mailfromname' => 'nullable|string',
+            'enable_referral' => 'nullable|string',
+            'referral_reward' => 'nullable|numeric',
+            'referral_allowed' => 'nullable|string',
+            'referral_percentage' => 'nullable|numeric',
+            'referral_mode' => 'nullable|string',
         ]);
 
         if ($validator->fails()) {
@@ -69,6 +74,12 @@ class Misc
             "SETTINGS::MAIL:ENCRYPTION" => "mailencryption",
             "SETTINGS::MAIL:FROM_ADDRESS" => "mailfromadress",
             "SETTINGS::MAIL:FROM_NAME" => "mailfromname",
+            "SETTINGS::REFERRAL::ENABLED" => "enable_referral",
+            "SETTINGS::REFERRAL::REWARD" => "referral_reward",
+            "SETTINGS::REFERRAL::ALLOWED" => "referral_allowed",
+            "SETTINGS::REFERRAL:MODE" => "referral_mode",
+            "SETTINGS::REFERRAL:PERCENTAGE" => "referral_percentage"
+
 
         ];
 

+ 35 - 3
app/Http/Controllers/Admin/PaymentController.php

@@ -19,6 +19,8 @@ use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Storage;
 use LaravelDaily\Invoices\Classes\Buyer;
 use LaravelDaily\Invoices\Classes\InvoiceItem;
@@ -179,9 +181,19 @@ class PaymentController extends Controller
                 }
 
 
-                //update role
+                //update role give Referral-reward
                 if ($user->role == 'member') {
                     $user->update(['role' => 'client']);
+
+                    if(config("SETTINGS::REFERRAL:MODE") == "commission" && $shopProduct->type=="Credits"){
+                        if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()){
+                            $ref_user = User::findOrFail($ref_user->referral_id);
+                            $increment = number_format($shopProduct->quantity/100*config("SETTINGS::REFERRAL:PERCENTAGE"),0,"","");
+                            $ref_user->increment('credits', $increment);
+                        }
+
+                    }
+
                 }
 
                 //store payment
@@ -326,9 +338,19 @@ class PaymentController extends Controller
                     $user->increment('server_limit', $shopProduct->quantity);
                 }
 
-                //update role
+                //update role give Referral-reward
                 if ($user->role == 'member') {
                     $user->update(['role' => 'client']);
+
+                    if(config("SETTINGS::REFERRAL:MODE") == "commission" && $shopProduct->type=="Credits"){
+                        if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()){
+                            $ref_user = User::findOrFail($ref_user->referral_id);
+                            $increment = number_format($shopProduct->quantity/100*config("SETTINGS::REFERRAL:PERCENTAGE"),0,"","");
+                            $ref_user->increment('credits', $increment);
+                        }
+
+                    }
+
                 }
 
                 //store paid payment
@@ -431,9 +453,19 @@ class PaymentController extends Controller
                     $user->increment('server_limit', $shopProduct->quantity);
                 }
 
-                //update role
+                //update role give Referral-reward
                 if ($user->role == 'member') {
                     $user->update(['role' => 'client']);
+
+                    if(config("SETTINGS::REFERRAL:MODE") == "commission" && $shopProduct->type=="Credits"){
+                        if($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()){
+                            $ref_user = User::findOrFail($ref_user->referral_id);
+                            $increment = number_format($shopProduct->quantity/100*config("SETTINGS::REFERRAL:PERCENTAGE"),0,"","");
+                            $ref_user->increment('credits', $increment);
+                        }
+
+                    }
+
                 }
 
                 //update payment db entry status

+ 16 - 2
app/Http/Controllers/Admin/UserController.php

@@ -8,6 +8,7 @@ use App\Http\Controllers\Controller;
 use App\Models\Settings;
 use App\Models\User;
 use App\Notifications\DynamicNotification;
+use Illuminate\Support\Facades\DB;
 use Spatie\QueryBuilder\QueryBuilder;
 use Exception;
 use Illuminate\Contracts\Foundation\Application;
@@ -52,8 +53,18 @@ class UserController extends Controller
      */
     public function show(User $user)
     {
+        //QUERY ALL REFERRALS A USER HAS
+        //i am not proud of this at all.
+            $allReferals = array();
+            $referrals = DB::table("user_referrals")->where("referral_id","=",$user->id)->get();
+            foreach($referrals as $referral){
+                array_push($allReferals, $allReferals["id"] = User::query()->findOrFail($referral->registered_user_id));
+            }
+            array_pop($allReferals);
+
         return view('admin.users.show')->with([
-            'user' => $user
+            'user' => $user,
+            'referrals' => $allReferals
         ]);
     }
 
@@ -258,6 +269,9 @@ class UserController extends Controller
             ->addColumn('servers', function (User $user) {
                 return $user->servers->count();
             })
+            ->addColumn('referrals', function (User $user) {
+                return DB::table('user_referrals')->where("referral_id","=",$user->id)->count();
+            })
             ->addColumn('discordId', function (User $user) {
                 return $user->discordUser ? $user->discordUser->id : '';
             })
@@ -307,7 +321,7 @@ class UserController extends Controller
             ->orderColumn('last_seen', function ($query) {
                 $query->orderBy('last_seen', "desc");
             })
-            ->rawColumns(['avatar', 'name', 'credits', 'role', 'usage', 'actions', 'last_seen'])
+            ->rawColumns(['avatar', 'name', 'credits', 'role', 'usage', 'referrals', 'actions', 'last_seen'])
             ->make(true);
     }
 }

+ 36 - 0
app/Http/Controllers/Auth/RegisterController.php

@@ -6,9 +6,13 @@ use App\Classes\Pterodactyl;
 use App\Http\Controllers\Controller;
 use App\Models\Settings;
 use App\Models\User;
+use App\Notifications\ReferralNotification;
 use App\Providers\RouteServiceProvider;
+use Carbon\Carbon;
 use Illuminate\Foundation\Auth\RegistersUsers;
 use Illuminate\Support\Facades\App;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Hash;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Support\Str;
@@ -78,6 +82,18 @@ class RegisterController extends Controller
         return Validator::make($data, $validationRules);
     }
 
+    /**
+     * Create a unique Referral Code for User
+     * @return string
+     */
+    protected function createReferralCode(){
+        $referralcode = STR::random(8);
+        if (User::where('referral_code', '=', $referralcode)->exists()) {
+            $this->createReferralCode();
+        }
+        return $referralcode;
+    }
+
     /**
      * Create a new user instance after a valid registration.
      *
@@ -92,6 +108,8 @@ class RegisterController extends Controller
             'credits'      => config('SETTINGS::USER:INITIAL_CREDITS', 150),
             'server_limit' => config('SETTINGS::USER:INITIAL_SERVER_LIMIT', 1),
             'password'     => Hash::make($data['password']),
+            'referral_code' => $this->createReferralCode(),
+
         ]);
 
         $response = Pterodactyl::client()->post('/application/users', [
@@ -116,7 +134,25 @@ class RegisterController extends Controller
             'pterodactyl_id' => $response->json()['attributes']['id']
         ]);
 
+        //INCREMENT REFERRAL-USER CREDITS
+        if(!empty($data['referral_code'])){
+            $ref_code = $data['referral_code'];
+            $new_user = $user->id;
+            if($ref_user = User::query()->where('referral_code', '=', $ref_code)->first()) {
+                if(config("SETTINGS::REFERRAL:MODE" == "sign-up")) {
+                    $ref_user->increment('credits', config("SETTINGS::REFERRAL::REWARD"));
+                    $ref_user->notify(new ReferralNotification($ref_user->id, $new_user));
+                }
+                //INSERT INTO USER_REFERRALS TABLE
+                DB::table('user_referrals')->insert([
+                    'referral_id' => $ref_user->id,
+                    'registered_user_id' => $user->id,
+                    'created_at' =>  Carbon::now(),
+                    'updated_at' => Carbon::now()
+                ]);
+            }
 
+        }
 
         return $user;
     }

+ 2 - 1
app/Models/User.php

@@ -60,7 +60,8 @@ class User extends Authenticatable implements MustVerifyEmail
         'pterodactyl_id',
         'discord_verified_at',
         'avatar',
-        'suspended'
+        'suspended',
+        'referral_code'
     ];
 
     /**

+ 59 - 0
app/Notifications/ReferralNotification.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Notifications;
+
+use App\Models\User;
+use Illuminate\Bus\Queueable;
+use Illuminate\Notifications\Notification;
+use Illuminate\Support\Facades\Auth;
+
+class ReferralNotification extends Notification
+
+{
+    use Queueable;
+    /**
+     * @var User
+     */
+    private $user;
+
+    /**
+     * Create a new notification instance.
+     *
+     * @param User $user
+     */
+    public function __construct(int $user, int $ref_user)
+    {
+        $this->user = User::findOrFail($user);
+        $this->ref_user = User::findOrFail($ref_user);
+    }
+
+    /**
+     * Get the notification's delivery channels.
+     *
+     * @param mixed $notifiable
+     * @return array
+     */
+    public function via($notifiable)
+    {
+        return ['database'];
+    }
+
+    /**
+     * Get the array representation of the notification.
+     *
+     * @param mixed $notifiable
+     * @return array
+     */
+    public function toArray($notifiable)
+    {
+        return [
+            'title' => __("Someone registered using your Code!"),
+            'content' => "
+                <p>You received ".config('SETTINGS::REFERRAL::REWARD')." ".config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME')."</p>
+                <p>because ".$this->ref_user->name." registered with your Referral-Code!</p>
+                <p>Thank you very much for supporting us!.</p>
+                <p>".config('app.name', 'Laravel')."</p>
+            ",
+        ];
+    }
+}

+ 53 - 0
database/migrations/2022_06_02_081655_referral_code.php

@@ -0,0 +1,53 @@
+<?php
+
+use App\Models\User;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Support\Str;
+
+class ReferralCode extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->string('referral_code')->lenght(8)->nullable();
+        });
+
+        $existing_user = User::where('referral_code', '')->orWhere('referral_code', NULL)->get();
+
+        foreach ($existing_user as $user) {
+            $random = STR::random(8);
+            if (User::where('referral_code', '=', $random)->doesntExist()) {
+                DB::table("users")
+                    ->where("id", "=", $user->id)
+                    ->update(['referral_code' => $random]);
+            }else{
+                $random = STR::random(8);
+                DB::table("users")
+                    ->where("id", "=", $user->id)
+                    ->update(['referral_code' => $random]);
+            }
+        }
+    }
+
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('referral_code');
+        });
+    }
+
+}

+ 35 - 0
database/migrations/2022_06_02_091921_table-user-referrals.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class TableUserReferrals extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('user_referrals', function (Blueprint $table) {
+            $table->unsignedBigInteger('referral_id');
+            $table->unsignedBigInteger('registered_user_id');
+            $table->foreign('referral_id')->references('id')->on('users')->onDelete('cascade');;
+            $table->foreign('registered_user_id')->references('id')->on('users')->onDelete('cascade');;
+            $table->timestamps();
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('user_referrals');
+    }
+}

+ 35 - 0
database/seeders/Seeds/SettingsSeeder.php

@@ -465,5 +465,40 @@ class SettingsSeeder extends Seeder
             'type'  => 'string',
             'description'  => 'Mailer From Name'
         ]);
+        Settings::firstOrCreate([
+            'key'   => 'SETTINGS::REFERRAL::ENABLED',
+        ], [
+            'value' =>"true",
+            'type'  => 'string',
+            'description'  => 'Enable or disable the referral system'
+        ]);
+        Settings::firstOrCreate([
+            'key'   => 'SETTINGS::REFERRAL::REWARD',
+        ], [
+            'value' =>100,
+            'type'  => 'integer',
+            'description'  => 'Credit reward a user should receive when a user registers with his referral code'
+        ]);
+        Settings::firstOrCreate([
+            'key'   => 'SETTINGS::REFERRAL::ALLOWED',
+        ], [
+            'value' =>"client",
+            'type'  => 'string',
+            'description'  => 'Who should be allowed to to use the referral code. all/client'
+        ]);
+        Settings::firstOrCreate([
+            'key'   => 'SETTINGS::REFERRAL:MODE',
+        ], [
+            'value' =>"sign-up",
+            'type'  => 'string',
+            'description'  => 'Whether referrals get Credits on User-Registration or if a User buys credits'
+        ]);
+        Settings::firstOrCreate([
+            'key'   => 'SETTINGS::REFERRAL:PERCENTAGE',
+        ], [
+            'value' =>100,
+            'type'  => 'integer',
+            'description'  => 'The Percentage Value a referred user gets'
+        ]);
     }
 }

+ 63 - 0
resources/views/admin/settings/tabs/misc.blade.php

@@ -184,7 +184,70 @@
                     </div>
                 </div>
             </div>
+            <div class="col-md-3 px-3">
+                <div class="row mb-2">
+                    <div class="col text-center">
+                        <h1>Referral</h1>
+                    </div>
+                </div>
+
+                <div class="custom-control mb-3 p-0">
+                    <div class="col m-0 p-0 d-flex justify-content-between align-items-center">
+                        <div>
+                            <input value="true" id="enable_referral" name="enable_referral"
+                                   {{ config('SETTINGS::REFERRAL::ENABLED') == 'true' ? 'checked' : '' }}
+                                   type="checkbox">
+                            <label for="enable_referral">{{ __('Enable Referral') }} </label>
+                        </div>
+                    </div>
+                </div>
 
+                <div class="custom-control mb-3 p-0">
+                    <label for="referral_mode">{{ __('Mode') }}:
+                        <i data-toggle="popover" data-trigger="hover"
+                           data-content="{{ __('Should a reward be given if a new User registers or if a new user buys credits') }}" class="fas fa-info-circle"></i>
+                    </label>
+                    <select id="referral_mode" style="width:100%" class="custom-select" name="referral_mode" required
+                            autocomplete="off" @error('referral_mode') is-invalid @enderror>
+                        <option value="commission" @if (config('SETTINGS::REFERRAL:MODE') == "commission") selected
+                            @endif>{{ __("Commission") }}</option>
+                        <option value="sign-up" @if (config('SETTINGS::REFERRAL:MODE') == "sign-up") selected
+                            @endif>{{ __("Sign-Up") }}</option>
+                    </select>
+                </div>
+                <div class="form-group mb-3">
+                    <div class="custom-control p-0">
+                        <label for="referral_percentage">{{ __('Referral reward in percent') }} {{__("(only for commission-mode)")}}:
+                            <i data-toggle="popover" data-trigger="hover"
+                               data-content="{{ __('If a referred user buys credits, the referral-user will get x% of the Credits the referred user bought') }}" class="fas fa-info-circle"></i>
+                        </label>
+                        <input x-model="referral_percentage" id="referral_percentage" name="referral_percentage"
+                               type="number" value="{{ config('SETTINGS::REFERRAL:PERCENTAGE') }}"
+                               class="form-control @error('referral_percentage') is-invalid @enderror">
+                    </div>
+                </div>
+                <div class="form-group mb-3">
+                    <div class="custom-control p-0">
+                        <label for="referral_reward">{{ __('Referral reward in') }} {{ config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME', 'Credits') }} {{__("(only for sign-up-mode)")}}:</label>
+                        <input x-model="referral_reward" id="referral_reward" name="referral_reward"
+                               type="number" value="{{ config('SETTINGS::REFERRAL::REWARD') }}"
+                               class="form-control @error('referral_reward') is-invalid @enderror">
+                    </div>
+                </div>
+                <div class="custom-control mb-3 p-0">
+                    <label for="referral_allowed">{{ __('Allowed') }}:
+                        <i data-toggle="popover" data-trigger="hover"
+                           data-content="{{ __('Who is allowed to see their referral-URL') }}" class="fas fa-info-circle"></i>
+                    </label>
+                    <select id="referral_allowed" style="width:100%" class="custom-select" name="referral_allowed" required
+                            autocomplete="off" @error('referral_allowed') is-invalid @enderror>
+                            <option value="everyone" @if (config('SETTINGS::REFERRAL::ALLOWED') == "everyone") selected
+                                @endif>{{ __("Everyone") }}</option>
+                        <option value="client" @if (config('SETTINGS::REFERRAL::ALLOWED') == "client") selected
+                            @endif>{{ __("Clients") }}</option>
+                    </select>
+                </div>
+            </div>
 
         </div>
         <div class="row">

+ 2 - 0
resources/views/admin/users/index.blade.php

@@ -47,6 +47,7 @@
                             <th>{{__('Email')}}</th>
                             <th>{{CREDITS_DISPLAY_NAME}}</th>
                             <th>{{__('Servers')}}</th>
+                            <th>{{__("Referrals")}}</th>
                             <th>{{__('Verified')}}</th>
                             <th>{{__('Last seen')}}</th>
                             <th></th>
@@ -90,6 +91,7 @@
                     {data: 'email', name: 'users.email'},
                     {data: 'credits' , name : 'users.credits'},
                     {data: 'servers' , sortable : false},
+                    {data: 'referrals'},
                     {data: 'verified' , sortable : false},
                     {data: 'last_seen'},
                     {data: 'actions' , sortable : false},

+ 29 - 0
resources/views/admin/users/show.blade.php

@@ -244,8 +244,37 @@
                     @include('admin.servers.table' , ['filter' => '?user=' . $user->id])
 
                 </div>
+
             </div>
+                <div class="card">
+                    <div class="card-header">
+                        <h5 class="card-title"><i class="fas fa-user-check mr-2"></i>{{__('Referals')}}</h5>
+                    </div>
+                    <div class="card-body table-responsive">
+
+
+                        @foreach($referrals as $referral)
+                        <div class="col-lg-6">
+                            <div class="row">
+                                <div class="col-lg-4">
+                                    <label>User ID: {{$referral->id}}</label>
+                                </div>
+                                <div class="col-lg-4">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           <i class="fas fa-user-check mr-2"></i><a href="{{route("admin.users.show",$referral->id)}}">{{$referral->name}}</a>
+                                       </span>
+                                </div>
+                                <div class="col-lg-4">
+                                       <span style="max-width: 250px;" class="d-inline-block text-truncate">
+                                           <i class="fas fa-clock mr-2"></i>{{$referral->created_at->diffForHumans()}}
+                                       </span>
+                                </div>
+                            </div>
+                        </div>
+                        @endforeach
+                    </div>
 
+                </div>
 
         </div>
         <!-- END CUSTOM CONTENT -->

+ 10 - 1
resources/views/auth/register.blade.php

@@ -91,7 +91,16 @@
                             </div>
                         </div>
                     </div>
-
+                    @if(config('SETTINGS::REFERRAL::ENABLED') == "true")
+                        <div class="input-group mb-3">
+                            <input type="text" value="{{ \Request::get('ref') }}" class="form-control" name="referral_code" placeholder="{{__('Referral code')}} ( {{__("optional")}} )">
+                            <div class="input-group-append">
+                                <div class="input-group-text">
+                                    <span class="fas fa-user-check"></span>
+                                </div>
+                            </div>
+                        </div>
+                    @endif
                     <div class="input-group mb-3">
                         {!! htmlFormSnippet() !!}
                         @error('g-recaptcha-response')

+ 162 - 141
resources/views/profile/index.blade.php

@@ -12,7 +12,7 @@
                     <ol class="breadcrumb float-sm-right">
                         <li class="breadcrumb-item"><a href="{{ route('home') }}">{{ __('Dashboard') }}</a></li>
                         <li class="breadcrumb-item"><a class="text-muted"
-                                href="{{ route('profile.index') }}">{{ __('Profile') }}</a>
+                                                       href="{{ route('profile.index') }}">{{ __('Profile') }}</a>
                         </li>
                     </ol>
                 </div>
@@ -33,7 +33,7 @@
                             </h5>
                             {{ __('You have not yet verified your email address') }}
                             <a class="text-primary"
-                                href="{{ route('verification.send') }}">{{ __('Click here to resend verification email') }}</a>
+                               href="{{ route('verification.send') }}">{{ __('Click here to resend verification email') }}</a>
                             <br>
                             {{ __('Please contact support If you didnt receive your verification email.') }}
 
@@ -43,16 +43,18 @@
                     @if (is_null(Auth::user()->discordUser) && strtolower($force_discord_verification) == 'true')
                         @if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
                             <div class="alert alert-warning p-2 m-2">
-                                <h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
+                                <h5>
+                                    <i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
                                 </h5>
                                 {{ __('You have not yet verified your discord account') }}
                                 <a class="text-primary"
-                                    href="{{ route('auth.redirect') }}">{{ __('Login with discord') }}</a> <br>
+                                   href="{{ route('auth.redirect') }}">{{ __('Login with discord') }}</a> <br>
                                 {{ __('Please contact support If you face any issues.') }}
                             </div>
                         @else
                             <div class="alert alert-danger p-2 m-2">
-                                <h5><i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
+                                <h5>
+                                    <i class="icon fas fa-exclamation-circle"></i>{{ __('Required Discord verification!') }}
                                 </h5>
                                 {{ __('Due to system settings you are required to verify your discord account!') }} <br>
                                 {{ __('It looks like this hasnt been set-up correctly! Please contact support.') }}'
@@ -72,9 +74,10 @@
                             <div class="row">
                                 <div class="col-12 col-sm-auto mb-4">
                                     <div class="slim rounded-circle  border-secondary border text-gray-dark"
-                                        data-label="Change your avatar" data-max-file-size="3"
-                                        data-save-initial-image="true" style="width: 140px;height:140px; cursor: pointer"
-                                        data-size="140,140">
+                                         data-label="Change your avatar" data-max-file-size="3"
+                                         data-save-initial-image="true"
+                                         style="width: 140px;height:140px; cursor: pointer"
+                                         data-size="140,140">
                                         <img src="{{ $user->getAvatar() }}" alt="avatar">
                                     </div>
                                 </div>
@@ -84,10 +87,11 @@
                                         <p class="mb-0">{{ $user->email }}
                                             @if ($user->hasVerifiedEmail())
                                                 <i data-toggle="popover" data-trigger="hover" data-content="Verified"
-                                                    class="text-success fas fa-check-circle"></i>
+                                                   class="text-success fas fa-check-circle"></i>
                                             @else
-                                                <i data-toggle="popover" data-trigger="hover" data-content="Not verified"
-                                                    class="text-danger fas fa-exclamation-circle"></i>
+                                                <i data-toggle="popover" data-trigger="hover"
+                                                   data-content="Not verified"
+                                                   class="text-danger fas fa-exclamation-circle"></i>
                                             @endif
 
                                         </p>
@@ -95,193 +99,210 @@
                                             <span class="badge badge-primary"><i
                                                     class="fa fa-coins mr-2"></i>{{ $user->Credits() }}</span>
                                         </div>
-                                    </div>
 
-                                    <div class="text-center text-sm-right"><span
-                                            class="badge badge-secondary">{{ $user->role }}</span>
-                                        <div class="text-muted">
-                                            <small>{{ $user->created_at->isoFormat('LL') }}</small>
+                                    @if(config('SETTINGS::REFERRAL::ENABLED') == "true")
+                                        @if((config('SETTINGS::REFERRAL::ALLOWED') == "client" && $user->role != "member") || config('SETTINGS::REFERRAL::ALLOWED') == "everyone")
+                                            <div class="mt-1">
+                                                    <span class="badge badge-success"><i
+                                                            class="fa fa-user-check mr-2"></i>
+                                                        {{_("Referral URL")}} : {{route("register")}}?ref={{$user->referral_code}}</span>
+                                                @else
+                                                    <span class="badge badge-warning"><i
+                                                            class="fa fa-user-check mr-2"></i>
+                                                        {{_("Make a purchase to reveal your referral-URL")}}</span>
+                                        @endif
+                                            </div>
+                                        @endif
+                                        </div>
+
+
+                                        <div class="text-center text-sm-right"><span
+                                                class="badge badge-secondary">{{ $user->role }}</span>
+                                            <div class="text-muted">
+                                                <small>{{ $user->created_at->isoFormat('LL') }}</small>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
-                            </div>
-                            <ul class="nav nav-tabs">
-                                <li class="nav-item"><a href="javasript:void(0)"
-                                        class="active nav-link">{{ __('Settings') }}</a>
-                                </li>
-                            </ul>
-                            <div class="tab-content pt-3">
-                                <div class="tab-pane active">
-                                    <div class="row">
-                                        <div class="col">
-                                            <div class="row">
-                                                <div class="col">
-                                                    @if( $errors->has('pterodactyl_error_message') )
-                                                        @foreach( $errors->get('pterodactyl_error_message') as $err )
-                                                            <span class="text-danger" role="alert">
-                                                                <small><strong>{{ $err }}</strong></small>
-                                                            </span>
-                                                        @endforeach
-                                                    @endif
-                                                        @if( $errors->has('pterodactyl_error_status') )
-                                                            @foreach( $errors->get('pterodactyl_error_status') as $err )
+                                <ul class="nav nav-tabs">
+                                    <li class="nav-item"><a href="javasript:void(0)"
+                                                            class="active nav-link">{{ __('Settings') }}</a>
+                                    </li>
+                                </ul>
+                                <div class="tab-content pt-3">
+                                    <div class="tab-pane active">
+                                        <div class="row">
+                                            <div class="col">
+                                                <div class="row">
+                                                    <div class="col">
+                                                        @if( $errors->has('pterodactyl_error_message') )
+                                                            @foreach( $errors->get('pterodactyl_error_message') as $err )
                                                                 <span class="text-danger" role="alert">
                                                                     <small><strong>{{ $err }}</strong></small>
                                                                 </span>
                                                             @endforeach
                                                         @endif
-                                                    <div class="form-group"><label>{{__('Name')}}</label> <input
-                                                            class="form-control @error('name') is-invalid @enderror"
-                                                            type="text" name="name" placeholder="{{ $user->name }}"
-                                                            value="{{ $user->name }}">
+                                                        @if( $errors->has('pterodactyl_error_status') )
+                                                            @foreach( $errors->get('pterodactyl_error_status') as $err )
+                                                                <span class="text-danger" role="alert">
+                                                                        <small><strong>{{ $err }}</strong></small>
+                                                                    </span>
+                                                            @endforeach
+                                                        @endif
+                                                        <div class="form-group"><label>{{__('Name')}}</label> <input
+                                                                class="form-control @error('name') is-invalid @enderror"
+                                                                type="text" name="name" placeholder="{{ $user->name }}"
+                                                                value="{{ $user->name }}">
 
-                                                        @error('name')
+                                                            @error('name')
                                                             <div class="invalid-feedback">
                                                                 {{ $message }}
                                                             </div>
-                                                        @enderror
+                                                            @enderror
+                                                        </div>
                                                     </div>
                                                 </div>
-                                            </div>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="form-group"><label>{{ __('Email') }}</label> <input
-                                                            class="form-control @error('email') is-invalid @enderror"
-                                                            type="text" placeholder="{{ $user->email }}" name="email"
-                                                            value="{{ $user->email }}">
+                                                <div class="row">
+                                                    <div class="col">
+                                                        <div class="form-group"><label>{{ __('Email') }}</label> <input
+                                                                class="form-control @error('email') is-invalid @enderror"
+                                                                type="text" placeholder="{{ $user->email }}" name="email"
+                                                                value="{{ $user->email }}">
 
-                                                        @error('email')
+                                                            @error('email')
                                                             <div class="invalid-feedback">
                                                                 {{ $message }}
                                                             </div>
-                                                        @enderror
+                                                            @enderror
+                                                        </div>
                                                     </div>
                                                 </div>
                                             </div>
                                         </div>
-                                    </div>
-                                    <div class="row">
-                                        <div class="col-12 col-sm-6 mb-3">
-                                            <div class="mb-3"><b>{{ __('Change Password') }}</b></div>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="form-group">
-                                                        <label>{{ __('Current Password') }}</label>
-                                                        <input
-                                                            class="form-control @error('current_password') is-invalid @enderror"
-                                                            name="current_password" type="password" placeholder="••••••">
+                                        <div class="row">
+                                            <div class="col-12 col-sm-6 mb-3">
+                                                <div class="mb-3"><b>{{ __('Change Password') }}</b></div>
+                                                <div class="row">
+                                                    <div class="col">
+                                                        <div class="form-group">
+                                                            <label>{{ __('Current Password') }}</label>
+                                                            <input
+                                                                class="form-control @error('current_password') is-invalid @enderror"
+                                                                name="current_password" type="password"
+                                                                placeholder="••••••">
 
-                                                        @error('current_password')
+                                                            @error('current_password')
                                                             <div class="invalid-feedback">
                                                                 {{ $message }}
                                                             </div>
-                                                        @enderror
+                                                            @enderror
+                                                        </div>
                                                     </div>
                                                 </div>
-                                            </div>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="form-group"><label>{{ __('New Password') }}</label>
-                                                        <input
-                                                            class="form-control @error('new_password') is-invalid @enderror"
-                                                            name="new_password" type="password" placeholder="••••••">
+                                                <div class="row">
+                                                    <div class="col">
+                                                        <div class="form-group"><label>{{ __('New Password') }}</label>
+                                                            <input
+                                                                class="form-control @error('new_password') is-invalid @enderror"
+                                                                name="new_password" type="password" placeholder="••••••">
 
-                                                        @error('new_password')
+                                                            @error('new_password')
                                                             <div class="invalid-feedback">
                                                                 {{ $message }}
                                                             </div>
-                                                        @enderror
+                                                            @enderror
+                                                        </div>
                                                     </div>
                                                 </div>
-                                            </div>
-                                            <div class="row">
-                                                <div class="col">
-                                                    <div class="form-group">
-                                                        <label>{{ __('Confirm Password') }}</span></label>
-                                                        <input
-                                                            class="form-control @error('new_password_confirmation') is-invalid @enderror"
-                                                            name="new_password_confirmation" type="password"
-                                                            placeholder="••••••">
+                                                <div class="row">
+                                                    <div class="col">
+                                                        <div class="form-group">
+                                                            <label>{{ __('Confirm Password') }}</span></label>
+                                                            <input
+                                                                class="form-control @error('new_password_confirmation') is-invalid @enderror"
+                                                                name="new_password_confirmation" type="password"
+                                                                placeholder="••••••">
 
-                                                        @error('new_password_confirmation')
+                                                            @error('new_password_confirmation')
                                                             <div class="invalid-feedback">
                                                                 {{ $message }}
                                                             </div>
-                                                        @enderror
+                                                            @enderror
+                                                        </div>
                                                     </div>
                                                 </div>
                                             </div>
-                                        </div>
-                                        @if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
-                                            <div class="col-12 col-sm-5 offset-sm-1 mb-3">
-                                                @if (is_null(Auth::user()->discordUser))
-                                                    <b>{{ __('Link your discord account!') }}</b>
-                                                    <div class="verify-discord">
-                                                        <div class="mb-3">
-                                                            @if ($credits_reward_after_verify_discord)
-                                                                <p>{{ __('By verifying your discord account, you receive extra Credits and increased Server amounts') }}
-                                                                </p>
-                                                            @endif
+                                            @if (!empty(config('SETTINGS::DISCORD:CLIENT_ID')) && !empty(config('SETTINGS::DISCORD:CLIENT_SECRET')))
+                                                <div class="col-12 col-sm-5 offset-sm-1 mb-3">
+                                                    @if (is_null(Auth::user()->discordUser))
+                                                        <b>{{ __('Link your discord account!') }}</b>
+                                                        <div class="verify-discord">
+                                                            <div class="mb-3">
+                                                                @if ($credits_reward_after_verify_discord)
+                                                                    <p>{{ __('By verifying your discord account, you receive extra Credits and increased Server amounts') }}
+                                                                    </p>
+                                                                @endif
+                                                            </div>
                                                         </div>
-                                                    </div>
 
-                                                    <a class="btn btn-light" href="{{ route('auth.redirect') }}">
-                                                        <i class="fab fa-discord mr-2"></i>{{ __('Login with Discord') }}
-                                                    </a>
-                                                @else
-                                                    <div class="verified-discord">
-                                                        <div class="my-3 callout callout-info">
-                                                            <p>{{ __('You are verified!') }}</p>
+                                                        <a class="btn btn-light" href="{{ route('auth.redirect') }}">
+                                                            <i class="fab fa-discord mr-2"></i>{{ __('Login with Discord') }}
+                                                        </a>
+                                                    @else
+                                                        <div class="verified-discord">
+                                                            <div class="my-3 callout callout-info">
+                                                                <p>{{ __('You are verified!') }}</p>
+                                                            </div>
                                                         </div>
-                                                    </div>
-                                                    <div class="row pl-2">
-                                                        <div class="small-box bg-dark">
-                                                            <div class="d-flex justify-content-between">
-                                                                <div class="p-3">
-                                                                    <h3>{{ $user->discordUser->username }}
-                                                                        <sup>{{ $user->discordUser->locale }}</sup>
-                                                                    </h3>
-                                                                    <p>{{ $user->discordUser->id }}
-                                                                    </p>
+                                                        <div class="row pl-2">
+                                                            <div class="small-box bg-dark">
+                                                                <div class="d-flex justify-content-between">
+                                                                    <div class="p-3">
+                                                                        <h3>{{ $user->discordUser->username }}
+                                                                            <sup>{{ $user->discordUser->locale }}</sup>
+                                                                        </h3>
+                                                                        <p>{{ $user->discordUser->id }}
+                                                                        </p>
+                                                                    </div>
+                                                                    <div class="p-3"><img width="100px"
+                                                                                          height="100px"
+                                                                                          class="rounded-circle"
+                                                                                          src="{{ $user->discordUser->getAvatar() }}"
+                                                                                          alt="avatar"></div>
+                                                                </div>
+                                                                <div class="small-box-footer">
+                                                                    <a href="{{ route('auth.redirect') }}">
+                                                                        <i
+                                                                            class="fab fa-discord mr-1"></i>{{ __('Re-Sync Discord') }}
+                                                                    </a>
                                                                 </div>
-                                                                <div class="p-3"><img width="100px"
-                                                                        height="100px" class="rounded-circle"
-                                                                        src="{{ $user->discordUser->getAvatar() }}"
-                                                                        alt="avatar"></div>
-                                                            </div>
-                                                            <div class="small-box-footer">
-                                                                <a href="{{ route('auth.redirect') }}">
-                                                                    <i
-                                                                        class="fab fa-discord mr-1"></i>{{ __('Re-Sync Discord') }}
-                                                                </a>
                                                             </div>
                                                         </div>
-                                                    </div>
-                                                @endif
+                                                    @endif
 
+                                                </div>
+                                            @endif
+                                        </div>
+                                        <div class="row">
+                                            <div class="col d-flex justify-content-end">
+                                                <button class="btn btn-primary"
+                                                        type="submit">{{ __('Save Changes') }}</button>
                                             </div>
-                                        @endif
-                                    </div>
-                                    <div class="row">
-                                        <div class="col d-flex justify-content-end">
-                                            <button class="btn btn-primary"
-                                                type="submit">{{ __('Save Changes') }}</button>
                                         </div>
-                                    </div>
 
+                                    </div>
                                 </div>
                             </div>
                         </div>
                     </div>
-                </div>
-            </form>
+                </form>
 
 
-        </div>
-        <!-- END CUSTOM CONTENT -->
+            </div>
+            <!-- END CUSTOM CONTENT -->
 
-        </div>
-    </section>
-    <!-- END CONTENT -->
+            </div>
+        </section>
+        <!-- END CONTENT -->
 
-@endsection
+    @endsection