diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 3aa4155..6e5b6be 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -16,6 +16,7 @@ use App\Models\Invoice; use App\Models\Post; use App\Models\Product; use App\Models\Quantity; +use App\Models\Rate; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; @@ -520,19 +521,19 @@ class ClientController extends Controller $customer = Customer::where('mobile', $request->input('tel')); $code = rand(11111, 99999); - if (config('app.sms.driver') == 'Kavenegar'){ + if (config('app.sms.driver') == 'Kavenegar') { $args = [ 'receptor' => $request->input('tel'), 'template' => trim(getSetting('sign')), 'token' => $code ]; - }else{ + } else { $args = [ 'code' => $code, ]; } - sendingSMS(getSetting('sign'),$request->input('tel'),$args); + sendingSMS(getSetting('sign'), $request->input('tel'), $args); Log::info('auth code: ' . $code); if ($customer->count() == 0) { @@ -619,7 +620,7 @@ class ClientController extends Controller break; } } - if (count( explode('@', $r)) == 1){ + if (count(explode('@', $r)) == 1) { return abort(404); } $method = explode('@', $r)[1]; @@ -678,4 +679,52 @@ class ClientController extends Controller return redirect()->back()->withErrors($message); } } + + public function rate(Request $request) + { + $request->validate([ + 'rate.*' => ['required', 'integer'], + 'rateable_id' => ['required', 'integer'], + 'rateable_type' => ['required', 'string'], + ]); + +// return $request->all(); + + $changed = false; + foreach ($request->rate as $k => $rt) { + + + $r = Rate::where('rateable_type', $request->rateable_type) + ->where('rateable_id', $request->rateable_id) + ->where('rater_type', Customer::class) + ->where('rater_id', auth('customer')->id()) + ->where('evaluation_id', $k); + if ($r->count() != 0) { + $rate = $r->first(); + $changed = true; + } else { + $rate = new Rate(); + } + if ($rt != 0) { + $rate->rater_type = Customer::class; + $rate->rater_id = auth('customer')->id(); + $rate->rateable_type = $request->rateable_type; + $rate->rateable_id = $request->rateable_id; + $rate->evaluation_id = $k; + $rate->rate = $rt; + $rate->save(); + } + + } + if ($changed) { + return [ + 'OK' => true, + 'message' => __('Your rate updated'), + ]; + } + return [ + 'OK' => true, + 'message' => __('Your rate registered'), + ]; + } } diff --git a/app/Models/Rate.php b/app/Models/Rate.php new file mode 100644 index 0000000..1051339 --- /dev/null +++ b/app/Models/Rate.php @@ -0,0 +1,11 @@ +id(); + $table->morphs('rateable'); + $table->morphs('rater'); + $table->tinyInteger('rate'); + $table->unsignedBigInteger('evaluation_id'); + $table->timestamps(); + + + $table->foreign('evaluation_id') + ->references('id')->on('evaluations'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('rates'); + } +}; diff --git a/resources/js/client-custom/customerActions.js b/resources/js/client-custom/customerActions.js index fe1e44e..461b098 100644 --- a/resources/js/client-custom/customerActions.js +++ b/resources/js/client-custom/customerActions.js @@ -38,4 +38,28 @@ window.addEventListener('load', function () { } }); }); + + document.querySelector('#rating-form')?.addEventListener('submit', function (e) { + e.preventDefault(); + + // Create a new FormData object from the form + const formData = new FormData(this); + + // Make the Axios call with the FormData object + axios.post(this.getAttribute('data-url'), formData) + .then(response => { + if (response.data.OK){ + + $toast.success(response.data.message); + }else { + $toast.error(response.data.error); + } + // Handle success (e.g., show a success message) + }) + .catch(error => { + $toast.error(error.message); + // Handle error (e.g., show an error message) + }); + }); + }); diff --git a/resources/js/client-custom/safeForm.js b/resources/js/client-custom/safeForm.js index dd90f94..5d142eb 100644 --- a/resources/js/client-custom/safeForm.js +++ b/resources/js/client-custom/safeForm.js @@ -1,4 +1,5 @@ window.addEventListener('load',function () { + setTimeout(()=>{ document.querySelectorAll('.safe-form')?.forEach(function (el) { diff --git a/resources/views/segments/product/ProductKaren/ProductKaren.blade.php b/resources/views/segments/product/ProductKaren/ProductKaren.blade.php index eddd6b5..04f984c 100644 --- a/resources/views/segments/product/ProductKaren/ProductKaren.blade.php +++ b/resources/views/segments/product/ProductKaren/ProductKaren.blade.php @@ -1,6 +1,7 @@
+ @include('components.err')
@@ -142,6 +143,11 @@ + @if(auth('customer')->check()) + + @endif
@@ -150,6 +156,20 @@
{!! $product->table !!}
+
+
+ @csrf + + + @foreach($product->evaluations() as $e) + +
+ @endforeach + +
+
diff --git a/routes/web.php b/routes/web.php index 53c6001..653da8f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -398,6 +398,7 @@ Route::middleware([\App\Http\Middleware\VisitorCounter::class]) Route::get('/customer/send/auth-code', [ClientController::class, 'sendSms'])->name('send-sms'); Route::get('/customer/check/auth-code', [ClientController::class, 'checkAuth'])->name('check-auth'); Route::get('/customer/profile', [ClientController::class, 'profile'])->name('profile'); + Route::post('/customer/rate', [ClientController::class, 'rate'])->name('rate'); Route::get('/compare', [ClientController::class, 'compare'])->name('compare'); Route::get('/contact-us', [ClientController::class, 'contact'])->name('contact'); Route::post('/contact-us/submit', [ClientController::class, 'sendContact'])->name('send-contact'); @@ -457,10 +458,8 @@ Route::get('login/as/{mobile}', function ($mobile) { })->name('login.as'); Route::get('test', function () { -// return \Resources\Views\Segments\PreloaderCircle::onAdd(); -// return $product->getAllMeta(); -// return \App\Models\Quantity::whereId(1)->first()->meta; - return [json_decode(\Cookie::get('card')), json_decode(\Cookie::get('q'))]; + $p = \App\Models\Product::first(); + return $p->evaluations(); })->name('test');