소스 검색

Refactor whole PartnerController

1day2die 2 년 전
부모
커밋
eeed88aba8
3개의 변경된 파일92개의 추가작업 그리고 96개의 파일을 삭제
  1. 11 80
      app/Http/Controllers/Admin/PartnerController.php
  2. 1 1
      routes/web.php
  3. 80 15
      themes/default/views/admin/partners/create.blade.php

+ 11 - 80
app/Http/Controllers/PartnerController.php → app/Http/Controllers/Admin/PartnerController.php

@@ -1,7 +1,8 @@
 <?php
 
-namespace App\Http\Controllers;
+namespace App\Http\Controllers\Admin;
 
+use App\Http\Controllers\Controller;
 use App\Models\PartnerDiscount;
 use App\Models\User;
 use Illuminate\Http\Request;
@@ -40,6 +41,10 @@ class PartnerController extends Controller
             'registered_user_discount' => 'required|integer|max:100|min:0',
         ]);
 
+        if(PartnerDiscount::where("user_id",$request->user_id)->exists()){
+            return redirect()->route('admin.partners.index')->with('error', __('Partner already exists'));
+        }
+
         PartnerDiscount::create($request->all());
 
         return redirect()->route('admin.partners.index')->with('success', __('partner has been created!'));
@@ -48,10 +53,10 @@ class PartnerController extends Controller
     /**
      * Display the specified resource.
      *
-     * @param  Voucher  $voucher
+     * @param  Partner  $voucher
      * @return Response
      */
-    public function show(Voucher $voucher)
+    public function show(Partner $voucher)
     {
         //
     }
@@ -59,7 +64,7 @@ class PartnerController extends Controller
     /**
      * Show the form for editing the specified resource.
      *
-     * @param  Voucher  $voucher
+     * @param  Partner  $voucher
      * @return Application|Factory|View
      */
     public function edit(PartnerDiscount $partner)
@@ -75,7 +80,7 @@ class PartnerController extends Controller
      * Update the specified resource in storage.
      *
      * @param  Request  $request
-     * @param  Voucher  $voucher
+     * @param  Partner  $voucher
      * @return RedirectResponse
      */
     public function update(Request $request, PartnerDiscount $partner)
@@ -95,7 +100,7 @@ class PartnerController extends Controller
     /**
      * Remove the specified resource from storage.
      *
-     * @param  Voucher  $voucher
+     * @param  Partner  $partner
      * @return RedirectResponse
      */
     public function destroy(PartnerDiscount $partner)
@@ -105,81 +110,7 @@ class PartnerController extends Controller
         return redirect()->back()->with('success', __('partner has been removed!'));
     }
 
