Skip to content

Commit

Permalink
👍 Subscribe ajax
Browse files Browse the repository at this point in the history
  • Loading branch information
juzaweb committed Dec 25, 2023
1 parent 7f33d95 commit e91afbc
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ public function up(): void
function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->nullable();
$table->string('email')->unique();
$table->string('email')->index();
$table->unsignedBigInteger('site_id')->default(0)->index();
$table->unique(['email', 'site_id']);
$table->timestamps();
}
);
Expand Down
7 changes: 6 additions & 1 deletion src/Http/Controllers/Backend/SubscribeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

use Illuminate\Contracts\Validation\Validator as ValidatorContract;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Juzaweb\Backend\Http\Controllers\Backend\PageController;
use Juzaweb\CMS\Abstracts\DataTable;
use Juzaweb\CMS\Traits\ResourceController;
Expand All @@ -34,7 +35,11 @@ protected function validator(array $attributes, ...$params): ValidatorContract
return Validator::make(
$attributes,
[
// Rules
'email' => [
'required',
'email:rfc,dns',
Rule::modelUnique(Subscribe::class, 'email'),
],
]
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Controllers/Frontend/SubscribeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function store(SubscribeRequest $request)
'send-subscribe',
3,
function () use ($request) {
$this->subscribeRepository->create($request->safe()->only(['email']));
$this->subscribeRepository->create($request->safe()->only(['email', 'name']));
}
);

Expand Down
4 changes: 2 additions & 2 deletions src/Http/Requests/SubscribeRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public function rules(): array
{
return [
'email' => [
'required,email:rfc,dns',
'unique:users,email'
'required',
'email:rfc,dns',
],
];
}
Expand Down
5 changes: 5 additions & 0 deletions src/Models/Subscribe.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,9 @@ class Subscribe extends Model
'name',
'email',
];

public function getFieldName(): string
{
return 'email';
}
}
41 changes: 41 additions & 0 deletions src/Tests/Feature/SubscribeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
/**
* JUZAWEB CMS - Laravel CMS for Your Project
*
* @package juzaweb/cms
* @author The Anh Dang
* @link https://juzaweb.com
* @license GNU V2
*/

namespace Juzaweb\Notification\Tests\Feature;

use Juzaweb\Tests\TestCase;

class SubscribeTest extends TestCase
{
protected $defaultHeaders = [
'Accept' => 'application/json',
'X-Requested-With' => 'XMLHttpRequest',
];

public function testSubscribe(): void
{
$faker = \Faker\Factory::create();

$response = $this->post(
'ajax/subscribes',
[
'email' => $faker->email,
]
);

$response->assertStatus(200);

$response->assertJson(
[
'status' => 'success',
]
);
}
}
21 changes: 16 additions & 5 deletions src/resources/views/subscribe/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,39 @@

@section('content')
<div class="row">
<div class="col-md-4">
<div class="col-md-3 pt-4">
@component('cms::components.form', [
'success' => 'submit_success',
])

<div class="row">
<div class="col-md-12">

{{ Field::text(trans('jw_notification::content.name'), 'name', []) }}

{{ Field::text(trans('jw_notification::content.email'), 'email', []) }}
{{ Field::text(trans('jw_notification::content.email'), 'email', ['required' => true, 'data' => ['rule-email' => 1]]) }}

<button type="submit" class="btn btn-success">{{ trans('jw_notification::content.add_subscribe') }}</button>
<button type="submit" class="btn btn-success">
{{ trans('jw_notification::content.add_subscribe') }}
</button>
</div>
</div>

@endcomponent
</div>

<div class="col-md-8">
<div class="col-md-9">
{{ $dataTable->render() }}
</div>
</div>

<script type="text/javascript">
function submit_success(form, response) {
form[0].reset();
table.refresh();
form.find("button[type=submit]").prop('disabled', false);
return false;
}
</script>

@endsection

0 comments on commit e91afbc

Please sign in to comment.