diff --git a/app/Classes/Service/Base64Uploader.php b/app/Classes/Service/Base64Uploader.php new file mode 100644 index 00000000..17d889e3 --- /dev/null +++ b/app/Classes/Service/Base64Uploader.php @@ -0,0 +1,48 @@ +getFileType($base64Image); + + $extension = $this->getExtension($base64Image, $type); + + $uniqueName = uniqid('img_').time(); + + $imagePath = $path.'/'.$uniqueName.'.'.$extension; + + $encodedExtension = $extension; + + if($extension === 'xlsx'){ + $encodedExtension = 'vnd.openxmlformats-officedocument.spreadsheetml.sheet'; + } + $data = base64_decode(str_replace(' ', '+', str_replace('data:'.$type.'/'.$encodedExtension.';base64,', '', $base64Image))); + + Storage::disk('public')->put($imagePath, $data); + + return $uniqueName.'.'.$extension; + + } + + } + + private function getFileType(string $base64Image){ + return explode('/', explode(':', substr($base64Image, 0, strpos($base64Image, ';')))[1])[0]; + } + + private function getExtension(string $base64Image, string $type) { + $extension = explode('/', explode(':', substr($base64Image, 0, strpos($base64Image, ';')))[1])[1]; + + if($extension === 'vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ + return 'xlsx'; + } + + return $extension; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php index 5722f34c..144f556e 100644 --- a/app/Http/Controllers/BookingController.php +++ b/app/Http/Controllers/BookingController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\PurchaseOrder; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; +use App\Classes\Service\Base64Uploader; use App\Booking; use App\Rate; use App\UserBankSlip; @@ -608,26 +609,9 @@ class BookingController extends Controller if($bankslip_file = $request->input('slip_image')) { - $ext = explode('/', explode(':', substr($bankslip_file, 0, strpos($bankslip_file, ';')))[1])[1]; - $img = str_replace('data:image/'.$ext.';base64,', '', $bankslip_file); - $img = str_replace(' ', '+', $img); - $data = base64_decode($img); - $file_name = 'bank_slip_' . md5(time()).'.'.$ext; - if($bankslip_file!=""){ - // storing image in storage/app/public Folder - $upload_path = \Storage::disk('public')->put('user_bankslip'.'/'.$file_name, $data); - } - // /* End Validation */ - // // $filename = $bankslip_file->getClientOriginalName(); - // - // $unique_name = 'bank_slip_' . md5(time()); // probably not a good idea - // $unique_image_path = $unique_name. '.' .'jpg'; - // $image_parts = explode(";base64,", $bankslip_file); - // $upload_path = \Storage::disk('public')->put('user_bankslip'.'/'.$unique_image_path,base64_decode(base64_decode($image_parts[1]))); - // // $upload_path = Storage::disk('public')->putFileAs( - // // 'user_bankslip', base64_decode($image), $unique_image_path - // // ); + $upload_path = (new Base64Uploader())->execute($bankslip_file, 'user_bankslip'); + if($upload_path){ $user_bankslip = $booking->userBankSlip()->first(); @@ -636,7 +620,7 @@ class BookingController extends Controller $user_bankslip = new UserBankSlip; } $user_bankslip->booking_id = $booking->id; - $user_bankslip->bankslip_path = 'user_bankslip'.'/'.$file_name; + $user_bankslip->bankslip_path = 'user_bankslip'.'/'.$upload_path; $user_bankslip->transfer_amount = null; $user_bankslip->save(); @@ -678,7 +662,7 @@ class BookingController extends Controller return response()->json(["success"=>true],200); } - public function uploadPurchaseOrder(Request $request, $id) + private function uploadPurchaseOrder(Request $request, $id) { $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); @@ -688,44 +672,36 @@ class BookingController extends Controller return response()->json(['message'=>'Access denied'], 403); } - $validator = Validator::make($request->all(), [ - 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' - ]); + // $validator = Validator::make($request->all(), [ + // 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + // ]); - if($validator->fails()) - { - return response()->json(['message'=>'Incorrect format'],400); - } + // if($validator->fails()) + // { + // return response()->json(['message'=>'Incorrect format'],400); + // } - $validator = Validator::make($request->all(), [ - 'file' => 'max:10000' - ]); + // $validator = Validator::make($request->all(), [ + // 'file' => 'max:10000' + // ]); - if($validator->fails()) - { - return response()->json(['message'=>'File too large, upload files up to 3 MB'], 400); - } + // if($validator->fails()) + // { + // return response()->json(['message'=>'File too large, upload files up to 3 MB'], 400); + // } - if(!$user_input_file = $request->file('file')) + if(!$user_input_file = $request->input('images')) { return response()->json(['message' => 'No file detected'], 404); } /* End Validation */ - - $filename = $user_input_file->getClientOriginalName(); - $ext = $user_input_file->getClientOriginalExtension(); - - $input['file'] = $filename; - $unique_name = 'purchase_order_' . md5($filename. time()); - $unique_image_path = $unique_name. '.' .$ext; - $upload_path = Storage::disk('public')->putFileAs( - 'purchase_order',/*folder name*/ $user_input_file, $unique_image_path, 'public' - ); - - $user_po = new PurchaseOrder; - $user_po->image_path = $upload_path; - $user_po->booking_id = $booking->id; - $user_po->save(); + foreach($request->input('images') as $file){ + $filename = (new Base64Uploader())->execute($file, 'purchase_order'); + $user_po = new PurchaseOrder; + $user_po->image_path = 'purchase_order/'.$filename; + $user_po->booking_id = $booking->id; + $user_po->save(); + } $booking->status = 6; // $booking->admin_status = 7; @@ -1011,7 +987,8 @@ class BookingController extends Controller } } - public function confirmPurchaseOrder($id){ + public function confirmPurchaseOrder($id, Request $request){ + $this->uploadPurchaseOrder($request, $id); $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); $purchase_order = $booking->purchaseOrder()->first(); diff --git a/resources/assets/js/pages/auth/register.vue b/resources/assets/js/pages/auth/register.vue index c6609c44..a29bae4b 100644 --- a/resources/assets/js/pages/auth/register.vue +++ b/resources/assets/js/pages/auth/register.vue @@ -10,6 +10,9 @@