diff --git a/config/avored.php b/config/avored.php
index a2f19a98..332f0cfe 100644
--- a/config/avored.php
+++ b/config/avored.php
@@ -1,7 +1,9 @@
\AvoRed\Framework\Graphql\Queries\ShippingQuery::class,
],
'mutation' => [
+ 'CreateSubscriberMutation' => CreateSubscriberMutation::class,
'register' => \AvoRed\Framework\Graphql\Mutations\Auth\RegisterMutation::class,
'login' => \AvoRed\Framework\Graphql\Mutations\Auth\LoginMutation::class,
'customerUpdate' => \AvoRed\Framework\Graphql\Mutations\Customer\CustomerUpdateMutation::class,
@@ -103,6 +106,7 @@
'cartProduct' => AvoRed\Framework\Graphql\Types\CartProductType::class,
'payment' => AvoRed\Framework\Graphql\Types\PaymentType::class,
'shipping' => AvoRed\Framework\Graphql\Types\ShippingType::class,
+ 'subscriber' => SubscriberType::class,
],
],
];
diff --git a/database/migrations/2017_03_29_000000_avored_framework_schema.php b/database/migrations/2017_03_29_000000_avored_framework_schema.php
index c009f1ea..36a13a90 100644
--- a/database/migrations/2017_03_29_000000_avored_framework_schema.php
+++ b/database/migrations/2017_03_29_000000_avored_framework_schema.php
@@ -274,6 +274,15 @@ public function up()
$table->foreign('product_id')->references('id')->on('products');
});
+ Schema::create('subscribers', function (Blueprint $table) {
+ $table->uuid('id')->primary();
+ $table->uuid('customer_id')->nullable()->default(null);
+ $table->string('email')->nullable()->default(null)->unique();
+ $table->enum('status', ['ENABLED', 'DISABLED'])->default('ENABLED');
+ $table->timestamps();
+ $table->foreign('customer_id')->references('id')->on('customers')->onDelete('cascade');
+ });
+
$path = __DIR__.'/../../assets/countries.json';
$json = json_decode(file_get_contents($path), true);
foreach ($json as $country) {
@@ -298,6 +307,7 @@ public function up()
*/
public function down()
{
+ Schema::dropIfExists('subscribers');
Schema::dropIfExists('visitors');
Schema::dropIfExists('category_product');
Schema::dropIfExists('documents');
diff --git a/resources/lang/en/system.php b/resources/lang/en/system.php
index d182d37c..dc088d82 100644
--- a/resources/lang/en/system.php
+++ b/resources/lang/en/system.php
@@ -97,5 +97,8 @@
'image_path' => 'Image',
'upload_file' => 'Upload File',
'drag_and_drop' => 'drag and drop',
- 'png_jpg_gif_up_to_10mb' => 'PNG, JPG, GIF up to 10MB'
+ 'png_jpg_gif_up_to_10mb' => 'PNG, JPG, GIF up to 10MB',
+ 'subscriber' => 'Subscriber',
+ 'enabled' => 'Enabled',
+ 'disabled' => 'Disabled',
];
diff --git a/resources/views/user/staff/_fields.blade.php b/resources/views/user/staff/_fields.blade.php
index af61d568..b3eb06c9 100644
--- a/resources/views/user/staff/_fields.blade.php
+++ b/resources/views/user/staff/_fields.blade.php
@@ -37,14 +37,16 @@
@endif
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/user/subscriber/create.blade.php b/resources/views/user/subscriber/create.blade.php
new file mode 100644
index 00000000..63beabcc
--- /dev/null
+++ b/resources/views/user/subscriber/create.blade.php
@@ -0,0 +1,53 @@
+
+
+
+
+
+ {{ __('avored::system.create') }} {{ __('avored::system.subscriber') }}
+
+
+
+
+
+
+
+ @foreach ($tabs as $tab)
+
+
+
+
+ {{ $tab->label() }}
+
+
+
+
+
+
+
+
+ @php
+ $path = $tab->view();
+ @endphp
+ @include($path)
+
+
+ @endforeach
+
+
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/user/subscriber/edit.blade.php b/resources/views/user/subscriber/edit.blade.php
new file mode 100644
index 00000000..4cae3043
--- /dev/null
+++ b/resources/views/user/subscriber/edit.blade.php
@@ -0,0 +1,50 @@
+
+
+
+
+
+ {{ __('avored::system.edit') }} {{ __('avored::system.subscriber') }}
+
+
+
+
+
+
+ @foreach ($tabs as $tab)
+
+
+
+
+ {{ $tab->label() }}
+
+
+
+
+
+
+
+
+ @php
+ $path = $tab->view();
+ @endphp
+ @include($path)
+
+
+ @endforeach
+
+
+
+
+
+ {{ __('avored::system.cancel') }}
+
+
+
+
+
+
+
diff --git a/resources/views/user/subscriber/index.blade.php b/resources/views/user/subscriber/index.blade.php
new file mode 100644
index 00000000..eaaa4155
--- /dev/null
+++ b/resources/views/user/subscriber/index.blade.php
@@ -0,0 +1,132 @@
+
+
+
+
+
+ {{ __('avored::system.subscriber') }} {{ __('avored::system.list') }}
+
+
+
+ {{ __('avored::system.create') }}
+
+
+
+
+
+
+
+
+
+
+ {{ __('avored::system.email') }}
+
+
+ {{ __('avored::system.status') }}
+
+
+ {{ __('avored::system.actions') }}
+
+
+
+
+ @foreach ($subscribers as $subscriber)
+
+
+ {{ $subscriber->email ?? '' }}
+
+
+ {{ $subscriber->status ?? '' }}
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+ @endforeach
+
+
+
+ {{ $subscribers->render() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ __('avored::system.are_you_sure') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/routes/web.php b/routes/web.php
index adf8d01d..c2047314 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -11,6 +11,7 @@
use AvoRed\Framework\System\Controllers\RoleController;
use AvoRed\Framework\User\Controllers\LoginController;
use AvoRed\Framework\User\Controllers\StaffController;
+use AvoRed\Framework\User\Controllers\SubscriberController;
use Illuminate\Support\Facades\Route;
/*
@@ -77,6 +78,7 @@
/***************** USER ROUTES *****************/
Route::resource('staff', StaffController::class);
+ Route::resource('subscriber', SubscriberController::class);
/***************** ORDER ROUTES *****************/
diff --git a/src/Breadcrumb/BreadcrumbProvider.php b/src/Breadcrumb/BreadcrumbProvider.php
index da05652f..5b9adcc8 100644
--- a/src/Breadcrumb/BreadcrumbProvider.php
+++ b/src/Breadcrumb/BreadcrumbProvider.php
@@ -148,6 +148,58 @@ function (BreadcrumbItem $breadcrumb) {
}
);
+ Breadcrumb::make(
+ 'admin.subscriber.index',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.subscriber')
+ ->parent('admin.dashboard');
+ }
+ );
+
+ Breadcrumb::make(
+ 'admin.subscriber.create',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.create')
+ ->parent('admin.dashboard')
+ ->parent('admin.subscriber.index');
+ }
+ );
+
+ Breadcrumb::make(
+ 'admin.subscriber.edit',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.edit')
+ ->parent('admin.dashboard')
+ ->parent('admin.subscriber.index');
+ }
+ );
+
+ Breadcrumb::make(
+ 'admin.staff.index',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.staff')
+ ->parent('admin.dashboard');
+ }
+ );
+
+ Breadcrumb::make(
+ 'admin.staff.create',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.create')
+ ->parent('admin.dashboard')
+ ->parent('admin.staff.index');
+ }
+ );
+
+ Breadcrumb::make(
+ 'admin.staff.edit',
+ function (BreadcrumbItem $breadcrumb) {
+ $breadcrumb->label('avored::system.edit')
+ ->parent('admin.dashboard')
+ ->parent('admin.staff.index');
+ }
+ );
+
// Breadcrumb::make(
// 'admin.language.index',
// function (BreadcrumbItem $breadcrumb) {
diff --git a/src/Database/Contracts/SubscriberModelInterface.php b/src/Database/Contracts/SubscriberModelInterface.php
new file mode 100644
index 00000000..bdea2ac1
--- /dev/null
+++ b/src/Database/Contracts/SubscriberModelInterface.php
@@ -0,0 +1,7 @@
+belongsTo(Customer::class);
+ }
+}
diff --git a/src/Database/Repository/SubscriberRepository.php b/src/Database/Repository/SubscriberRepository.php
new file mode 100644
index 00000000..52106921
--- /dev/null
+++ b/src/Database/Repository/SubscriberRepository.php
@@ -0,0 +1,31 @@
+model = new Subscriber();
+ }
+
+ /**
+ * Get the model for the repository
+ * @return Subscriber
+ */
+ public function model(): Subscriber
+ {
+ return $this->model;
+ }
+}
diff --git a/src/Graphql/Mutations/Customer/CreateSubscriberMutation.php b/src/Graphql/Mutations/Customer/CreateSubscriberMutation.php
new file mode 100644
index 00000000..7fe9ee79
--- /dev/null
+++ b/src/Graphql/Mutations/Customer/CreateSubscriberMutation.php
@@ -0,0 +1,63 @@
+ 'CreateSubscriberMutation',
+ 'description' => 'A mutation'
+ ];
+
+ /**
+ * Subscriber Repository
+ * @var AvoRed\Framework\Database\Repository\SubscriberRepository
+ */
+ protected $subscriberRepository;
+
+ /**
+ * All Subscriber construct
+ * @param \AvoRed\Framework\Database\Contracts\SubscriberModelInterface $subscriberRepository
+ * @return void
+ */
+ public function __construct(SubscriberModelInterface $subscriberRepository)
+ {
+ $this->subscriberRepository = $subscriberRepository;
+ }
+
+ public function type(): Type
+ {
+ return GraphQL::type('subscriber');
+ }
+
+ public function args(): array
+ {
+ return [
+ 'email' => [
+ 'name' => 'email',
+ 'type' => Type::nonNull(Type::string()),
+ ]
+ ];
+ }
+
+ public function resolve($root, $args, $context, ResolveInfo $resolveInfo, Closure $getSelectFields)
+ {
+ if (Auth::guard('visitor_api')->check()) {
+ $visitor = Auth::guard('visitor_api')->user();
+ $customerId = Arr::get($visitor, 'customer_id', null);
+ $args['customer_id'] = $customerId;
+ }
+ $args['status'] = 'ENABLED';
+
+ return $this->subscriberRepository->create($args);
+ }
+}
diff --git a/src/Graphql/Mutations/PlaceOrderMutation.php b/src/Graphql/Mutations/PlaceOrderMutation.php
index 871532f8..648a508c 100644
--- a/src/Graphql/Mutations/PlaceOrderMutation.php
+++ b/src/Graphql/Mutations/PlaceOrderMutation.php
@@ -79,18 +79,6 @@ public function args(): array
'billing_address_id' => [
'name' => 'billing_address_id',
'type' => Type::nonNull(Type::string())
- ],
- 'products' => [
- 'name' => 'products',
- 'type' => Type::listOf(new InputObjectType([
- 'name' => 'order_products',
- 'fields' => [
- 'product_id' => ['name' => 'product_id', 'type' => Type::nonNull(Type::string())],
- 'qty' => ['name' => 'qty', 'type' => Type::nonNull(Type::float())],
- 'price' => ['name' => 'price', 'type' => Type::nonNull(Type::float())],
- 'tax_amount' => ['name' => 'tax_amount', 'type' => Type::nonNull(Type::float())],
- ]
- ]))
]
];
}
@@ -99,7 +87,7 @@ public function resolve($root, $args, $context, ResolveInfo $resolveInfo, Closur
{
$order = $this->orderRepository->create($args);
- $this->syncProducts($order, $args);
+ // $this->syncProducts($order, $args);
return $order;
}
@@ -113,7 +101,6 @@ public function resolve($root, $args, $context, ResolveInfo $resolveInfo, Closur
*/
private function syncProducts(Order $order, $args)
{
-
foreach ($args['products'] as $product) {
$orderProductData = [
'product_id' => $product['product_id'],
diff --git a/src/Graphql/Queries/AllCategoryQuery.php b/src/Graphql/Queries/AllCategoryQuery.php
index e40facea..34c12e28 100644
--- a/src/Graphql/Queries/AllCategoryQuery.php
+++ b/src/Graphql/Queries/AllCategoryQuery.php
@@ -12,7 +12,7 @@
class AllCategoryQuery extends Query
{
- use AuthorizedTrait;
+ // use AuthorizedTrait;
protected $attributes = [
'name' => 'allCategory',
diff --git a/src/Graphql/Queries/LatestProductQuery.php b/src/Graphql/Queries/LatestProductQuery.php
index acb689a7..d0107f1a 100644
--- a/src/Graphql/Queries/LatestProductQuery.php
+++ b/src/Graphql/Queries/LatestProductQuery.php
@@ -12,7 +12,7 @@
class LatestProductQuery extends Query
{
- use AuthorizedTrait;
+ // use AuthorizedTrait;
protected $attributes = [
'name' => 'latestProductQuery',
diff --git a/src/Graphql/Types/SubscriberType.php b/src/Graphql/Types/SubscriberType.php
new file mode 100644
index 00000000..02592a1d
--- /dev/null
+++ b/src/Graphql/Types/SubscriberType.php
@@ -0,0 +1,52 @@
+ 'subscriber',
+ 'description' => 'A type'
+ ];
+
+ /**
+ * Fields for Subscriber Type
+ * @return array $fields
+ */
+ public function fields(): array
+ {
+ return [
+ 'id' => [
+ 'type' => Type::nonNull(Type::string()),
+ 'description' => 'The id of the subscriber'
+ ],
+ 'customer_id' => [
+ 'type' => Type::string(),
+ 'description' => 'The customer id of the subscriber'
+ ],
+ 'email' => [
+ 'type' => Type::nonNull(Type::string()),
+ 'description' => 'The email of the subscriber'
+ ],
+ 'status' => [
+ 'type' => Type::string(),
+ 'description' => 'The status of the subscriber'
+ ],
+ 'created_at' => [
+ 'type' => Type::nonNull(Type::string()),
+ 'description' => 'The created_at of the subscriber'
+ ],
+ 'updated_at' => [
+ 'type' => Type::nonNull(Type::string()),
+ 'description' => 'The updated_at of the subscriber'
+ ],
+
+ ];
+ }
+}
diff --git a/src/Menu/MenuProvider.php b/src/Menu/MenuProvider.php
index c4476193..8856b6c6 100644
--- a/src/Menu/MenuProvider.php
+++ b/src/Menu/MenuProvider.php
@@ -126,7 +126,7 @@ public function registerAdminMenu()
});
/** @var Builder $orderMenu */
$orderMenu = Menu::get('order');
-
+
$orderMenu->subMenu('order', function (MenuItem $menu) {
$menu->key('order')
->type(MenuItem::ADMIN)
@@ -192,6 +192,12 @@ public function registerAdminMenu()
->label('avored::system.staff')
->route('admin.staff.index');
});
+ $userMenu->subMenu('subscriber', function (MenuItem $menu) {
+ $menu->key('subscriber')
+ ->type(MenuItem::ADMIN)
+ ->label('avored::system.subscriber')
+ ->route('admin.subscriber.index');
+ });
Menu::make('system', function (MenuItem $menu) {
$menu->label('avored::system.system')
diff --git a/src/Permission/PermissionProvider.php b/src/Permission/PermissionProvider.php
index 77a87ab8..f9f525cd 100644
--- a/src/Permission/PermissionProvider.php
+++ b/src/Permission/PermissionProvider.php
@@ -289,6 +289,41 @@ function (PermissionItem $permission) {
->routes('admin.admin-user.destroy');
}
);
+
+ $group = Permission::add(
+ 'subscriber',
+ function (PermissionGroup $group) {
+ $group->label('avored::system.subscriber');
+ }
+ );
+ $group->addPermission(
+ 'admin-subscriber-list',
+ function (PermissionItem $permission) {
+ $permission->label('avored::system.list')
+ ->routes('admin.subscriber.index');
+ }
+ );
+ $group->addPermission(
+ 'admin-subscriber-create',
+ function (PermissionItem $permission) {
+ $permission->label('avored::system.create')
+ ->routes('admin.subscriber.create,admin.subscriber.store');
+ }
+ );
+ $group->addPermission(
+ 'admin-subscriber-update',
+ function (PermissionItem $permission) {
+ $permission->label('avored::system.edit')
+ ->routes('admin.subscriber.edit,admin.subscriber.update');
+ }
+ );
+ $group->addPermission(
+ 'admin-subscriber-destroy',
+ function (PermissionItem $permission) {
+ $permission->label('avored::system.destroy')
+ ->routes('admin.subscriber.destroy');
+ }
+ );
// $group = Permission::add(
// 'currency',
// function (PermissionGroup $group) {
diff --git a/src/Support/Providers/ModelsProvider.php b/src/Support/Providers/ModelsProvider.php
index fcc31e04..b50acfea 100644
--- a/src/Support/Providers/ModelsProvider.php
+++ b/src/Support/Providers/ModelsProvider.php
@@ -18,6 +18,7 @@
use AvoRed\Framework\Database\Contracts\ProductModelInterface;
use AvoRed\Framework\Database\Contracts\PropertyModelInterface;
use AvoRed\Framework\Database\Contracts\RoleModelInterface;
+use AvoRed\Framework\Database\Contracts\SubscriberModelInterface;
use AvoRed\Framework\Database\Contracts\VisitorModelInterface;
use AvoRed\Framework\Database\Repository\AddressRepository;
use AvoRed\Framework\Database\Repository\AdminUserRepository;
@@ -35,6 +36,7 @@
use AvoRed\Framework\Database\Repository\ProductRepository;
use AvoRed\Framework\Database\Repository\PropertyRepository;
use AvoRed\Framework\Database\Repository\RoleRepository;
+use AvoRed\Framework\Database\Repository\SubscriberRepository;
use AvoRed\Framework\Database\Repository\VisitorRepository;
use Illuminate\Support\ServiceProvider;
@@ -68,6 +70,7 @@ class ModelsProvider extends ServiceProvider
PermissionModelInterface::class => PermissionRepository::class,
VisitorModelInterface::class => VisitorRepository::class,
RoleModelInterface::class => RoleRepository::class,
+ SubscriberModelInterface::class => SubscriberRepository::class,
];
/**
diff --git a/src/Tab/TabProvider.php b/src/Tab/TabProvider.php
index e1952b1d..5cf6d94b 100644
--- a/src/Tab/TabProvider.php
+++ b/src/Tab/TabProvider.php
@@ -160,6 +160,11 @@ public function registerTabs()
->label('avored::system.basic_info')
->view('avored::user.staff._fields');
});
+ Tab::put('user.subscriber', function (TabItem $tab) {
+ $tab->key('user.subscriber.info')
+ ->label('avored::system.basic_info')
+ ->view('avored::user.subscriber._fields');
+ });
/******SYSTEM CURRENCY TABS *******/
Tab::put('system.currency', function (TabItem $tab) {
diff --git a/src/User/Controllers/SubscriberController.php b/src/User/Controllers/SubscriberController.php
new file mode 100644
index 00000000..8f4bb669
--- /dev/null
+++ b/src/User/Controllers/SubscriberController.php
@@ -0,0 +1,114 @@
+subscriberRepository = $repository;
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ $subscribers = $this->subscriberRepository->paginate();
+
+ return view('avored::user.subscriber.index')
+ ->with('subscribers', $subscribers);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ $roles = $this->roleRepository->options();
+ $tabs = Tab::get('user.subscriber');
+
+ return view('avored::user.subscriber.create')
+ ->with('tabs', $tabs);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param SubscriberRequest $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(SubscriberRequest $request)
+ {
+ $this->subscriberRepository->create($request->all());
+
+ return redirect(route('admin.subscriber.index'));
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param Subscriber $subscriber
+ * @return \Illuminate\Http\Response
+ */
+ public function edit(Subscriber $subscriber)
+ {
+ $tabs = Tab::get('user.subscriber');
+
+ return view('avored::user.subscriber.edit')
+ ->with('subscriber', $subscriber)
+ ->with('tabs', $tabs);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param SubscriberRequest $request
+ * @param Subscriber $subscriber
+ * @return \Illuminate\Http\Response
+ */
+ public function update(SubscriberRequest $request, Subscriber $subscriber)
+ {
+ $subscriber->update($request->all());
+
+ return redirect(route('admin.subscriber.index'));
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param Subscriber $subscriber
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy(Subscriber $subscriber)
+ {
+ $subscriber->delete();
+
+ return new JsonResponse([
+ 'success' => true,
+ 'message' => __('avored::system.success_delete_message', ['attribute' => __('avored::system.subscriber')])
+ ]);
+ }
+}
diff --git a/src/User/Requests/SubscriberRequest.php b/src/User/Requests/SubscriberRequest.php
new file mode 100644
index 00000000..3541883a
--- /dev/null
+++ b/src/User/Requests/SubscriberRequest.php
@@ -0,0 +1,29 @@
+ 'required',
+ ];
+ }
+}