Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
WIKIPEDIA
/
imaliapi
/
app
/
Http
/
Controllers
:
UserDocumentController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace App\Http\Controllers; use App\Imali\BusinessAccount; use App\Imali\ImaliAccount; use App\PhoneValidation; use App\User; use App\UserDocument; use Illuminate\Http\Request; // Imports imagens use Illuminate\Support\Facades\Storage; use Illuminate\Http\UploadedFile; use URL; use File; class UserDocumentController extends Controller { private $baseUrl = ''; private $storagePath = ''; public function __construct() { $this->baseUrl = URL::to("/") . '/images/documentos/'; $this->storagePath = public_path() . '/images/documentos'; } public function getDocuments($status) { // $data = UserDocument::query() // ->join('users', 'users.id', '=', 'user_documents.user_id') // ->join('imali_accounts', 'imali_accounts.user_id', '=', 'user_documents.user_id') // ->select('users.name', 'users.last_name', 'imali_accounts.account_number', 'user_documents.*') // ->where('user_documents.status', $status) // ->paginate(10); $data = UserDocument::query() ->join('users', 'users.id', '=', 'user_documents.user_id') ->leftJoin('imali_accounts', 'imali_accounts.user_id', '=', 'user_documents.user_id') ->leftJoin('business_accounts', 'business_accounts.user_id', '=', 'user_documents.user_id') ->select( 'users.name', 'users.last_name', 'imali_accounts.account_number', 'business_accounts.account_number', 'user_documents.*', 'business_accounts.municipal_license', 'business_accounts.alvara', 'business_accounts.commercial_registration_certificate', 'business_accounts.nuit' ) ->where('user_documents.status', $status) ->paginate(10); return response()->json(['data' => $data], 200); } public function getUserDocuments($id) { $data = UserDocument::query() ->join('users', 'users.id', '=', 'user_documents.user_id') ->join('imali_accounts', 'imali_accounts.user_id', '=', 'user_documents.user_id') ->select('users.name', 'imali_accounts.account_number', 'user_documents.*') ->where('user_documents.user_id', $id) ->get(); return response()->json(['data' => $data], 200); } public function updateUserInformation(Request $request) { $this->validate($request, [ 'id' => 'required', 'user_id' => 'required', ]); $userDocument = UserDocument::query() ->where('id', $request->id) ->where('user_id', $request->user_id) ->first(); if ($userDocument) { $user = User::find($request->user_id); $imali = ImaliAccount::query() ->where('user_id', $request->user_id) ->first(); $imali2 = BusinessAccount::query() ->where('user_id', $request->user_id) ->first(); $userDocument->update([ 'status' => 'updated', 'fathers_name' => $request->fathers_name, 'mothers_name' => $request->mothers_name, 'issue_date' => $request->issue_date, 'expiration_date' => $request->expiration_date, 'document_type' => $request->document_type, 'issuing_place' => $request->issuing_place, 'document_number' => $request->document_number, 'nationality' => $request->nationality, 'place_of_birth' => $request->place_of_birth, 'address1' => $request->address1, 'address2' => $request->address2, 'marital_status' => $request->marital_status, 'sex' => $request->sex, 'birthdate' => $request->birthdate, 'height' => $request->height, 'admin_id' => $request->user()->id, //'imali_account_id' => $imali->id, 'imali_account_id' => ($user && ($user->profile == 'client')) ? $imali->id : $imali2->id, ]); User::query() ->where('id', $request->user_id) ->update([ 'update_info_status' => 'updated', 'info_status' => 1, 'status' => 1, 'name' => $request->name, 'last_name' => $request->last_name, 'user_update_info_status' => 1, 'birthday' => $request->birthdate, 'document_id' => $userDocument->id ]); ImaliAccount::query() ->where('user_id', $request->user_id) ->update(['imali_account_config' => 2]); BusinessAccount::query() ->where('user_id', $request->user_id) ->update(['imali_account_config' => 2]); $notification = array( 'icon' => 'ic_imali_logo_verde_01', // 'icon' => 'ic_i_mali_cover', 'title' => 'Actualização Documentos', 'body' => 'Caro cliente, os teus documentos foram actualizados com Succeso. Desfrute dos serviços que o iMali disponibiliza.', 'click_action' => 'com.imali.payapp.payment_NOTICIA', // 'color' => '#008577' 'color' => '#ffffff' ); $data = array( 'sms' => 'Parabéns, o teu pedido de actualização de documentos foi aprovado com Sucesso. Com os documentos actualizados, vai fazer transacções e pagamentos em montantes maiores.', 'route' => 'NOTICIA', 'terminal' => 'firebase' ); $userData = User::query() ->where('id', $request->user_id) ->first(); $this->pushNotifification($userData->firebase_token, $notification, $data); $userDocumentData = UserDocument::query() ->where('id', $request->id) ->where('user_id', $request->user_id) ->get(); foreach ($userDocumentData as $data) { UserDocument::query() ->where('status', 'pending') ->where('id', '=', $data->id) ->update(['status' => 'rejected', 'message' => 'Pedido recusado, pois já foi aceite um pedido que reuniu as codições desejadas.']); } return response()->json(['message' => 'Dados Actualizados com Sucesso'], 200); } else { return response()->json(['message' => 'Conta Inválida'], 400); } } public function negarPedidoActualizacaoDocumentosOLD(Request $request) { $this->validate($request, [ 'id' => 'required', 'user_id' => 'required', 'message' => 'required|min:10', ]); $userDocument = UserDocument::query() ->where('id', $request->id) ->where('user_id', $request->user_id) ->first(); if ($userDocument) { $userDocument->update(['status' => 'rejected', 'message' => $request->message, 'admin_id' => $request->user()->id]); User::query() ->where('id', $request->user_id) ->update(['info_status' => 0, 'update_info_status' => 'rejected']); $notification = array( 'icon' => 'ic_imali_logo_verde_01', // 'icon' => 'ic_i_mali_cover', 'title' => 'Actualização Documentos', 'body' => $request->message, 'click_action' => 'com.imali.payapp.payment_NOTICIA', 'color' => '#ffffff' ); $data = array( 'sms' => $request->message, 'route' => 'NOTICIA', 'terminal' => 'firebase' ); $userData = User::query() ->where('id', $request->user_id) ->first(); $this->pushNotifification($userData->firebase_token, $notification, $data); return response()->json(['message' => 'Resposta Enviada com Sucesso'], 200); } else { return response()->json(['message' => 'Conta Inválida'], 400); } } public function negarPedidoActualizacaoDocumentos(Request $request) { $this->validate($request, [ 'id' => 'required', 'user_id' => 'required', 'message' => 'required|min:10', ]); $user = User::find($request->user_id); if (!$user) return response()->json(['message' => 'Conta Inválida'], 400); $userDocument = UserDocument::query() ->where('id', $request->id) ->where('user_id', $request->user_id) ->first(); if ($userDocument && $user->profile == 'client') { $userDocument->update(['status' => 'rejected', 'message' => $request->message, 'admin_id' => $request->user()->id]); User::query() ->where('id', $request->user_id) ->update(['info_status' => 0, 'update_info_status' => 'rejected']); $notification = array( 'icon' => 'ic_imali_logo_verde_01', // 'icon' => 'ic_i_mali_cover', 'title' => 'Actualização Documentos', 'body' => $request->message, 'click_action' => 'com.imali.payapp.payment_NOTICIA', 'color' => '#ffffff' ); $data = array( 'sms' => $request->message, 'route' => 'NOTICIA', 'terminal' => 'firebase' ); $userData = User::query() ->where('id', $request->user_id) ->first(); $this->pushNotifification($userData->firebase_token, $notification, $data); return response()->json(['message' => 'Resposta Enviada com Sucesso'], 200); } else if ($userDocument && $user->profile == 'business') { User::query() ->where('id', $request->user_id) ->update(['info_status' => 0, 'update_info_status' => 'rejected']); $notification = array( 'icon' => 'ic_imali_logo_verde_01', 'title' => 'Actualização Documentos', 'body' => $request->message, 'click_action' => 'com.imali.payapp.payment_NOTICIA', 'color' => '#ffffff' ); $data = array( 'sms' => $request->message, 'route' => 'NOTICIA', 'terminal' => 'firebase' ); $userData = User::query() ->where('id', $request->user_id) ->first(); $this->pushNotifification($userData->firebase_token, $notification, $data); $business = BusinessAccount::where('user_id', $user->id)->first(); // PhoneValidation::where('phone', $user->phone)->first()->forceDelete(); // UserDocument::where('user_id', $user->id)->first()->delete(); // $user->forceDelete(); // $imgUploader = new ImageUploader(); $this->deleteImageFile($business, 'alvara', '/images/documentos/'); $this->deleteImageFile($business, 'nuit', '/images/documentos/'); $this->deleteImageFile($business, 'municipal_license', '/images/documentos/'); $this->deleteImageFile($business, 'commercial_registration_certificate', '/images/documentos/'); // $business->delete(); $this->deleteImageFile($userDocument, 'image_selfie', '/images/documentos/'); $this->deleteImageFile($userDocument, 'image_front', '/images/documentos/'); $this->deleteImageFile($userDocument, 'image_back', '/images/documentos/'); return response()->json(['message' => 'Resposta Enviada com Sucesso'], 200); } else { return response()->json(['message' => 'Conta Inválida'], 400); } } //? NOVO CODIGO DE UPDATE DOCUMENT # actualizar no server public function imageCompress($image, $newImageName, $imgDefaultRatio) { $image = \Image::make(file_get_contents($image)); $image->save($this->storagePath . '/' . $newImageName, $imgDefaultRatio); } #actualizar no server public function imageUpload($image, $newImageName) { $image->move($this->storagePath, $newImageName); } # actualizar no server public function generateImageUrl(Request $request, $imageAttr) { if ($request->hasFile($imageAttr) && $request->file($imageAttr)->isValid()) { // Validar imagem $this->validate( $request, [ $imageAttr => 'mimes:jpeg,jpg,png|max:4096' ], [ 'photo.required' => 'O campo photo é Obrigatório', 'photo.mimes' => 'Formato de imagem invalido, formatos permitidos jpeg,jpg,png', 'photo.max' => 'O tamanho de imagem permitido somente abaixo de 4 MB', ] ); //fazer o upload $image = $request[$imageAttr]; $newImageName = time() . $image->getClientOriginalName(); //verificar size $imageSizeMB = round($request->file($imageAttr)->getSize() / (1024 * 1024), 2); // Diminuir tamanho.. if ($imageSizeMB >= 1) { $imgDefaultRatio = 65; if ($imageSizeMB >= 3) { $imgDefaultRatio = 35; } //comprimir e fazer upload $this->imageCompress($image, $newImageName, $imgDefaultRatio); } else { $this->imageUpload($image, $newImageName); } return $this->baseUrl . $newImageName; } else { $exploded = explode(',', $request[$imageAttr]); $decoded = base64_decode($exploded[$this->is_string_encoded($request[$imageAttr]) ? 0 : 1], True); $f = finfo_open(); $mime_type = finfo_buffer($f, $decoded, FILEINFO_MIME_TYPE); $valiExtension = ['jpeg', 'jpg', 'png']; $imageExtention = substr($mime_type, 6, strlen($mime_type)); if (!in_array($imageExtention, $valiExtension)) return response()->json(['message' => "Formato de imagem invalido, formatos permitidos jpeg,jpg,png"], 400); if ($this->getImageSizeMB($decoded) > 4) return response()->json(['message' => "O tamanho de imagem permitido somente abaixo de 4 MB"], 400); // if (base64_encode($decoded) !== $exploded[$this->is_string_encoded($request[$imageAttr])?0:1]) return response()->json(['message' => 'Imagem invalida.'],400); //faz o upload temporario no storage - by Rodrigues Mafumo $tempFileName = $imageAttr . '.jpg'; if (Storage::put($tempFileName, $decoded)) { $path = storage_path('app/') . $tempFileName; $tempFile = new \Symfony\Component\HttpFoundation\File\File($path); $file = UploadedFile::createFromBase(new UploadedFile($tempFile->getPathname(), $tempFile->getFilename(), $tempFile->getMimeType(), null, true)); $newRequest = new Request(); $newRequest->files->set($imageAttr, $file); return $this->generateImageUrl($newRequest, $imageAttr); } } } #server private function getImageSizeMB($imagebase64) { $size_in_bytes = (int) (strlen(rtrim($imagebase64, '=')) * 1); $size_in_kb = $size_in_bytes / 1024; $size_in_mb = round($size_in_kb / 1024, 2); return $size_in_mb; } #server // Check if there are valid base64 characters function is_string_encoded($s) { return !startsWith("data:image/", $s); } private function deleteImageFile($obj, $param, $location) { //? Retorna a posicao do documentos $posicao = strrpos($obj[$param], '/') + 1; $imageName = substr($obj[$param], $posicao, strlen($obj[$param])); File::delete(public_path($location . $imageName)); } public function updateDocoment(Request $request) { $documentType = strtolower($request->document_type); $imageFront = ''; $imageBack = ''; $imageSelfie = ''; $this->validate( $request, [ 'document_type' => 'required' ], [ 'document_type.required' => 'O tipo de documento é obrigatório' ] ); if ($documentType === 'bi' || $documentType === 'dire') { $this->validate( $request, [ 'image_front' => 'required', 'image_back' => 'required', 'image_selfie' => 'required' ], [ 'image_front.required' => 'A foto frontal é obrigatória', 'image_back.required' => 'A foto traseira é obrigatória', 'image_selfie.required' => 'A selfie é obrigatória', ] ); $imageFront = $this->generateImageUrl($request, 'image_front'); $imageBack = $this->generateImageUrl($request, 'image_back'); $imageSelfie = $this->generateImageUrl($request, 'image_selfie'); } else { $this->validate( $request, [ 'image_front' => 'required', 'image_selfie' => 'required' ], [ 'image_front.required' => 'A foto frontal é obrigatória', 'image_selfie.required' => 'A selfie é obrigatória', ] ); $imageFront = $this->generateImageUrl($request, 'image_front'); $imageSelfie = $this->generateImageUrl($request, 'image_selfie'); } $user = User::find($request->user()->id); //? Codigo novo ... $userDocument = UserDocument::query()->where('user_id', $user->id)->orderBy('id', 'desc')->get(); if ($userDocument->count() > 1) { foreach ($userDocument as $key => $ud) { if ($key != 0) { # code... $this->deleteImageFile($ud, 'image_front', '/images/documentos/'); $this->deleteImageFile($ud, 'image_back', '/images/documentos/'); $this->deleteImageFile($ud, 'image_selfie', '/images/documentos/'); $doc = UserDocument::findOrFail($ud->id); $doc->delete(); } } } $userDocument = UserDocument::query()->where('user_id', $user->id)->orderBy('id', 'desc')->get()->toArray(); // if($userDocument->document_type === 'BI' || $userDocument->document_type === 'DIRE'){ if (count($userDocument) === 1) { //? Retorna a posicao do documentos $this->deleteImageFile($userDocument[0], 'image_front', '/images/documentos/'); $this->deleteImageFile($userDocument[0], 'image_back', '/images/documentos/'); $this->deleteImageFile($userDocument[0], 'image_selfie', '/images/documentos/'); } // else { // //? Retorna a posicao do documentos // $this->deleteImageFile($userDocument, 'image_front', '/images/documentos/'); // $this->deleteImageFile($userDocument, 'image_selfie', '/images/documentos/'); // } // return response()->json(['message' => 'Documento Carregado com Sucesso']); //? Codigo novo ... $imaliUser = ImaliAccount::query() ->where('user_id', $user->id) ->first(); if (!is_string($imageFront)) return $imageFront; if (!is_string($imageBack)) return $imageBack; if (!is_string($imageSelfie)) return $imageSelfie; if (count($userDocument) == 1) { UserDocument::query() ->where('user_id', $user->id)->orderBy('id', 'desc')->first() ->where('user_id', $user->id)->first() ->update([ 'image_front' => $imageFront, 'image_back' => $imageBack, 'image_selfie' => $imageSelfie, 'status' => 'pending', 'document_type' => strtoupper($request->document_type) ]); } else { UserDocument::create([ 'image_front' => $imageFront, 'image_back' => $imageBack, 'image_selfie' => $imageSelfie, 'document_type' => strtoupper($request->document_type), 'user_id' => $user->id, 'status' => 'pending', 'imali_account_id' => $imaliUser->id ]); } User::query() ->where('id', $request->user()->id) ->update(['info_status' => 1, 'update_info_status' => 'pending']); $notification = array( 'icon' => 'ic_i_mali_cover', 'title' => 'Actualização Documentos', 'body' => 'Caro cliente, os teus documentos foram submetidos com Sucesso.', 'click_action' => 'com.imali.payapp.payment_NOTICIA', 'color' => '#ffffff' ); $data = array( 'sms' => 'Parabéns, os teus documentos foram submetidos com Sucesso. Com os documentos actualizados, tens a possibilidade de fazer transacções e pagamentos com montantes maiores. Os teus documentos estão em avaliação e o iMali vai responder o teu pedido em breve. iMali, Diferente Como Tu!', 'route' => 'NOTICIA', 'terminal' => 'firebase' ); $userData = User::query() ->where('id', $request->user()->id) ->first(); $this->pushNotifification($userData->firebase_token, $notification, $data); //return response()->json(['message' => 'Documento Carregado com Sucesso']); return response()->json(['message' => 'Parabéns, os teus documentos foram submetidos com Sucesso. Com os documentos actualizados, tens a possibilidade de fazer transacções e pagamentos com montantes maiores. Os teus documentos estão em avaliação e o iMali vai responder o teu pedido em breve. iMali, Diferente Como Tu!']); } //? NOVO CODIGO DE UPDATE DOCUMENT public function pushNotifification($token, $notification = array(), $data = array()) { $apiKey = 'AAAA8zVzEPQ:APA91bHl_DXB6UGb_6gZlmFnaLTQoANtX_OBjvl3nOy2bSlnFhxedvk6EhGj7cZoIvmlbKeCnqGxXbuyMH_rEPuhRXvuitXzo6Pfl2TMXLar1PlifXqEhYq6tS55UMrY2Kffzj-P_UH-'; $fields = array('to' => $token, 'notification' => $notification, 'data' => $data); $headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json'); $url = 'https://fcm.googleapis.com/fcm/send'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($curl); curl_close($curl); return json_decode($result, true); } }