File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Admin/BlacklistController.php
<?php
namespace App\Http\Controllers\Refactor\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Blacklist;
use App\Model\JobMonitor;
use App\Jobs\ImportBlacklistJob;
class BlacklistController extends Controller
{
public function index(Request $request)
{
if (!$request->user()->admin->can('read', new Blacklist())) {
return $this->notAuthorized();
}
$admin = $request->user()->admin;
$job = $admin->importBlacklistJobs()->first();
$stats = [
'total' => Blacklist::count(),
];
return view('refactor.pages.admin.blacklist.index', compact('stats', 'job'));
}
public function listing(Request $request)
{
if (!$request->user()->admin->can('read', new Blacklist())) {
return $this->notAuthorized();
}
$items = Blacklist::search($request)->paginate($request->per_page ?? 15);
return view('refactor.pages.admin.blacklist._list', compact('items'));
}
public function store(Request $request)
{
$admin = $request->user()->admin;
if (!$admin->can('create', new Blacklist())) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
$validator = \Validator::make($request->all(), [
'email' => 'required|email|unique:blacklists,email',
], [
'email.unique' => trans('refactor/admin_blacklist.flash.duplicate'),
]);
if ($validator->fails()) {
return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422);
}
$blacklist = new Blacklist();
$blacklist->fill($request->only(['email', 'reason']));
$blacklist->customer_id = null;
$blacklist->admin_id = $admin->id;
$blacklist->save();
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_blacklist.flash.added'),
]);
}
public function delete(Request $request)
{
$items = Blacklist::whereIn(
'id',
is_array($request->uids) ? $request->uids : explode(',', $request->uids)
);
foreach ($items->get() as $item) {
if ($request->user()->admin->can('delete', $item)) {
$item->delist();
$item->delete();
}
}
return response()->json(['status' => 'success', 'message' => trans('refactor/admin_blacklist.flash.deleted')]);
}
public function reason(Request $request, $id)
{
$blacklist = Blacklist::find($id);
if (!$blacklist) {
return response()->json(['status' => 'error', 'message' => 'Not found'], 404);
}
return view('refactor.pages.admin.blacklist.reason', compact('blacklist'));
}
public function import(Request $request)
{
if (!$request->user()->admin->can('import', new Blacklist())) {
return $this->notAuthorized();
}
$admin = $request->user()->admin;
$job = $admin->importBlacklistJobs()->first();
if ($job) {
return view('refactor.pages.admin.blacklist.import', [
'currentJobUid' => $job->uid,
'cancelUrl' => route('refactor.admin.blacklist.cancel-import', ['job_uid' => $job->uid]),
'progressCheckUrl' => route('refactor.admin.blacklist.import-progress', ['job_uid' => $job->uid]),
]);
}
return view('refactor.pages.admin.blacklist.import');
}
public function startImport(Request $request)
{
$admin = $request->user()->admin;
if (!$admin->can('import', new Blacklist())) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
if ($request->hasFile('file')) {
$filepath = Blacklist::upload($request->file('file'));
$job = $admin->dispatchWithMonitor(new ImportBlacklistJob($filepath, $customer = null));
return response()->json([
'status' => 'success',
'message' => trans('refactor/admin_blacklist.flash.import_started'),
'redirect' => route('refactor.admin.blacklist.import'),
]);
}
return response()->json(['status' => 'error', 'message' => 'No file uploaded'], 422);
}
public function importProgress(Request $request)
{
if (!$request->user()->admin->can('read', new Blacklist())) {
return response()->json(['status' => 'error', 'message' => 'Not authorized'], 403);
}
$job = JobMonitor::findByUid($request->job_uid);
if (!$job) {
return response()->json(['status' => 'error', 'message' => 'Job not found'], 404);
}
$progress = $job->getJsonData();
$progress['status'] = $job->status;
$progress['error'] = $job->error;
return response()->json($progress);
}
public function cancelImport(Request $request)
{
$job = JobMonitor::findByUid($request->job_uid);
if (!$job) {
return response()->json(['status' => 'error', 'message' => 'Job not found'], 404);
}
$job->cancel();
return response()->json(['status' => 'success', 'message' => trans('refactor/admin_blacklist.flash.import_cancelled')]);
}
}