migrate to gtea from bistbucket
This commit is contained in:
70
app/Http/Controllers/Admin/AcnooAffiliateController.php
Normal file
70
app/Http/Controllers/Admin/AcnooAffiliateController.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\Gateway;
|
||||
use App\Models\Business;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Modules\AffiliateAddon\App\Models\Affiliate;
|
||||
|
||||
class AcnooAffiliateController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$plans = Plan::latest()->get();
|
||||
$gateways = Gateway::latest()->get();
|
||||
$affiliates = Affiliate::with(['user:id,business_id,name,email','user.business:id,plan_subscribe_id,will_expire,companyName,phoneNumber,address,subscriptionDate,created_at,business_category_id:id,name','user.business.enrolled_plan:id,plan_id,business_id,plan_id','user.business.enrolled_plan.plan:id,subscriptionName'])->latest()->paginate(20);
|
||||
return view('admin.affiliate-modules.affiliate.index', compact('affiliates','plans','gateways'));
|
||||
}
|
||||
|
||||
public function acnooFilter(Request $request)
|
||||
{
|
||||
$search = $request->input('search');
|
||||
|
||||
$affiliates = Affiliate::with(['user:id,business_id,name,email','user.business:id,plan_subscribe_id,will_expire,companyName,phoneNumber,address,subscriptionDate,created_at,business_category_id:id,name','user.business.enrolled_plan:id,plan_id,business_id,plan_id','user.business.enrolled_plan.plan:id,subscriptionName'])->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('balance', 'like', '%' . $search . '%')
|
||||
->orWhereHas('user', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%')
|
||||
->orwhere('email', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('user.business.enrolled_plan.plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.affiliate-modules.affiliate.datas', compact('affiliates'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect(url()->previous());
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
Affiliate::findOrFail($id)->delete();
|
||||
return response()->json([
|
||||
'message' => __('Affiliate deleted successfully'),
|
||||
'redirect' => route('admin.affiliates.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Affiliate::whereIn('id', $request->ids)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Affiliate deleted successfully'),
|
||||
'redirect' => route('admin.affiliates.index')
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Business;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class AcnooAffiliateReportController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$items = Business::with(['enrolled_plan:id,plan_id', 'enrolled_plan.plan:id,subscriptionName', 'category:id,name'])->latest()->paginate(20);
|
||||
return view('admin.affiliate-modules.reports.index', compact('items'));
|
||||
}
|
||||
|
||||
public function acnooFilter(Request $request)
|
||||
{
|
||||
$search = $request->input('search');
|
||||
|
||||
$items = Business::with(['enrolled_plan:id,plan_id', 'enrolled_plan.plan:id,subscriptionName', 'category:id,name'])->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('companyName', 'like', '%' . $search . '%')
|
||||
->orWhereHas('enrolled_plan.plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.affiliate-modules.reports.datas', compact('items'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect(url()->previous());
|
||||
}
|
||||
}
|
||||
137
app/Http/Controllers/Admin/AcnooBannerController.php
Normal file
137
app/Http/Controllers/Admin/AcnooBannerController.php
Normal file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Banner;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooBannerController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:banners-create')->only('create', 'store');
|
||||
$this->middleware('permission:banners-read')->only('index');
|
||||
$this->middleware('permission:banners-update')->only('edit', 'update','status');
|
||||
$this->middleware('permission:banners-delete')->only('destroy','deleteAll');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$banners = Banner::latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.banners.search', compact('banners'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.banners.index', compact('banners'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.banners.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'nullable|in:on',
|
||||
'imageUrl' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
|
||||
]);
|
||||
|
||||
Banner::create([
|
||||
'imageUrl' => $request->imageUrl ? $this->upload($request, 'imageUrl') : NULL,
|
||||
'status' => $request->status ? 1 : 0,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Banner saved successfully'),
|
||||
'redirect' => route('admin.banners.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(string $id)
|
||||
{
|
||||
$banners = Banner::findOrFail($id);
|
||||
return view('admin.banners.search',compact('banners'));
|
||||
}
|
||||
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'nullable|in:on',
|
||||
'imageUrl' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg',
|
||||
]);
|
||||
|
||||
$banner = Banner::findOrFail($id);
|
||||
|
||||
$banner->update([
|
||||
'imageUrl' => $request->imageUrl ? $this->upload($request, 'imageUrl', $banner->imageUrl) : $banner->imageUrl,
|
||||
'status' => $request->status ? 1 : 0,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Banner updated successfully'),
|
||||
'redirect' => route('admin.banners.index')
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function destroy(string $id)
|
||||
{
|
||||
$banner = Banner::findOrFail($id);
|
||||
|
||||
if (file_exists($banner->imageUrl)) {
|
||||
Storage::delete($banner->imageUrl);
|
||||
}
|
||||
|
||||
$banner->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Banners deleted successfully'),
|
||||
'redirect' => route('admin.banners.index')
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$banner = Banner::findOrFail($id);
|
||||
$banner->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Banner']);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$idsToDelete = $request->input('ids');
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$banners = Banner::whereIn('id', $idsToDelete)->get();
|
||||
foreach ($banners as $banner) {
|
||||
if (file_exists($banner->imageUrl)) {
|
||||
Storage::delete($banner->imageUrl);
|
||||
}
|
||||
}
|
||||
|
||||
Banner::whereIn('id', $idsToDelete)->delete();
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Banners deleted successfully'),
|
||||
'redirect' => route('admin.banners.index')
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json(__('Something went wrong.'), 400);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
140
app/Http/Controllers/Admin/AcnooBlogController.php
Normal file
140
app/Http/Controllers/Admin/AcnooBlogController.php
Normal file
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Blog;
|
||||
use App\Models\Comment;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooBlogController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$blogs = Blog::when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('title', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.website-setting.blogs.datas', compact('blogs'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.website-setting.blogs.index', compact('blogs'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.website-setting.blogs.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'title' => 'required|unique:blogs,title',
|
||||
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
|
||||
'status' => 'boolean',
|
||||
'descriptions' => 'nullable|string',
|
||||
'tags' => 'nullable|array',
|
||||
'meta.title' => 'nullable|string',
|
||||
'meta.description' => 'nullable|string',
|
||||
]);
|
||||
|
||||
Blog::create($request->except('image') + [
|
||||
'user_id' => Auth::id(),
|
||||
'image' => $request->image ? $this->upload($request, 'image') : null,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('BLog created successfully'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Blog $blog)
|
||||
{
|
||||
return view('admin.website-setting.blogs.edit', compact('blog'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Blog $blog)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'title' => 'required|unique:blogs,title,' . $blog->id,
|
||||
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg',
|
||||
'status' => 'boolean',
|
||||
'descriptions' => 'nullable|string',
|
||||
'tags' => 'nullable|array',
|
||||
'meta.title' => 'nullable|string',
|
||||
'meta.description' => 'nullable|string',
|
||||
]);
|
||||
|
||||
$blog->update($request->except('image') + [
|
||||
'user_id' => Auth::id(),
|
||||
'image' => $request->image ? $this->upload($request, 'image', $blog->image) : $blog->image,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('BLog updated successfully'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Blog $blog)
|
||||
{
|
||||
if (file_exists($blog->image)) {
|
||||
Storage::delete($blog->image);
|
||||
}
|
||||
|
||||
$blog->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Blog deleted successfully'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$blog_status = Blog::findOrFail($id);
|
||||
$blog_status->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Blog']);
|
||||
}
|
||||
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Blog::whereIn('id', $request->ids)->delete();
|
||||
return response()->json([
|
||||
'message' => __('Selected Blog deleted successfully'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function filterComment($id, Request $request)
|
||||
{
|
||||
$blog = Blog::findOrFail($id);
|
||||
$comments = Comment::with('blog:id')->whereStatus(1)->where('blog_id', $blog->id)->when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%')
|
||||
->orwhere('email', 'like', '%' . $request->search . '%')
|
||||
->orwhere('comment', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.website-setting.blogs.comments.datas', compact('comments','blog'))->render()
|
||||
]);
|
||||
}
|
||||
return view('admin.website-setting.blogs.comments.index', compact('comments','blog'));
|
||||
}
|
||||
}
|
||||
105
app/Http/Controllers/Admin/AcnooBusinessCategoryController.php
Normal file
105
app/Http/Controllers/Admin/AcnooBusinessCategoryController.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\BusinessCategory;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AcnooBusinessCategoryController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$categories = BusinessCategory::when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('description', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.business-categories.datas', compact('categories'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.business-categories.index', compact('categories'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.business-categories.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'status' => 'nullable|in:on',
|
||||
'description' => 'nullable|string|max:255',
|
||||
'name' => 'required|string|unique:business_categories|max:255',
|
||||
]);
|
||||
|
||||
BusinessCategory::create($request->except('status') + [
|
||||
'status' => $request->status ? 1 : 0,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Category saved successfully'),
|
||||
'redirect' => route('admin.business-categories.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$category = BusinessCategory::find($id);
|
||||
return view('admin.business-categories.edit', compact('category'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'in:on',
|
||||
'description' => 'nullable|string|max:255',
|
||||
'name' => 'required|string|max:255|unique:business_categories,name,' . $id,
|
||||
]);
|
||||
|
||||
$category = BusinessCategory::find($id);
|
||||
|
||||
$category->update($request->except('status') + [
|
||||
'status' => $request->status ? 1 : 0,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Category updated successfully'),
|
||||
'redirect' => route('admin.business-categories.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$category = BusinessCategory::findOrFail($id);
|
||||
$category->delete();
|
||||
return response()->json([
|
||||
'message' => __('Category deleted successfully'),
|
||||
'redirect' => route('admin.business-categories.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
BusinessCategory::whereIn('id', $request->ids)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Category deleted successfully'),
|
||||
'redirect' => route('admin.business-categories.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$category = BusinessCategory::findOrFail($id);
|
||||
$category->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Business category']);
|
||||
}
|
||||
}
|
||||
347
app/Http/Controllers/Admin/AcnooBusinessController.php
Normal file
347
app/Http/Controllers/Admin/AcnooBusinessController.php
Normal file
@@ -0,0 +1,347 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\User;
|
||||
use App\Models\Gateway;
|
||||
use App\Models\Business;
|
||||
use App\Models\PaymentType;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\PlanSubscribe;
|
||||
use App\Models\BusinessCategory;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Modules\AffiliateAddon\App\Models\Affiliate;
|
||||
use Modules\AffiliateAddon\App\Models\AffiliateTransaction;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class AcnooBusinessController extends Controller
|
||||
{
|
||||
|
||||
use HasUploader;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:business-create')->only('create', 'store');
|
||||
$this->middleware('permission:business-read')->only('index');
|
||||
$this->middleware('permission:business-update')->only('edit', 'update', 'status');
|
||||
$this->middleware('permission:business-delete')->only('destroy', 'deleteAll');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$plans = Plan::latest()->get();
|
||||
$gateways = Gateway::latest()->get();
|
||||
|
||||
$search = $request->input('search');
|
||||
|
||||
$businesses = Business::with(['enrolled_plan:id,plan_id', 'enrolled_plan.plan:id,subscriptionName', 'category:id,name'])
|
||||
->when($request->search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('companyName', 'like', '%' . $search . '%')
|
||||
->orWhere('phoneNumber', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('user', function ($q) use ($search) {
|
||||
$q->where('email', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('enrolled_plan.plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.business.datas', compact('businesses'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.business.index', compact('businesses', 'gateways', 'plans'));
|
||||
}
|
||||
|
||||
|
||||
public function create()
|
||||
{
|
||||
$plans = Plan::where('status', 1)->latest()->get();
|
||||
$categories = BusinessCategory::latest()->get();
|
||||
return view('admin.business.create', compact('plans', 'categories'));
|
||||
}
|
||||
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'address' => 'nullable|max:250',
|
||||
'companyName' => 'required|max:250',
|
||||
'email' => 'required|email|unique:users',
|
||||
'password' => 'required|string|min:4|confirmed',
|
||||
'pictureUrl' => 'nullable|image',
|
||||
'phoneNumber' => 'nullable',
|
||||
'shopOpeningBalance' => 'nullable|numeric',
|
||||
'business_category_id' => 'required|exists:business_categories,id',
|
||||
'plan_subscribe_id' => 'nullable|exists:plans,id',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
$business = Business::create([
|
||||
'companyName' => $request->companyName,
|
||||
'address' => $request->address,
|
||||
'email' => $request->email,
|
||||
'phoneNumber' => $request->phoneNumber,
|
||||
'shopOpeningBalance' => $request->shopOpeningBalance,
|
||||
'business_category_id' => $request->business_category_id,
|
||||
'pictureUrl' => $request->pictureUrl ? $this->upload($request, 'pictureUrl') : NULL,
|
||||
'user_id' => $user->id,
|
||||
]);
|
||||
|
||||
PaymentType::create([
|
||||
'name' => "Cash",
|
||||
'business_id' => $business->id
|
||||
]);
|
||||
|
||||
User::create([
|
||||
'business_id' => $business->id,
|
||||
'name' => $request->companyName,
|
||||
'email' => $request->email,
|
||||
'phone' => $request->phoneNumber,
|
||||
'image' => $request->pictureUrl ? $this->upload($request, 'pictureUrl') : NULL,
|
||||
'password' => Hash::make($request->password),
|
||||
'user_id' => $user->id,
|
||||
]);
|
||||
|
||||
if ($request->plan_subscribe_id) {
|
||||
$plan = Plan::findOrFail($request->plan_subscribe_id);
|
||||
|
||||
$subscribe = PlanSubscribe::create([
|
||||
'plan_id' => $plan->id,
|
||||
'notes' => $request->notes,
|
||||
'duration' => $plan->duration,
|
||||
'business_id' => $business->id,
|
||||
'price' => $plan->subscriptionPrice,
|
||||
'gateway_id' => $request->gateway_id,
|
||||
'allow_multibranch' => $plan->allow_multibranch,
|
||||
'addon_domain_limit' => $plan->addon_domain_limit ?? 0,
|
||||
'subdomain_limit' => $plan->subdomain_limit ?? 0,
|
||||
]);
|
||||
|
||||
$business->update([
|
||||
'subscriptionDate' => now(),
|
||||
'plan_subscribe_id' => $subscribe->id,
|
||||
'will_expire' => now()->addDays($plan->duration),
|
||||
]);
|
||||
|
||||
sendNotification($subscribe->id, route('admin.subscription-reports.index', ['id' => $subscribe->id]), __('Plan subscribed by ' . $user->name));
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Business created successfully.'),
|
||||
'redirect' => route('admin.business.index'),
|
||||
]);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollback();
|
||||
return response()->json(__('Something went wrong.'), 403);
|
||||
}
|
||||
}
|
||||
|
||||
public function edit(string $id)
|
||||
{
|
||||
$plans = Plan::latest()->get();
|
||||
$business = Business::findOrFail($id);
|
||||
$categories = BusinessCategory::latest()->get();
|
||||
$user = User::where('business_id', $business->id)->firstOrFail();
|
||||
return view('admin.business.edit', compact('business', 'plans', 'categories', 'user'));
|
||||
}
|
||||
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
|
||||
$business = Business::findOrFail($id);
|
||||
$user = User::where('business_id', $business->id)->firstOrFail();
|
||||
|
||||
$request->validate([
|
||||
'address' => 'nullable|max:250',
|
||||
'companyName' => 'required|max:250',
|
||||
'email' => [
|
||||
'required',
|
||||
'email',
|
||||
Rule::unique('users', 'email')->ignore($user->id),
|
||||
],
|
||||
'password' => 'nullable|string|min:4|confirmed',
|
||||
'pictureUrl' => 'nullable|image',
|
||||
'phoneNumber' => 'nullable',
|
||||
'shopOpeningBalance' => 'nullable|numeric',
|
||||
'business_category_id' => 'required|exists:business_categories,id',
|
||||
'plan_subscribe_id' => 'nullable|exists:plans,id',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
|
||||
$business->update([
|
||||
'companyName' => $request->companyName,
|
||||
'address' => $request->address,
|
||||
'email' => $request->email,
|
||||
'phoneNumber' => $request->phoneNumber,
|
||||
'shopOpeningBalance' => $request->shopOpeningBalance,
|
||||
'business_category_id' => $request->business_category_id,
|
||||
'pictureUrl' => $request->pictureUrl ? $this->upload($request, 'pictureUrl', $business->pictureUrl) : $business->pictureUrl,
|
||||
]);
|
||||
|
||||
$user->update([
|
||||
'name' => $request->companyName,
|
||||
'email' => $request->email,
|
||||
'phone' => $request->phoneNumber,
|
||||
'image' => $request->pictureUrl ? $this->upload($request, 'pictureUrl') : $user->image,
|
||||
'password' => $request->password ? Hash::make($request->password) : $user->password,
|
||||
]);
|
||||
|
||||
$prev_subscription = PlanSubscribe::where('business_id', $business->id)->latest()->first();
|
||||
|
||||
if ($request->plan_subscribe_id && ($prev_subscription->plan_id != $request->plan_subscribe_id)) {
|
||||
$plan = Plan::findOrFail($request->plan_subscribe_id);
|
||||
$subscribe = PlanSubscribe::create([
|
||||
'plan_id' => $plan->id,
|
||||
'notes' => $request->notes,
|
||||
'duration' => $plan->duration,
|
||||
'business_id' => $business->id,
|
||||
'price' => $plan->subscriptionPrice,
|
||||
'gateway_id' => $request->gateway_id,
|
||||
'allow_multibranch' => $plan->allow_multibranch,
|
||||
'addon_domain_limit' => $plan->addon_domain_limit ?? 0,
|
||||
'subdomain_limit' => $plan->subdomain_limit ?? 0,
|
||||
]);
|
||||
|
||||
$business->update([
|
||||
'subscriptionDate' => now(),
|
||||
'plan_subscribe_id' => $subscribe->id,
|
||||
'will_expire' => now()->addDays($plan->duration),
|
||||
]);
|
||||
|
||||
sendNotification($subscribe->id, route('admin.subscription-reports.index', ['id' => $subscribe->id]), __('Plan subscribed by ' . auth()->user()->name));
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Business updated successfully.'),
|
||||
'redirect' => route('admin.business.index'),
|
||||
]);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollback();
|
||||
return response()->json(__('Something went wrong.'), 403);
|
||||
}
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$business = Business::findOrFail($id);
|
||||
$business->delete();
|
||||
return response()->json([
|
||||
'message' => __('Business deleted successfully'),
|
||||
'redirect' => route('admin.business.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Business::whereIn('id', $request->ids)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Business deleted successfully'),
|
||||
'redirect' => route('admin.business.index')
|
||||
]);
|
||||
}
|
||||
|
||||
// Upgrade plan code
|
||||
|
||||
public function upgradePlan(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'price' => 'required|string',
|
||||
'notes' => 'required|string',
|
||||
'plan_id' => 'required|exists:plans,id',
|
||||
'business_id' => 'required|exists:businesses,id',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
|
||||
$plan = Plan::findOrFail($request->plan_id);
|
||||
$business = Business::findOrFail($request->business_id);
|
||||
|
||||
$subscribe = PlanSubscribe::create([
|
||||
'plan_id' => $plan->id,
|
||||
'payment_status' => 'paid',
|
||||
'notes' => $request->notes,
|
||||
'duration' => $plan->duration,
|
||||
'business_id' => $business->id,
|
||||
'price' => $plan->subscriptionPrice,
|
||||
'gateway_id' => $request->gateway_id,
|
||||
'allow_multibranch' => $plan->allow_multibranch,
|
||||
'addon_domain_limit' => $plan->addon_domain_limit ?? 0,
|
||||
'subdomain_limit' => $plan->subdomain_limit ?? 0
|
||||
]);
|
||||
|
||||
Cache::forget('plan-data-' . $business->id);
|
||||
|
||||
$business->update([
|
||||
'subscriptionDate' => now(),
|
||||
'plan_subscribe_id' => $subscribe->id,
|
||||
'will_expire' => now()->addDays($plan->duration),
|
||||
]);
|
||||
|
||||
if (moduleCheck('AffiliateAddon') && $business->affiliator_id) {
|
||||
$affiliateUser = User::find($business->affiliator_id);
|
||||
|
||||
if ($affiliateUser && $plan->affiliate_commission > 0) {
|
||||
$commission = ($plan->subscriptionPrice * $plan->affiliate_commission) / 100;
|
||||
|
||||
Affiliate::where('user_id', $affiliateUser->id)->increment('balance', $commission);
|
||||
|
||||
AffiliateTransaction::create([
|
||||
'user_id' => $affiliateUser->id,
|
||||
'business_id' => $business->id,
|
||||
'trx' => strtoupper(str()->random(10)),
|
||||
'type' => 'credit',
|
||||
'amount' => $commission,
|
||||
'title' => 'Commission from Order #' . $subscribe->id,
|
||||
'reference_id' => $subscribe->id,
|
||||
'reference_type' => 'PlanSubscribe',
|
||||
'note' => 'User purchased via your referral link',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
sendNotification($subscribe->id, route('admin.subscription-reports.index', ['id' => $subscribe->id]), __('Plan subscribed by ' . auth()->user()->name));
|
||||
|
||||
DB::commit();
|
||||
return response()->json([
|
||||
'message' => __('Subscription enrolled successfully.'),
|
||||
'redirect' => route('admin.subscription-reports.index'),
|
||||
]);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollback();
|
||||
return response()->json(__('Something went wrong.'), 403);
|
||||
}
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$business = Business::findOrFail($id);
|
||||
$business->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Business']);
|
||||
}
|
||||
}
|
||||
28
app/Http/Controllers/Admin/AcnooCommentController.php
Normal file
28
app/Http/Controllers/Admin/AcnooCommentController.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Comment;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AcnooCommentController extends Controller
|
||||
{
|
||||
public function destroy(Comment $comment)
|
||||
{
|
||||
$comment->delete();
|
||||
return response()->json([
|
||||
'message' => __('Comment deleted successfully.'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Comment::whereIn('id', $request->ids)->delete();
|
||||
return response()->json([
|
||||
'message' => __('Selected Comments deleted successfully'),
|
||||
'redirect' => route('admin.blogs.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
150
app/Http/Controllers/Admin/AcnooCurrencyController.php
Normal file
150
app/Http/Controllers/Admin/AcnooCurrencyController.php
Normal file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Currency;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class AcnooCurrencyController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:currencies-create')->only('create', 'store');
|
||||
$this->middleware('permission:currencies-read')->only('index');
|
||||
$this->middleware('permission:currencies-update')->only('edit', 'update', 'default');
|
||||
$this->middleware('permission:currencies-delete')->only('destroy');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$currencies = Currency::orderBy('is_default', 'desc')->orderBy('status', 'desc')->when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('country_name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('code', 'like', '%' . $request->search . '%')
|
||||
->orWhere('symbol', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.currencies.datas', compact('currencies'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.currencies.index', compact('currencies'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$countries = base_path('lang/countrylist.json');
|
||||
$countries = json_decode(file_get_contents($countries), true);
|
||||
return view('admin.currencies.create', compact('countries'));
|
||||
}
|
||||
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|unique:currencies',
|
||||
'country_name' => 'nullable|string',
|
||||
'code' => 'required|string|unique:currencies',
|
||||
'rate' => 'nullable|numeric',
|
||||
'symbol' => 'nullable|string',
|
||||
'position' => 'nullable|string',
|
||||
'status' => 'required|integer',
|
||||
'is_default' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
Currency::create($request->all());
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Currency Created successfully'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function edit(Currency $currency)
|
||||
{
|
||||
$countries = base_path('lang/countrylist.json');
|
||||
$countries = json_decode(file_get_contents($countries), true);
|
||||
return view('admin.currencies.edit', compact('currency', 'countries'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Currency $currency)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|unique:currencies,name,' . $currency->id,
|
||||
'country_name' => 'nullable|string',
|
||||
'code' => 'required|string|unique:currencies,code,' . $currency->id,
|
||||
'rate' => 'nullable|numeric',
|
||||
'symbol' => 'nullable|string',
|
||||
'position' => 'nullable|string',
|
||||
'status' => 'required|integer',
|
||||
'is_default' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
$currency->update($request->all());
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Currency updated successfully'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function default($id)
|
||||
{
|
||||
$currency = Currency::find($id);
|
||||
|
||||
if ($currency) {
|
||||
Currency::where('id', '!=', $id)->update(['is_default' => 0]);
|
||||
$currency->update(['is_default' => 1]);
|
||||
cache()->forget('default_currency');
|
||||
}
|
||||
|
||||
return redirect()->route('admin.currencies.index')->with('message', __('Default currency activated successfully'));
|
||||
}
|
||||
|
||||
public function destroy(Currency $currency)
|
||||
{
|
||||
if ($currency->is_default) {
|
||||
return response()->json([
|
||||
'message' => __('You cannot delete it because it is default currency'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
], 400);
|
||||
}
|
||||
|
||||
$currency->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Currency deleted successfully'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
], 200);
|
||||
}
|
||||
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$default_currency_id = Currency::where('is_default', 1)->value('id');
|
||||
|
||||
if (count($request->ids) === 1 && in_array($default_currency_id, $request->ids)) {
|
||||
return response()->json([
|
||||
'message' => __('You cannot delete the default currency.'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
], 400);
|
||||
}
|
||||
|
||||
$idsToDelete = array_filter($request->ids, function ($id) use ($default_currency_id) {
|
||||
return $id != $default_currency_id;
|
||||
});
|
||||
|
||||
Currency::whereIn('id', $idsToDelete)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected currencies deleted successfully.'),
|
||||
'redirect' => route('admin.currencies.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
117
app/Http/Controllers/Admin/AcnooFeatureController.php
Normal file
117
app/Http/Controllers/Admin/AcnooFeatureController.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Feature;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooFeatureController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$features = Feature::when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('title', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.website-setting.features.datas', compact('features'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.website-setting.features.index', compact('features'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.website-setting.features.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'title' => 'required',
|
||||
'bg_color' => 'required',
|
||||
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
Feature::create($request->except('image') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image') : NULL
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Feature created successfully'),
|
||||
'redirect' => route('admin.features.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Feature $feature)
|
||||
{
|
||||
return view('admin.website-setting.features.edit', compact('feature'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Feature $feature)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'title' => 'required|string',
|
||||
'bg_color' => 'required|string',
|
||||
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
$feature->update($request->except('image') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image', $feature->image) : $feature->image,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Feature updated successfully'),
|
||||
'redirect' => route('admin.features.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Feature $feature)
|
||||
{
|
||||
if (file_exists($feature->image)) {
|
||||
Storage::delete($feature->image);
|
||||
}
|
||||
$feature->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Feature deleted successfully'),
|
||||
'redirect' => route('admin.features.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$feature = Feature::findOrFail($id);
|
||||
$feature->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Feature ']);
|
||||
}
|
||||
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$features = Feature::whereIn('id', $request->ids)->get();
|
||||
foreach ($features as $feature) {
|
||||
if (file_exists($feature->image)) {
|
||||
Storage::delete($feature->image);
|
||||
}
|
||||
}
|
||||
|
||||
$features->each->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Feature deleted successfully'),
|
||||
'redirect' => route('admin.features.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
111
app/Http/Controllers/Admin/AcnooInterfaceController.php
Normal file
111
app/Http/Controllers/Admin/AcnooInterfaceController.php
Normal file
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\PosAppInterface;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooInterfaceController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$interfaces = PosAppInterface::latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.website-setting.interfaces.datas', compact('interfaces'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.website-setting.interfaces.index', compact('interfaces'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.website-setting.interfaces.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
PosAppInterface::create($request->except('image') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image') : NULL
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Interfaces created successfully'),
|
||||
'redirect' => route('admin.interfaces.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$interface = PosAppInterface::findOrFail($id);
|
||||
return view('admin.website-setting.interfaces.edit', compact('interface'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$interface = PosAppInterface::findOrFail($id);
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
$interface->update($request->except('image') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image', $interface->image) : $interface->image,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Interface updated successfully'),
|
||||
'redirect' => route('admin.interfaces.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$posAppInterface = PosAppInterface::findOrFail($id);
|
||||
if (file_exists($posAppInterface->image)) {
|
||||
Storage::delete($posAppInterface->image);
|
||||
}
|
||||
$posAppInterface->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Interface deleted successfully'),
|
||||
'redirect' => route('admin.interfaces.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function status(Request $request,$id)
|
||||
{
|
||||
$posAppInterface = PosAppInterface::findOrFail($id);
|
||||
$posAppInterface->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Interface ']);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$posAppInterfaces = PosAppInterface::whereIn('id', $request->ids)->get();
|
||||
foreach ($posAppInterfaces as $posAppInterface) {
|
||||
if (file_exists($posAppInterface->image)) {
|
||||
Storage::delete($posAppInterface->image);
|
||||
}
|
||||
}
|
||||
|
||||
$posAppInterfaces->each->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Interface deleted successfully'),
|
||||
'redirect' => route('admin.interfaces.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
118
app/Http/Controllers/Admin/AcnooLanguageController.php
Normal file
118
app/Http/Controllers/Admin/AcnooLanguageController.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Language;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooLanguageController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
public function index(Request $request)
|
||||
{
|
||||
$languages = Language::when($request->has('search'), function ($q) use ($request) {
|
||||
$q->where(function ($query) use ($request) {
|
||||
$query->where('name', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})
|
||||
->latest();
|
||||
|
||||
if ($request->ajax()) {
|
||||
$languages = $languages->get();
|
||||
|
||||
return response()->json([
|
||||
'data' => view('admin.website-setting.languages.datas', compact('languages'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
$languages = $languages->paginate(20);
|
||||
return view('admin.website-setting.languages.index', compact('languages'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.website-setting.languages.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'name' => 'required|string',
|
||||
'icon' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
Language::create($request->except('icon') + [
|
||||
'icon' => $request->icon ? $this->upload($request, 'icon') : NULL
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Laguage created successfully'),
|
||||
'redirect' => route('admin.languages.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Language $language)
|
||||
{
|
||||
return view('admin.website-setting.languages.edit', compact('language'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Language $language)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required',
|
||||
'name' => 'required|string',
|
||||
'icon' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
$language->update($request->except('icon') + [
|
||||
'icon' => $request->icon ? $this->upload($request, 'icon', $language->icon) : $language->icon,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Language updated successfully'),
|
||||
'redirect' => route('admin.languages.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Language $language)
|
||||
{
|
||||
if (file_exists($language->icon)) {
|
||||
Storage::delete($language->icon);
|
||||
}
|
||||
$language->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Language deleted successfully'),
|
||||
'redirect' => route('admin.languages.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$language = Language::findOrFail($id);
|
||||
$language->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Language ']);
|
||||
}
|
||||
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$languages = Language::whereIn('id', $request->ids)->get();
|
||||
foreach ($languages as $language) {
|
||||
if (file_exists($language->icon)) {
|
||||
Storage::delete($language->icon);
|
||||
}
|
||||
}
|
||||
|
||||
$languages->each->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Language deleted successfully'),
|
||||
'redirect' => route('admin.languages.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
55
app/Http/Controllers/Admin/AcnooMessageController.php
Normal file
55
app/Http/Controllers/Admin/AcnooMessageController.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Message;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AcnooMessageController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:messages-read')->only('index');
|
||||
$this->middleware('permission:messages-delete')->only('destroy');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$messages = Message::when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('phone', 'like', '%' . $request->search . '%')
|
||||
->orWhere('email', 'like', '%' . $request->search . '%')
|
||||
->orWhere('company_name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('message', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.messages.datas', compact('messages'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.messages.index', compact('messages'));
|
||||
}
|
||||
|
||||
public function destroy(Message $message)
|
||||
{
|
||||
$message->delete();
|
||||
return response()->json([
|
||||
'message' => __('Message deleted successfully'),
|
||||
'redirect' => route('admin.messages.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Message::whereIn('id', $request->ids)->delete();
|
||||
return response()->json([
|
||||
'message' => __('Selected Mesages deleted successfully'),
|
||||
'redirect' => route('admin.messages.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
164
app/Http/Controllers/Admin/AcnooPlanController.php
Normal file
164
app/Http/Controllers/Admin/AcnooPlanController.php
Normal file
@@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Plan;
|
||||
use App\Models\PlanSubscribe;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AcnooPlanController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:plans-create')->only('create', 'store');
|
||||
$this->middleware('permission:plans-read')->only('index');
|
||||
$this->middleware('permission:plans-update')->only('edit', 'update', 'status');
|
||||
$this->middleware('permission:plans-delete')->only('destroy', 'deleteAll');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$search = $request->input('search');
|
||||
|
||||
$plans = Plan::when($request->search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%')
|
||||
->orWhere('duration', 'like', '%' . $search . '%')
|
||||
->orWhere('subscriptionPrice', 'like', '%' . $search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.plans.datas', compact('plans'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.plans.index', compact('plans'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.plans.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'duration' => 'required|string',
|
||||
'offerPrice' => 'nullable|numeric|min:0|max:9999999999999',
|
||||
'subscriptionName' => 'required|string|max:255|unique:plans,subscriptionName',
|
||||
'subscriptionPrice' => 'required|numeric|min:0|max:9999999999999',
|
||||
'addon_domain_limit' => 'nullable|integer|min:0',
|
||||
'subdomain_limit' => 'nullable|integer|min:0',
|
||||
]);
|
||||
|
||||
Plan::create($request->except(['offerPrice', 'status', 'allow_multibranch']) + [
|
||||
'offerPrice' => $request->offerPrice ?? NULL,
|
||||
'status' => $request->status ? 1 : 0,
|
||||
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Subscription Plan created successfully'),
|
||||
'redirect' => route('admin.plans.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Plan $plan)
|
||||
{
|
||||
return view('admin.plans.edit', compact('plan'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Plan $plan)
|
||||
{
|
||||
$request->validate([
|
||||
'duration' => 'required|string',
|
||||
'offerPrice' => 'nullable|numeric|min:0|max:9999999999999',
|
||||
'subscriptionPrice' => 'required|numeric|min:0|max:9999999999999',
|
||||
'subscriptionName' => 'required|string|max:255|unique:plans,subscriptionName,' . $plan->id,
|
||||
'addon_domain_limit' => 'nullable|integer|min:0',
|
||||
'subdomain_limit' => 'nullable|integer|min:0',
|
||||
]);
|
||||
|
||||
|
||||
if ($plan->subscriptionName == 'Free' && ($plan->subscriptionName != $request->subscriptionName || $plan->subscriptionPrice != $request->subscriptionPrice || $plan->offerPrice != $request->offerPrice)) {
|
||||
return response()->json([
|
||||
'message' => __('You can not change the package name & price of free plan.'),
|
||||
], 406);
|
||||
}
|
||||
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$plan->update($request->except(['offerPrice', 'status', 'allow_multibranch']) + [
|
||||
'offerPrice' => $request->offerPrice ?? NULL,
|
||||
'status' => $request->status ? 1 : 0,
|
||||
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
|
||||
]);
|
||||
|
||||
if ($request->allow_existing_subscriber){
|
||||
$updateData = [
|
||||
'allow_multibranch' => $request->allow_multibranch ? 1 : 0,
|
||||
'addon_domain_limit' => $request->addon_domain_limit ?? 0,
|
||||
'subdomain_limit' => $request->subdomain_limit ?? 0,
|
||||
];
|
||||
|
||||
PlanSubscribe::where('plan_id', $plan->id)->update($updateData);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Subscription Plan updated successfully'),
|
||||
'redirect' => route('admin.plans.index')
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'message' => 'Something went wrong.',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function status(Request $request, $id)
|
||||
{
|
||||
$plan = Plan::findOrFail($id);
|
||||
if ($plan->subscriptionName == 'Free') {
|
||||
return response()->json([
|
||||
'message' => __('You can not change the status for free plan.'),
|
||||
], 406);
|
||||
}
|
||||
$plan->update(['status' => $request->status]);
|
||||
return response()->json(['message' => 'Plan']);
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$plan = Plan::findOrFail($id);
|
||||
if ($plan->subscriptionName == 'Free') {
|
||||
return response()->json([
|
||||
'message' => __('You can not delete free plan.'),
|
||||
], 406);
|
||||
}
|
||||
|
||||
$plan->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Subscription Plan deleted successfully'),
|
||||
'redirect' => route('admin.plans.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Plan::whereIn('id', $request->ids)->where('subscriptionName', '!=', 'Free')->delete();
|
||||
return response()->json([
|
||||
'message' => __('Subscription plan deleted successfully'),
|
||||
'redirect' => route('admin.plans.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
38
app/Http/Controllers/Admin/AcnooPrivacyPloicyController.php
Normal file
38
app/Http/Controllers/Admin/AcnooPrivacyPloicyController.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AcnooPrivacyPloicyController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$privacy_policy = Option::where('key', 'privacy-policy')->first();
|
||||
return view('admin.settings.privacy-policy.index', compact('privacy_policy'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'privacy_title' => 'required|string',
|
||||
'description_one' => 'required|string',
|
||||
'description_two' => 'required|string',
|
||||
]);
|
||||
|
||||
Option::updateOrCreate(
|
||||
['key' => 'privacy-policy'],
|
||||
['value' => [
|
||||
'privacy_title' => $request->privacy_title,
|
||||
'description_one' => $request->description_one,
|
||||
'description_two' => $request->description_two
|
||||
]]
|
||||
);
|
||||
|
||||
Cache::forget('privacy-policy');
|
||||
return response()->json(__('Privacy And Policy updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AcnooSettingsManagerController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$otp = Option::where('key', 'email-varification')->first();
|
||||
$domain = Option::where('key', 'domain-setting')->first();
|
||||
return view('admin.manage-settings.index', compact('otp', 'domain'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'otp_status' => 'required|string|max:100|in:on,off',
|
||||
'otp_expiration_time' => 'nullable|string|max:100',
|
||||
'otp_duration_type' => 'nullable|string|max:100|in:minute,second',
|
||||
]);
|
||||
|
||||
$otpExpiration = $request->otp_status === 'on' ? $request->otp_expiration_time : null;
|
||||
$otpDurationType = $request->otp_status === 'on' ? $request->otp_duration_type : null;
|
||||
|
||||
Option::updateOrCreate(
|
||||
['key' => 'email-varification'],
|
||||
['value' => [
|
||||
'otp_status' => $request->otp_status,
|
||||
'otp_expiration_time' => $otpExpiration,
|
||||
'otp_duration_type' => $otpDurationType,
|
||||
]]
|
||||
);
|
||||
|
||||
Cache::forget('email-varification');
|
||||
|
||||
return response()->json(__('Otp setting updated successfully.'));
|
||||
}
|
||||
|
||||
public function domain(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'ssl_required' => 'required|string|max:100|in:on,off',
|
||||
'automatic_approve' => 'required|string|max:100|in:on,off',
|
||||
]);
|
||||
|
||||
Option::updateOrCreate(
|
||||
['key' => 'domain-setting'],
|
||||
['value' => [
|
||||
'ssl_required' => $request->ssl_required,
|
||||
'automatic_approve' => $request->automatic_approve,
|
||||
]]
|
||||
);
|
||||
|
||||
Cache::forget('domain-setting');
|
||||
|
||||
return response()->json(__('Domain setting updated successfully.'));
|
||||
}
|
||||
}
|
||||
144
app/Http/Controllers/Admin/AcnooSubscriptionController.php
Normal file
144
app/Http/Controllers/Admin/AcnooSubscriptionController.php
Normal file
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\PlanSubscribe;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Modules\AffiliateAddon\App\Models\Affiliate;
|
||||
use Modules\AffiliateAddon\App\Models\AffiliateTransaction;
|
||||
|
||||
|
||||
class AcnooSubscriptionController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$search = $request->input('search');
|
||||
|
||||
$subscribers = PlanSubscribe::with(['plan:id,subscriptionName', 'business:id,companyName,business_category_id,pictureUrl', 'business.category:id,name', 'gateway:id,name'])
|
||||
->when($request->search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('duration', 'like', '%' . $search . '%')
|
||||
->orWhereHas('plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('gateway', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('business', function ($q) use ($search) {
|
||||
$q->where('companyName', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20)
|
||||
->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.subscribe-order.datas', compact('subscribers'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.subscribe-order.index', compact('subscribers'));
|
||||
}
|
||||
|
||||
public function reject(Request $request, string $id)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'notes' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
$reject = PlanSubscribe::findOrFail($id);
|
||||
|
||||
if ($reject) {
|
||||
$reject->update([
|
||||
'payment_status' => 'reject',
|
||||
'notes' => $request->notes,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Status Unpaid',
|
||||
'redirect' => route('admin.subscription-orders.index'),
|
||||
]);
|
||||
} else {
|
||||
return response()->json(['message' => 'request not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function paid(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'notes' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
$subscribe = PlanSubscribe::findOrFail($id);
|
||||
|
||||
$existingNotes = $subscribe->notes ?? [];
|
||||
$updatedNotes = array_merge($existingNotes, ['reason' => $request->notes]);
|
||||
|
||||
$subscribe->update($request->except('notes') + [
|
||||
'payment_status' => 'paid',
|
||||
'notes' => $updatedNotes,
|
||||
]);
|
||||
|
||||
$subscribe->business->update([
|
||||
'subscriptionDate' => now(),
|
||||
'plan_subscribe_id' => $subscribe->id,
|
||||
'will_expire' => now()->addDays($subscribe->plan->duration),
|
||||
]);
|
||||
|
||||
$business = $subscribe->business;
|
||||
$plan = $subscribe->plan;
|
||||
if (moduleCheck('AffiliateAddon') && $business->affiliator_id) {
|
||||
$affiliateUser = User::find($business->affiliator_id);
|
||||
|
||||
if ($affiliateUser && $plan->affiliate_commission > 0) {
|
||||
$commission = ($plan->subscriptionPrice * $plan->affiliate_commission) / 100;
|
||||
|
||||
Affiliate::where('user_id', $affiliateUser->id)->increment('balance', $commission);
|
||||
|
||||
AffiliateTransaction::create([
|
||||
'user_id' => $affiliateUser->id,
|
||||
'business_id' => $business->id,
|
||||
'trx' => strtoupper(str()->random(10)),
|
||||
'type' => 'credit',
|
||||
'amount' => $commission,
|
||||
'title' => 'Commission from Order #' . $subscribe->id,
|
||||
'reference_id' => $subscribe->id,
|
||||
'reference_type' => 'PlanSubscribe',
|
||||
'note' => 'User purchased via your referral link',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
Cache::forget('plan-data-'. $subscribe->business_id);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Status Paid',
|
||||
'redirect' => route('admin.subscription-orders.index'),
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json(['message' => 'request not found'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function getInvoice($invoice_id)
|
||||
{
|
||||
$subscriber = PlanSubscribe::with(['plan:id,subscriptionName', 'business:id,companyName,business_category_id,phoneNumber,address', 'business.category:id,name', 'gateway:id,name'])->findOrFail($invoice_id);
|
||||
return view('admin.subscribe-order.invoice', compact('subscriber'));
|
||||
}
|
||||
}
|
||||
38
app/Http/Controllers/Admin/AcnooTermConditionController.php
Normal file
38
app/Http/Controllers/Admin/AcnooTermConditionController.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AcnooTermConditionController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$term_condition = Option::where('key', 'term-condition')->first();
|
||||
return view('admin.settings.term-condition.index', compact('term_condition'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'term_title' => 'required|string',
|
||||
'description_one' => 'required|string',
|
||||
'description_two' => 'required|string',
|
||||
]);
|
||||
|
||||
Option::updateOrCreate(
|
||||
['key' => 'term-condition'],
|
||||
['value' => [
|
||||
'term_title' => $request->term_title,
|
||||
'description_one' => $request->description_one,
|
||||
'description_two' => $request->description_two
|
||||
]]
|
||||
);
|
||||
|
||||
Cache::forget('term-condition');
|
||||
return response()->json(__('Term And Condition updated successfully.'));
|
||||
}
|
||||
}
|
||||
121
app/Http/Controllers/Admin/AcnooTestimonialController.php
Normal file
121
app/Http/Controllers/Admin/AcnooTestimonialController.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Testimonial;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class AcnooTestimonialController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:testimonials-read')->only('index');
|
||||
$this->middleware('permission:testimonials-create')->only('create', 'store');
|
||||
$this->middleware('permission:testimonials-update')->only('edit', 'update','status');
|
||||
$this->middleware('permission:testimonials-delete')->only('destroy','deleteAll');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$testimonials = Testimonial::when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('text', 'like', '%' . $request->search . '%')
|
||||
->orWhere('client_name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('work_at', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.testimonials.datas', compact('testimonials'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.testimonials.index', compact('testimonials'));
|
||||
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.testimonials.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'work_at' => 'nullable|string',
|
||||
'text' => 'nullable',
|
||||
'star' => 'nullable',
|
||||
'client_name' => 'required|string',
|
||||
'client_image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
Testimonial::create($request->except('client_image') + [
|
||||
'client_image' => $request->client_image ? $this->upload($request, 'client_image') : NULL
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Testimonial created successfully'),
|
||||
'redirect' => route('admin.testimonials.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Testimonial $testimonial)
|
||||
{
|
||||
return view('admin.testimonials.edit', compact('testimonial'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Testimonial $testimonial)
|
||||
{
|
||||
$request->validate([
|
||||
'work_at' => 'nullable|string',
|
||||
'text' => 'nullable|string',
|
||||
'star' => 'nullable|integer',
|
||||
'client_name' => 'required|string',
|
||||
'client_image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
|
||||
]);
|
||||
|
||||
$testimonial->update($request->except('client_image') + [
|
||||
'client_image' => $request->client_image ? $this->upload($request, 'client_image', $testimonial->client_image) : $testimonial->client_image,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Testimonial updated successfully'),
|
||||
'redirect' => route('admin.testimonials.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Testimonial $testimonial)
|
||||
{
|
||||
if (file_exists($testimonial->client_image)) {
|
||||
Storage::delete($testimonial->client_image);
|
||||
}
|
||||
$testimonial->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Testimonial Deleted successfully'),
|
||||
'redirect' => route('admin.testimonials.index')
|
||||
]);
|
||||
}
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
$testimonials = Testimonial::whereIn('id', $request->ids)->get();
|
||||
foreach ($testimonials as $testimonial) {
|
||||
if (file_exists($testimonial->image)) {
|
||||
Storage::delete($testimonial->image);
|
||||
}
|
||||
}
|
||||
|
||||
$testimonials->each->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected Testimonial deleted successfully'),
|
||||
'redirect' => route('admin.testimonials.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
50
app/Http/Controllers/Admin/AcnooWebSettingController.php
Normal file
50
app/Http/Controllers/Admin/AcnooWebSettingController.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Option;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AcnooWebSettingController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function index()
|
||||
{
|
||||
$page_data = get_option('manage-pages');
|
||||
return view('admin.website-setting.manage-pages', compact('page_data'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $key)
|
||||
{
|
||||
$option = Option::where('key', 'manage-pages')->first();
|
||||
Option::updateOrCreate(
|
||||
['key' => 'manage-pages'],
|
||||
['value' => [
|
||||
'headings' => $request->except('_token', '_method','slider_image','scanner_image','card_icons','compatible_image','firebase_image','contact_us_icon','footer_socials_icons','footer_scanner_image','footer_apple_app_image','footer_google_app_image','watch_image','about_image','evanto_logo', 'slider_bg_img'),
|
||||
|
||||
'slider_image' => $request->slider_image ? $this->upload($request, 'slider_image') : $option->value['slider_image'] ?? null,
|
||||
'scanner_image' => $request->scanner_image ? $this->upload($request, 'scanner_image') : $option->value['scanner_image'] ?? null,
|
||||
'watch_image' => $request->watch_image ? $this->upload($request, 'watch_image') : $option->value['watch_image'] ?? null,
|
||||
'compatible_image' => $request->compatible_image ? $this->upload($request, 'compatible_image') : $option->value['compatible_image'] ?? null,
|
||||
'firebase_image' => $request->firebase_image ? $this->upload($request, 'firebase_image') : $option->value['firebase_image'] ?? null,
|
||||
'contact_us_icon' => $request->contact_us_icon ? $this->upload($request, 'contact_us_icon') : $option->value['contact_us_icon'] ?? null,
|
||||
'footer_scanner_image' => $request->footer_scanner_image ? $this->upload($request, 'footer_scanner_image') : $option->value['footer_scanner_image'] ?? null,
|
||||
'footer_apple_app_image' => $request->footer_apple_app_image ? $this->upload($request, 'footer_apple_app_image') : $option->value['footer_apple_app_image'] ?? null,
|
||||
'footer_google_app_image' => $request->footer_google_app_image ? $this->upload($request, 'footer_google_app_image') : $option->value['footer_google_app_image'] ?? null,
|
||||
'about_image' => $request->about_image ? $this->upload($request, 'about_image') : $option->value['about_image'] ?? null,
|
||||
'evanto_logo' => $request->evanto_logo ? $this->upload($request, 'evanto_logo') : $option->value['evanto_logo'] ?? null,
|
||||
'slider_bg_img' => $request->slider_bg_img ? $this->upload($request, 'slider_bg_img') : $option->value['slider_bg_img'] ?? null,
|
||||
|
||||
'card_icons' => $request->card_icons ? $this->multipleUpload($request, 'card_icons') : $option->value['card_icons'] ?? null,
|
||||
'footer_socials_icons' => $request->footer_socials_icons ? $this->multipleUpload($request, 'footer_socials_icons') : $option->value['footer_socials_icons'] ?? null,
|
||||
]
|
||||
]);
|
||||
|
||||
Cache::forget('manage-pages');
|
||||
return response()->json(__('Pages updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\AffiliateAddon\App\Models\AffiliateTransaction;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AcnooWithdrawRequestController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$withdraws = AffiliateTransaction::with('user:id,name')->latest()->paginate(20);
|
||||
return view('admin.affiliate-modules.withdraws.index', compact('withdraws'));
|
||||
}
|
||||
|
||||
public function acnooFilter(Request $request)
|
||||
{
|
||||
$search = $request->input('search');
|
||||
|
||||
$withdraws = AffiliateTransaction::with('user:id,name')->when($search, function ($q) use ($search) {
|
||||
$q->where(function ($q) use ($search) {
|
||||
$q->where('amount', 'like', '%' . $search . '%')
|
||||
->orWhereHas('user', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.affiliate-modules.withdraws.datas', compact('withdraws'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect(url()->previous());
|
||||
}
|
||||
|
||||
public function reject(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'note' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
$reject = AffiliateTransaction::findOrFail($id);
|
||||
|
||||
if ($reject) {
|
||||
$reject->update([
|
||||
'status' => 'unpaid',
|
||||
'note' => $request->note,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Status Unpaid',
|
||||
'redirect' => route('admin.affiliate-withdrawals.index'),
|
||||
]);
|
||||
} else {
|
||||
return response()->json(['message' => 'request not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function paid(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'note' => 'nullable|string|max:255',
|
||||
]);
|
||||
|
||||
$paid = AffiliateTransaction::findOrFail($id);
|
||||
|
||||
if ($paid) {
|
||||
$paid->update([
|
||||
'status' => 'paid',
|
||||
'note' => $request->note,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Status Paid',
|
||||
'redirect' => route('admin.affiliate-withdrawals.index'),
|
||||
]);
|
||||
} else {
|
||||
return response()->json(['message' => 'request not found'], 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
117
app/Http/Controllers/Admin/AddonController.php
Normal file
117
app/Http/Controllers/Admin/AddonController.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use ZipArchive;
|
||||
use Illuminate\Http\Request;
|
||||
use Nwidart\Modules\Facades\Module;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
class AddonController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('admin.addons.index');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'purchase_code' => 'required',
|
||||
'file' => 'required|file|mimes:zip',
|
||||
]);
|
||||
|
||||
try {
|
||||
$is_valid = true;
|
||||
$module_name = pathinfo($request->file('file')->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
|
||||
if ($is_valid || $request->purchase_code == 'acnoo_license') {
|
||||
|
||||
$uploadedFile = $request->file('file');
|
||||
// Open the ZIP file using ZipArchive without saving it first
|
||||
$zip = new ZipArchive;
|
||||
$tempFilePath = $uploadedFile->getRealPath();
|
||||
|
||||
// Check if the ZIP file can be opened
|
||||
if ($zip->open($tempFilePath) === TRUE) {
|
||||
|
||||
// Define the path to the Modules folder
|
||||
$destinationPath = base_path('Modules');
|
||||
|
||||
// Ensure the Modules folder exists
|
||||
if (!File::exists($destinationPath)) {
|
||||
File::makeDirectory($destinationPath, 0755, true);
|
||||
}
|
||||
|
||||
$zip->extractTo($destinationPath);
|
||||
$zip->close();
|
||||
|
||||
// Specify the path to the module's migrations folder
|
||||
$moduleMigrationsPath = base_path('Modules/' . $module_name . '/Database/migrations');
|
||||
// Check if the migrations folder exists and contains migration files
|
||||
if (File::exists($moduleMigrationsPath)) {
|
||||
// Dynamically add the module's migrations path to the migrator
|
||||
$migrator = app('migrator');
|
||||
$migrator->path($moduleMigrationsPath);
|
||||
// Run the migrations from the module's migration path
|
||||
Artisan::call('migrate', ['--force' => true]);
|
||||
}
|
||||
|
||||
if (!moduleCheck($module_name)) {
|
||||
Artisan::call('module:seed', ['module' => $module_name]);
|
||||
}
|
||||
|
||||
// Update the modules_statuses.json file
|
||||
$filePath = base_path('modules_statuses.json');
|
||||
|
||||
// Read the contents of the JSON file
|
||||
$jsonContents = File::get($filePath);
|
||||
|
||||
// Decode the JSON into an associative array
|
||||
$data = json_decode($jsonContents, true);
|
||||
|
||||
// Add the new key-value pair to the array
|
||||
$data[$module_name] = true;
|
||||
|
||||
// Encode the array back into JSON format
|
||||
$newJsonContents = json_encode($data, JSON_PRETTY_PRINT);
|
||||
|
||||
// Write the updated contents back to the file
|
||||
File::put($filePath, $newJsonContents);
|
||||
|
||||
Artisan::call('cache:clear');
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('route:clear');
|
||||
Artisan::call('view:clear');
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Addon installed successfully.',
|
||||
'redirect' => route('admin.addons.index'),
|
||||
]);
|
||||
} else {
|
||||
return response()->json('Failed to open ZIP file', 406);
|
||||
}
|
||||
} else {
|
||||
return response()->json(['message' => __('Invalid purchase code.')], 406);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['success' => false, 'message' => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
public function show($module)
|
||||
{
|
||||
$module = Module::findOrFail($module);
|
||||
if ($module->isEnabled()) {
|
||||
$module->disable();
|
||||
} else {
|
||||
$module->enable();
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Addon'
|
||||
]);
|
||||
}
|
||||
}
|
||||
54
app/Http/Controllers/Admin/DashboardController.php
Normal file
54
app/Http/Controllers/Admin/DashboardController.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\User;
|
||||
use App\Models\Business;
|
||||
use App\Models\PlanSubscribe;
|
||||
use App\Models\BusinessCategory;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
$businesses = Business::with('enrolled_plan:id,plan_id', 'enrolled_plan.plan:id,subscriptionName', 'category:id,name')->latest()->take(5)->get();
|
||||
return view('admin.dashboard.index', compact('businesses'));
|
||||
}
|
||||
|
||||
public function getDashboardData()
|
||||
{
|
||||
$data['total_businesses'] = Business::count();
|
||||
$data['expired_businesses'] = Business::where('will_expire', '<', now())->count();
|
||||
$data['plan_subscribes'] = PlanSubscribe::count();
|
||||
$data['business_categories'] = BusinessCategory::count();
|
||||
$data['total_plans'] = Plan::count();
|
||||
$data['total_staffs'] = User::whereNotIn('role', ['superadmin', 'staff', 'shop-owner'])->count();
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
public function yearlySubscriptions()
|
||||
{
|
||||
$subscriptions = PlanSubscribe::whereYear('created_at', request('year') ?? date('Y'))
|
||||
->selectRaw('MONTHNAME(created_at) as month, SUM(price) as total_amount')
|
||||
->groupBy('month')
|
||||
->get();
|
||||
|
||||
return response()->json($subscriptions);
|
||||
}
|
||||
|
||||
public function plansOverview()
|
||||
{
|
||||
$subscription = PlanSubscribe::with('plan:id,subscriptionName')->select('plan_id', DB::raw('COUNT(*) as plan_count'))
|
||||
->groupBy('plan_id')
|
||||
->orderByDesc('plan_count')
|
||||
->limit(4)
|
||||
->get();
|
||||
|
||||
return response()->json($subscription);
|
||||
}
|
||||
}
|
||||
37
app/Http/Controllers/Admin/GatewayController.php
Normal file
37
app/Http/Controllers/Admin/GatewayController.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Helpers\HasUploader;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Currency;
|
||||
use App\Models\Gateway;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GatewayController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$gateways = Gateway::all();
|
||||
$currencies = Currency::latest()->get();
|
||||
|
||||
return view('admin.gateways.index', compact('gateways', 'currencies'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
Gateway::findOrFail($id)->update($request->except('image') + [
|
||||
'image' => $request->hasFile('image') ? $this->upload($request, 'image') : NULL
|
||||
]);
|
||||
|
||||
return response()->json('Gateway updated successfully');
|
||||
}
|
||||
}
|
||||
56
app/Http/Controllers/Admin/NotificationController.php
Normal file
56
app/Http/Controllers/Admin/NotificationController.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Notification;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NotificationController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:notifications-read')->only('mtIndex');
|
||||
}
|
||||
|
||||
public function mtIndex()
|
||||
{
|
||||
$notifications = auth()->user()->notifications()
|
||||
->whereDate('created_at', today())
|
||||
->latest()
|
||||
->get();
|
||||
return view('admin.notifications.index', compact('notifications'));
|
||||
}
|
||||
|
||||
public function acnooFilter(Request $request)
|
||||
{
|
||||
$notifications = Notification::whereDate('created_at', today())->latest()->paginate($request->per_page ?? 20);
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.notifications.datas', compact('notifications'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect(url()->previous());
|
||||
}
|
||||
|
||||
public function mtView($id)
|
||||
{
|
||||
$notify = Notification::find($id);
|
||||
if ($notify) {
|
||||
$notify->read_at = now();
|
||||
$notify->save();
|
||||
return redirect($notify->data['url'] ?? '/');
|
||||
}
|
||||
|
||||
return back()->with('error', __('Premission denied.'));
|
||||
}
|
||||
|
||||
public function mtReadAll()
|
||||
{
|
||||
auth()->user()->unreadNotifications()->update(['read_at' => now()]);
|
||||
return back();
|
||||
}
|
||||
|
||||
}
|
||||
40
app/Http/Controllers/Admin/PermissionController.php
Normal file
40
app/Http/Controllers/Admin/PermissionController.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Spatie\Permission\Models\Role;
|
||||
|
||||
class PermissionController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:permissions-read')->only('index','search');
|
||||
$this->middleware('permission:permissions-create')->only('store');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$users = User::whereNotIn('role', ['shop-owner', 'staff', 'superadmin'])->get();
|
||||
$roles = Role::where('name', '!=', 'superadmin')->get();
|
||||
return view('admin.permissions.index', compact('roles', 'users'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'user' => ['required', 'exists:users,id'],
|
||||
'roles' => ['required', 'exists:roles,id']
|
||||
]);
|
||||
|
||||
$user = User::findOrFail($request->input('user'));
|
||||
$user->roles()->sync($request->input('roles'));
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Role permissions assigned successfully.'),
|
||||
'redirect' => route('admin.permissions.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
53
app/Http/Controllers/Admin/ProfileController.php
Normal file
53
app/Http/Controllers/Admin/ProfileController.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Helpers\HasUploader;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function index()
|
||||
{
|
||||
$user = User::where('id',Auth::user()->id)->first();
|
||||
return view('admin.profile.index',compact('user'));
|
||||
}
|
||||
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|email',
|
||||
'image' => 'nullable|image',
|
||||
]);
|
||||
$user = User::findOrFail($id);
|
||||
|
||||
if( $request->password || $request->current_password){
|
||||
if(Hash::check($request->current_password,$user->password)){
|
||||
$request->validate([
|
||||
'current_password' => 'required|string',
|
||||
'password' => 'required|string|confirmed',
|
||||
]);
|
||||
}
|
||||
else{
|
||||
return response()->json(__('Current Password does not match with old password'),404);
|
||||
}
|
||||
}
|
||||
|
||||
$user->update($request->except('image', 'password') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image', $user->image) : $user->image,
|
||||
] + ($request->password ? ['password' => Hash::make($request->password)] : [])
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Profile updated successfully'),
|
||||
'redirect' => route('admin.profiles.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
104
app/Http/Controllers/Admin/RoleController.php
Normal file
104
app/Http/Controllers/Admin/RoleController.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Spatie\Permission\Models\Permission;
|
||||
|
||||
class RoleController extends Controller
|
||||
{
|
||||
private $role;
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:roles-create')->only('create', 'store');
|
||||
$this->middleware('permission:roles-read')->only('index', 'show');
|
||||
$this->middleware('permission:roles-update')->only('edit', 'update');
|
||||
$this->middleware('permission:roles-delete')->only('destroy');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$roles = Role::with('users')->whereNotIn('name', ['Super Admin', 'superadmin', 'super admin'])->withCount('users')->get();
|
||||
return view('admin.roles.index', compact('roles'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$groups = [];
|
||||
foreach (Permission::all() as $index => $permission) {
|
||||
$groups[ucwords(str($permission->name)->remove(['-create','-read','-update','-delete'])->replace('-', ' '))][] = $permission;
|
||||
}
|
||||
|
||||
return view('admin.roles.create', compact('groups'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', 'unique:roles,name'],
|
||||
'permissions' => ['required','array'],
|
||||
'permissions.*' => ['required', 'exists:permissions,id']
|
||||
]);
|
||||
|
||||
DB::transaction(function ()use ($request){
|
||||
$this->role = Role::create([
|
||||
'name' => $request->input('name')
|
||||
]);
|
||||
|
||||
$this->role->permissions()->sync($request->input('permissions'));
|
||||
});
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Role created successfully'),
|
||||
'redirect' => route('admin.roles.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Role $role)
|
||||
{
|
||||
abort_if(in_array($role->name, ['Super Admin', 'superadmin', 'super admin']), 403, __("You are not allowed to mess with Super Admin"));
|
||||
$role->load('permissions');
|
||||
$groups = [];
|
||||
foreach (Permission::all() as $index => $permission) {
|
||||
$groups[ucwords(str($permission->name)->remove(['-', 'create','read','update','delete','status','list','folder']))][] = $permission;
|
||||
}
|
||||
|
||||
return view('admin.roles.edit', compact('role', 'groups'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Role $role)
|
||||
{
|
||||
abort_if(in_array($role->name, ['Super Admin', 'superadmin', 'super admin']), 403, __("You are not allowed to mess with Super Admin"));
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', Rule::unique('roles')->ignore($role->id)],
|
||||
'permissions' => ['required','array'],
|
||||
'permissions.*' => ['required', 'exists:permissions,id']
|
||||
]);
|
||||
|
||||
$role->update([
|
||||
'name' => $request->input('name')
|
||||
]);
|
||||
|
||||
$role->permissions()->sync($request->input('permissions'));
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Role update successfully'),
|
||||
'redirect' => route('admin.roles.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Role $role)
|
||||
{
|
||||
abort_if(in_array($role->name, ['Super Admin', 'superadmin', 'super admin']), 403, __("You are not allowed to mess with Super Admin"));
|
||||
$role->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Role deleted successfully'),
|
||||
'redirect' => route('admin.roles.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
63
app/Http/Controllers/Admin/SettingController.php
Normal file
63
app/Http/Controllers/Admin/SettingController.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Helpers\HasUploader;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class SettingController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:settings-read')->only('index');
|
||||
$this->middleware('permission:settings-update')->only('update');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$general = Option::where('key', 'general')->first();
|
||||
$languages = json_decode(file_get_contents(base_path('lang/langlist.json')), true);
|
||||
|
||||
return view('admin.settings.general', compact('general', 'languages'));
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'title' => 'required|string|max:100',
|
||||
'logo' => 'nullable|image',
|
||||
'favicon' => 'nullable|image',
|
||||
'common_header_logo' => 'nullable|image',
|
||||
'footer_logo' => 'nullable|image',
|
||||
'admin_logo' => 'nullable|image',
|
||||
'login_page_logo' => 'nullable|image',
|
||||
'login_page_image' => 'nullable|image',
|
||||
'app_link' => 'nullable|url',
|
||||
'whatsapp_number' => 'nullable|string|max:20',
|
||||
]);
|
||||
|
||||
$general = Option::findOrFail($id);
|
||||
Cache::forget($general->key);
|
||||
$general->update([
|
||||
'value' => $request->except('_token', '_method', 'logo', 'favicon', 'common_header_logo', 'footer_logo', 'admin_logo', 'login_page_logo', 'login_page_image') + [
|
||||
'logo' => $request->logo ? $this->upload($request, 'logo', $general->value['logo'] ?? null) : ($general->value['logo'] ?? null),
|
||||
'favicon' => $request->favicon ? $this->upload($request, 'favicon', $general->value['favicon'] ?? null) : ($general->value['favicon'] ?? null),
|
||||
'common_header_logo' => $request->common_header_logo ? $this->upload($request, 'common_header_logo', $general->value['common_header_logo'] ?? null) : ($general->value['common_header_logo'] ?? null),
|
||||
'footer_logo' => $request->footer_logo ? $this->upload($request, 'footer_logo', $general->value['footer_logo'] ?? null) : ($general->value['footer_logo'] ?? null),
|
||||
'admin_logo' => $request->admin_logo ? $this->upload($request, 'admin_logo', $general->value['admin_logo'] ?? null) : ($general->value['admin_logo'] ?? null),
|
||||
'login_page_logo' => $request->login_page_logo ? $this->upload($request, 'login_page_logo', $general->value['login_page_logo'] ?? null) : ($general->value['login_page_logo'] ?? null),
|
||||
'login_page_image' => $request->login_page_image ? $this->upload($request, 'login_page_image', $general->value['login_page_image'] ?? null) : ($general->value['login_page_image'] ?? null),
|
||||
]
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('General Setting updated successfully'),
|
||||
'redirect' => route('admin.settings.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
85
app/Http/Controllers/Admin/SubscriptionReport.php
Normal file
85
app/Http/Controllers/Admin/SubscriptionReport.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\PlanSubscribe;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class SubscriptionReport extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$subscribeQuery = PlanSubscribe::with(['plan:id,subscriptionName', 'business:id,companyName,business_category_id,pictureUrl', 'business.category:id,name', 'gateway:id,name'])->whereDate('created_at', Carbon::today()->format('Y-m-d'));
|
||||
|
||||
// Date filter
|
||||
$startDate = Carbon::today()->format('Y-m-d');
|
||||
$endDate = Carbon::today()->format('Y-m-d');
|
||||
|
||||
switch ($request->custom_days) {
|
||||
case 'yesterday':
|
||||
$startDate = $endDate = Carbon::yesterday()->format('Y-m-d');
|
||||
break;
|
||||
case 'last_seven_days':
|
||||
$startDate = Carbon::today()->subDays(6)->format('Y-m-d');
|
||||
break;
|
||||
case 'last_thirty_days':
|
||||
$startDate = Carbon::today()->subDays(29)->format('Y-m-d');
|
||||
break;
|
||||
case 'current_month':
|
||||
$startDate = Carbon::now()->startOfMonth()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->endOfMonth()->format('Y-m-d');
|
||||
break;
|
||||
case 'last_month':
|
||||
$startDate = Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->subMonth()->endOfMonth()->format('Y-m-d');
|
||||
break;
|
||||
case 'current_year':
|
||||
$startDate = Carbon::now()->startOfYear()->format('Y-m-d');
|
||||
$endDate = Carbon::now()->endOfYear()->format('Y-m-d');
|
||||
break;
|
||||
case 'custom_date':
|
||||
if ($request->from_date && $request->to_date) {
|
||||
$startDate = Carbon::parse($request->from_date)->format('Y-m-d');
|
||||
$endDate = Carbon::parse($request->to_date)->format('Y-m-d');
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$subscribeQuery->whereDate('created_at', '>=', $startDate)
|
||||
->whereDate('created_at', '<=', $endDate);
|
||||
|
||||
// Search filter
|
||||
if ($request->filled('search')) {
|
||||
$search = $request->search;
|
||||
$subscribeQuery->where(function ($query) use ($search) {
|
||||
$query->where('duration', 'like', '%' . $search . '%')
|
||||
->orWhereHas('plan', function ($q) use ($search) {
|
||||
$q->where('subscriptionName', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('gateway', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
})
|
||||
->orWhereHas('business', function ($q) use ($search) {
|
||||
$q->where('companyName', 'like', '%' . $search . '%')
|
||||
->orWhereHas('category', function ($q) use ($search) {
|
||||
$q->where('name', 'like', '%' . $search . '%');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$perPage = $request->input('per_page', 20);
|
||||
$subscribers = $subscribeQuery->latest()->paginate($perPage)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.subscribers.datas', compact('subscribers'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.subscribers.index', compact('subscribers'));
|
||||
}
|
||||
|
||||
}
|
||||
165
app/Http/Controllers/Admin/SystemSettingController.php
Normal file
165
app/Http/Controllers/Admin/SystemSettingController.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
class SystemSettingController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:settings-read')->only('index');
|
||||
$this->middleware('permission:settings-update')->only('update');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
return view('admin.settings.system');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'SESSION_LIFETIME' => 'required|integer',
|
||||
'service_account_credentials' => 'mimes:json,txt|max:100',
|
||||
]);
|
||||
|
||||
if ($request->hasFile('service_account_credentials')) {
|
||||
$file = $request->file('service_account_credentials');
|
||||
$name = 'service-account-credentials.json';
|
||||
$path = 'uploads/';
|
||||
$file->move($path, $name);
|
||||
}
|
||||
|
||||
$APP_NAME = '"' . $request->APP_NAME . '"';
|
||||
|
||||
$txt = "APP_NAME=" . $APP_NAME . "
|
||||
APP_ENV=local
|
||||
APP_KEY=" . env('APP_KEY') . "
|
||||
APP_DEBUG=" . $request->APP_DEBUG . "
|
||||
APP_URL=" . url('/') . "
|
||||
SITE_KEY=" . env('SITE_KEY') . "
|
||||
AUTHORIZED_KEY=" . env('AUTHORIZED_KEY') . "
|
||||
|
||||
CONTENT_EDITOR=" . $request->CONTENT_EDITOR . "
|
||||
ANALYTICS_VIEW_ID=" . $request->ANALYTICS_VIEW_ID . "
|
||||
GA_MEASUREMENT_ID=" . $request->GA_MEASUREMENT_ID . "
|
||||
FORCE_USER_TO_PURCHASE_PLAN=" . $request->FORCE_USER_TO_PURCHASE_PLAN . "
|
||||
UNSUBSCRIBE_AFTER_DAYS=" . $request->UNSUBSCRIBE_AFTER_DAYS . "
|
||||
|
||||
|
||||
DB_CONNECTION=" . env("DB_CONNECTION") . "
|
||||
DB_HOST=" . env("DB_HOST") . "
|
||||
DB_PORT=" . env("DB_PORT") . "
|
||||
DB_DATABASE=" . env("DB_DATABASE") . "
|
||||
DB_USERNAME=" . env("DB_USERNAME") . "
|
||||
DB_PASSWORD=" . env("DB_PASSWORD") . "
|
||||
|
||||
|
||||
QUEUE_MAIL=" . $request->QUEUE_MAIL . "
|
||||
" . $request->MAIL_DRIVER_TYPE . "=" . $request->MAIL_DRIVER . "
|
||||
MAIL_DRIVER_TYPE=" . $request->MAIL_DRIVER_TYPE . "
|
||||
MAIL_HOST=" . $request->MAIL_HOST . "
|
||||
MAIL_PORT=" . $request->MAIL_PORT . "
|
||||
MAIL_USERNAME=" . $request->MAIL_USERNAME . "
|
||||
MAIL_PASSWORD=" . $request->MAIL_PASSWORD . "
|
||||
MAIL_ENCRYPTION=" . $request->MAIL_ENCRYPTION . "
|
||||
MAIL_FROM_ADDRESS=" . $request->MAIL_FROM_ADDRESS . "
|
||||
MAIL_TO=" . $request->MAIL_TO . "
|
||||
MAIL_FROM_NAME='" . $request->MAIL_FROM_NAME . "'
|
||||
|
||||
|
||||
MAILCHIMP_DRIVER=" . $request->MAILCHIMP_DRIVER . "
|
||||
MAILCHIMP_APIKEY=" . $request->MAILCHIMP_APIKEY . "
|
||||
MAILCHIMP_LIST_ID=" . $request->MAILCHIMP_LIST_ID . "
|
||||
|
||||
NOCAPTCHA_SECRET=" . $request->NOCAPTCHA_SECRET . "
|
||||
NOCAPTCHA_SITEKEY=" . $request->NOCAPTCHA_SITEKEY . "
|
||||
|
||||
BROADCAST_DRIVER=pusher
|
||||
CACHE_DRIVER=" . $request->CACHE_DRIVER . "
|
||||
QUEUE_CONNECTION=database
|
||||
SESSION_DRIVER=" . $request->SESSION_DRIVER . "
|
||||
SESSION_LIFETIME=" . $request->SESSION_LIFETIME . "
|
||||
|
||||
PUSHER_APP_ID=" . $request->PUSHER_APP_ID . "
|
||||
PUSHER_APP_KEY=" . $request->PUSHER_APP_KEY . "
|
||||
PUSHER_APP_SECRET=" . $request->PUSHER_APP_SECRET . "
|
||||
PUSHER_APP_CLUSTER=" . $request->PUSHER_APP_CLUSTER . "
|
||||
PUSHER_SCHEME=https
|
||||
MIX_PUSHER_APP_KEY=" . '${PUSHER_APP_KEY}' . "
|
||||
MIX_PUSHER_APP_CLUSTER=" . '${PUSHER_APP_CLUSTER}' . "
|
||||
|
||||
REDIS_HOST=" . $request->REDIS_HOST . "
|
||||
REDIS_PORT=" . $request->REDIS_PORT . "
|
||||
REDIS_URL=" . $request->REDIS_URL . "
|
||||
REDIS_PASSWORD=" . $request->REDIS_PASSWORD . "
|
||||
|
||||
MEMCACHED_HOST=" . $request->MEMCACHED_HOST . "
|
||||
MEMCACHED_PORT=" . $request->MEMCACHED_PORT . "
|
||||
MEMCACHED_PERSISTENT_ID=" . $request->MEMCACHED_PERSISTENT_ID . "
|
||||
MEMCACHED_USERNAME=" . $request->MEMCACHED_USERNAME . "
|
||||
MEMCACHED_PASSWORD=" . $request->MEMCACHED_PASSWORD . "
|
||||
|
||||
|
||||
AWS_ACCESS_KEY_ID=" . $request->AWS_ACCESS_KEY_ID . "
|
||||
AWS_SECRET_ACCESS_KEY=" . $request->AWS_SECRET_ACCESS_KEY . "
|
||||
AWS_DEFAULT_REGION=" . $request->AWS_DEFAULT_REGION . "
|
||||
AWS_BUCKET=" . $request->AWS_BUCKET . "
|
||||
|
||||
WAS_ACCESS_KEY_ID=" . $request->WAS_ACCESS_KEY_ID . "
|
||||
WAS_SECRET_ACCESS_KEY=" . $request->WAS_SECRET_ACCESS_KEY . "
|
||||
WAS_DEFAULT_REGION=" . $request->WAS_DEFAULT_REGION . "
|
||||
WAS_BUCKET=" . $request->WAS_BUCKET . "
|
||||
WAS_ENDPOINT=" . $request->WAS_ENDPOINT . "
|
||||
|
||||
|
||||
DISCUSS_COMMENT_KEY=" . $request->DISCUSS_COMMENT_KEY . "
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_LEVEL=debug
|
||||
CACHE_LIFETIME=" . $request->CACHE_LIFETIME . "
|
||||
TIMEZONE=" . $request->TIMEZONE . "
|
||||
|
||||
DEFAULT_LANG=" . $request->DEFAULT_LANG . "
|
||||
DISCUSS_COMMENT_KEY=" . $request->DISCUSS_COMMENT_KEY . "
|
||||
|
||||
FILESYSTEM_DISK=" . $request->FILESYSTEM_DISK . "
|
||||
|
||||
VITE_PUSHER_APP_KEY=" . '${PUSHER_APP_KEY}' . "
|
||||
VITE_PUSHER_HOST=" . '${PUSHER_HOST}' . "
|
||||
VITE_PUSHER_PORT=" . '${PUSHER_PORT}' . "
|
||||
VITE_PUSHER_SCHEME=" . '${PUSHER_SCHEME}' . "
|
||||
VITE_PUSHER_APP_CLUSTER=" . '${PUSHER_APP_CLUSTER}' . "
|
||||
|
||||
APILAYER_API_KEY=" . $request->APILAYER_API_KEY . "
|
||||
|
||||
GOOGLE_CLIENT_ID=" . $request->GOOGLE_CLIENT_ID . "
|
||||
GOOGLE_CLIENT_SECRET=" . $request->GOOGLE_CLIENT_SECRET . "
|
||||
GOOGLE_REDIRECT_URI=" . url('login/google/callback') . "
|
||||
|
||||
TWITTER_CLIENT_ID=" . $request->TWITTER_CLIENT_ID . "
|
||||
TWITTER_CLIENT_SECRET=" . $request->TWITTER_CLIENT_SECRET . "
|
||||
TWITTER_REDIRECT_URI=" . url('login/twitter/callback') . "
|
||||
|
||||
WKHTMLTOPDF_BINARY=" . $request->WKHTMLTOPDF_BINARY . "
|
||||
WKHTMLTOIMAGE_BINARY=" . $request->WKHTMLTOIMAGE_BINARY . "
|
||||
WKHTMLTOPDF_TIMEOUT=" . $request->WKHTMLTOPDF_TIMEOUT . "
|
||||
|
||||
";
|
||||
|
||||
File::put(base_path('.env'), $txt);
|
||||
|
||||
Artisan::call('config:clear');
|
||||
Artisan::call('cache:clear');
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Settings updated successfully.'),
|
||||
'redirect' => route('admin.system-settings.index'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
139
app/Http/Controllers/Admin/UserController.php
Normal file
139
app/Http/Controllers/Admin/UserController.php
Normal file
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Helpers\HasUploader;
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
use HasUploader;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:users-create')->only('create', 'store');
|
||||
$this->middleware('permission:users-read')->only('index', 'show');
|
||||
$this->middleware('permission:users-update')->only('edit', 'update');
|
||||
$this->middleware('permission:users-delete')->only('destroy');
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$users = User::whereNotIn('role', ['superadmin', 'staff', 'shop-owner'])->when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('name', 'like', '%' . $request->search . '%')
|
||||
->orWhere('email', 'like', '%' . $request->search . '%')
|
||||
->orWhere('role', 'like', '%' . $request->search . '%')
|
||||
->orWhere('phone', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
})->latest()->paginate($request->per_page ?? 20)->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('admin.users.datas', compact('users'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('admin.users.index', compact('users'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$roles = Role::where('name', '!=', 'superadmin')->latest()->get();
|
||||
return view('admin.users.create', compact('roles'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
'role' => 'required|string',
|
||||
'phone' => 'nullable|string',
|
||||
'email' => 'required|email|unique:users',
|
||||
'password' => 'required|string|confirmed',
|
||||
'image' => 'nullable|image',
|
||||
]);
|
||||
|
||||
$user = User::create($request->except('image', 'password') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image') : null,
|
||||
'password' => Hash::make($request->password),
|
||||
]);
|
||||
|
||||
$role = Role::where('name', $request->role)->first();
|
||||
$user->roles()->sync($role->id);
|
||||
|
||||
sendNotification($user->id, route('admin.users.index', ['users' => $request->role]), __(ucfirst($request->role) . ' has been created.'), 'action', null, null, true);
|
||||
return response()->json([
|
||||
'message' => __(ucfirst($request->role) . ' created successfully'),
|
||||
'redirect' => route('admin.users.index', ['users' => $request->role])
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(User $user)
|
||||
{
|
||||
if ($user->role == 'superadmin') {
|
||||
abort(403);
|
||||
}
|
||||
$roles = Role::latest()->get();
|
||||
return view('admin.users.edit', compact('user', 'roles'));
|
||||
}
|
||||
|
||||
public function update(Request $request, User $user)
|
||||
{
|
||||
if ($user->role == 'superadmin') {
|
||||
return response()->json(__('You can not update a superadmin.'), 400);
|
||||
}
|
||||
$request->validate([
|
||||
'role' => 'required|string',
|
||||
'phone' => 'nullable|string',
|
||||
'country' => 'nullable|string',
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|email|unique:users,email,' . $user->id,
|
||||
'password' => 'nullable|string|confirmed',
|
||||
'image' => 'nullable|image',
|
||||
]);
|
||||
|
||||
$role = Role::where('name', $request->role)->first();
|
||||
$user->roles()->sync($role->id);
|
||||
$user->update($request->except('image', 'password') + [
|
||||
'image' => $request->image ? $this->upload($request, 'image', $user->image) : $user->image,
|
||||
'password' => $request->password ? Hash::make($request->password) : $user->password,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Staff updated successfully'),
|
||||
'redirect' => route('admin.users.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(User $user)
|
||||
{
|
||||
if ($user->role == 'superadmin') {
|
||||
return response()->json(__('You can not delete a superadmin.'), 400);
|
||||
}
|
||||
|
||||
if (file_exists($user->image)) {
|
||||
Storage::delete($user->image);
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
return response()->json([
|
||||
'message' => __('Staff deleted successfully'),
|
||||
'redirect' => route('admin.users.index')
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
User::whereIn('id', $request->ids)->delete();
|
||||
return response()->json([
|
||||
'message' => __('Selected Staff deleted successfully'),
|
||||
'redirect' => route('admin.users.index')
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user