-    public function users(Voucher $voucher)
-    {
-        return view('admin.vouchers.users', [
-            'voucher' => $voucher,
-        ]);
-    }
-
-    /**
-     * @param  Request  $request
-     * @return JsonResponse
-     *
-     * @throws ValidationException
-     */
-    public function redeem(Request $request)
-    {
-        //general validations
-        $request->validate([
-            'code' => 'required|exists:vouchers,code',
-        ]);
-
-        //get voucher by code
-        $voucher = Voucher::where('code', '=', $request->input('code'))->firstOrFail();
-
-        //extra validations
-        if ($voucher->getStatus() == 'USES_LIMIT_REACHED') {
-            throw ValidationException::withMessages([
-                'code' => __('This voucher has reached the maximum amount of uses'),
-            ]);
-        }
-
-        if ($voucher->getStatus() == 'EXPIRED') {
-            throw ValidationException::withMessages([
-                'code' => __('This voucher has expired'),
-            ]);
-        }
-
-        if (! $request->user()->vouchers()->where('id', '=', $voucher->id)->get()->isEmpty()) {
-            throw ValidationException::withMessages([
-                'code' => __('You already redeemed this voucher code'),
-            ]);
-        }
-
-        if ($request->user()->credits + $voucher->credits >= 99999999) {
-            throw ValidationException::withMessages([
-                'code' => "You can't redeem this voucher because you would exceed the  limit of ".CREDITS_DISPLAY_NAME,
-            ]);
-        }
-
-        //redeem voucher
-        $voucher->redeem($request->user());
-
-        event(new UserUpdateCreditsEvent($request->user()));
-
-        return response()->json([
-            'success' => "{$voucher->credits} ".CREDITS_DISPLAY_NAME.' '.__('have been added to your balance!'),
-        ]);
-    }
-
-    public function usersDataTable(Voucher $voucher)
-    {
-        $users = $voucher->users();
 
-        return datatables($users)
-            ->editColumn('name', function (User $user) {
-                return '<a class="text-info" target="_blank" href="'.route('admin.users.show', $user->id).'">'.$user->name.'</a>';
-            })
-            ->addColumn('credits', function (User $user) {
-                return '<i class="fas fa-coins mr-2"></i> '.$user->credits();
-            })
-            ->addColumn('last_seen', function (User $user) {
-                return $user->last_seen ? $user->last_seen->diffForHumans() : '';
-            })
-            ->rawColumns(['name', 'credits', 'last_seen'])
-            ->make();
-    }
 
     public function dataTable()
     {

+ 1 - 1
routes/web.php

@@ -10,6 +10,7 @@ use App\Http\Controllers\Admin\ApplicationApiController;
 use App\Http\Controllers\Admin\InvoiceController;
 use App\Http\Controllers\Admin\LegalController;
 use App\Http\Controllers\Admin\OverViewController;
+use App\Http\Controllers\Admin\PartnerController;
 use App\Http\Controllers\Admin\PaymentController;
 use App\Http\Controllers\Admin\ProductController;
 use App\Http\Controllers\Admin\ServerController as AdminServerController;
@@ -22,7 +23,6 @@ use App\Http\Controllers\Auth\SocialiteController;
 use App\Http\Controllers\HomeController;
 use App\Http\Controllers\Moderation\TicketsController as ModTicketsController;
 use App\Http\Controllers\NotificationController;
-use App\Http\Controllers\PartnerController;
 use App\Http\Controllers\ProductController as FrontProductController;
 use App\Http\Controllers\ProfileController;
 use App\Http\Controllers\ServerController;

+ 80 - 15
themes/default/views/admin/partners/create.blade.php

@@ -6,12 +6,12 @@
         <div class="container-fluid">
             <div class="row mb-2">
                 <div class="col-sm-6">
-                    <h1>{{__('Vouchers')}}</h1>
+                    <h1>{{__('Partner')}}</h1>
                 </div>
                 <div class="col-sm-6">
                     <ol class="breadcrumb float-sm-right">
                         <li class="breadcrumb-item"><a href="{{route('home')}}">{{__('Dashboard')}}</a></li>
-                        <li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Vouchers')}}</a>
+                        <li class="breadcrumb-item"><a href="{{route('admin.partners.index')}}">{{__('Partner')}}</a>
                         </li>
                         <li class="breadcrumb-item"><a class="text-muted"
                                                        href="{{route('admin.partners.create')}}">{{__('Create')}}</a>
@@ -40,19 +40,14 @@
                                 @csrf
 
                                 <div class="form-group">
-                                    <label for="user_id">{{__('User')}}</label>
-                                    <select id="user_id" style="width:100%"
-                                            class="custom-select @error('user') is-invalid @enderror" name="user_id" autocomplete="off">
-                                        @foreach($users as $user)
-                                            <option @if($partners->contains('user_id' , $user->id)) disabled @endif
-                                                value="{{$user->id}}">{{$user->name}} ({{$user->email}})</option>
-                                        @endforeach
-                                    </select>
-                                    @error('user')
-                                    <div class="text-danger">
-                                        {{$message}}
+
+                                    <div class="custom-control mb-3 p-0">
+                                        <label for="user_id">{{ __('User') }}:
+                                        </label>
+                                        <select id="user_id" style="width:100%" class="custom-select" name="user_id" required
+                                                autocomplete="off" @error('user_id') is-invalid @enderror>
+                                        </select>
                                     </div>
-                                    @enderror
                                 </div>
 
                                 <div class="form-group">
@@ -143,5 +138,75 @@
         })
     </script>
 
+    <script type="application/javascript">
+        function initUserIdSelect(data) {
+            function escapeHtml(str) {
+                var div = document.createElement('div');
+                div.appendChild(document.createTextNode(str));
+                return div.innerHTML;
+            }
+
+            $('#user_id').select2({
+                ajax: {
+                    url: '/admin/users.json',
+                    dataType: 'json',
+                    delay: 250,
+
+                    data: function (params) {
+                        return {
+                            filter: { name: params.term },
+                            page: params.page,
+                        };
+                    },
+
+                    processResults: function (data, params) {
+                        return { results: data };
+                    },
+
+                    cache: true,
+                },
+
+                data: data,
+                escapeMarkup: function (markup) { return markup; },
+                minimumInputLength: 2,
+                templateResult: function (data) {
+                    if (data.loading) return escapeHtml(data.text);
+
+                    return '<div class="user-block"> \
+                        <img class="img-circle img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" alt="User Image"> \
+                        <span class="username"> \
+                            <a href="#">' + escapeHtml(data.name) +'</a> \
+                        </span> \
+                        <span class="description"><strong>' + escapeHtml(data.email) + '</strong>' + '</span> \
+                    </div>';
+                },
+                templateSelection: function (data) {
+                    return '<div> \
+                        <span> \
+                            <img class="img-rounded img-bordered-xs" src="' + escapeHtml(data.avatarUrl) + '?s=120" style="height:28px;margin-top:-4px;" alt="User Image"> \
+                        </span> \
+                        <span style="padding-left:5px;"> \
+                            ' + escapeHtml(data.name) + ' (<strong>' + escapeHtml(data.email) + '</strong>) \
+                        </span> \
+                    </div>';
+                }
+
+            });
+        }
+
+        $(document).ready(function() {
+            @if (old('user_id'))
+            $.ajax({
+                url: '/admin/users.json?user_id={{ old('user_id') }}',
+                dataType: 'json',
+            }).then(function (data) {
+                initUserIdSelect([ data ]);
+            });
+            @else
+            initUserIdSelect();
+            @endif
+        });
+    </script>
+
 
-@endsection
+@endsection