274 lines
10 KiB
PHP
Executable File
274 lines
10 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
use App\Models\Agent;
|
|
use App\Models\AgentPlus;
|
|
use App\Models\Identification;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
|
|
class UserController extends Controller
|
|
{
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
//
|
|
}
|
|
|
|
public function identification(Request $request)
|
|
{
|
|
|
|
$identification = new Identification();
|
|
$this->validate($request, $identification->rules());
|
|
|
|
$dbIdentification = Identification::where('id_user', $request->id_user)->first();
|
|
if ($dbIdentification)
|
|
return $this->errorResponse(trans('errors.identification_carried_out'));
|
|
|
|
if ($request->has('id_user'))
|
|
$user = User::findOrFail($request->id_user);
|
|
elseif ($request->has('phone_number'))
|
|
$user = User::where('phone', $request->phone_number)->firstOrFail();
|
|
|
|
$identification->fill($request->all());
|
|
$identification->id_user = $user->id;
|
|
$identification->status = 0;
|
|
$identification->createdAt = $this->getCurrentTimeByCountryCode($user->network->country->code_country);
|
|
|
|
$identification->save();
|
|
$this->sendMail($user->email, trans('messages.successful_identification', ['name' => $identification->lastname . ' ' . $identification->firstname]),
|
|
trans('messages.successful_identification_message', ['name' => $identification->lastname . ' ' . $identification->firstname]));
|
|
return $this->successResponse(trans('messages.successful_identification', ['name' => $identification->lastname . ' ' . $identification->firstname]));
|
|
}
|
|
|
|
public function updateIdentification(Request $request)
|
|
{
|
|
|
|
$identification = Identification::findOrFail($request->id);
|
|
|
|
$identification->fill($request->all());
|
|
$identification->status = 0;
|
|
|
|
$this->deleteImageFile($identification->user_image, "photos");
|
|
$this->deleteImageFile($identification->document_image_front, "documents");
|
|
$this->deleteImageFile($identification->document_image_back, "documents");
|
|
|
|
|
|
$identification->user_image = '';
|
|
$identification->document_image_front = '';
|
|
$identification->document_image_back = '';
|
|
$identification->save();
|
|
|
|
$this->sendMail($identification->user->email, trans('messages.successful_identification_modification'),
|
|
trans('messages.successful_identification_modification_message', ['name' => $identification->lastname . ' ' . $identification->firstname]));
|
|
return $this->successResponse(trans('messages.successful_identification_modification', ['name' => $identification->lastname . ' ' . $identification->firstname]));
|
|
}
|
|
|
|
public function validateIdentification(Request $request, $id_identification)
|
|
{
|
|
$identification = Identification::findOrFail($id_identification);
|
|
if ($identification->status == 1) {
|
|
return $this->errorResponse(trans('messages.identification_already_validated'));
|
|
}
|
|
// dd($request->all());
|
|
$this->validate($request, [
|
|
'document_image_front' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6144',
|
|
'document_image_back' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6144',
|
|
'user_image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6144',
|
|
]);
|
|
|
|
$identification->document_image_front = $this->uploadImage($request, 'document_image_front', 'D-F', "documents");
|
|
$identification->document_image_back = $this->uploadImage($request, 'document_image_back', 'D-B', "documents");
|
|
$identification->user_image = $this->uploadImage($request, 'user_image', 'U', "photos");
|
|
|
|
$identification->status = 1;
|
|
|
|
$identification->save();
|
|
$this->sendMail($identification->user->email, trans('messages.validated_identification'), trans('messages.validated_identification_message'));
|
|
return $this->successResponse(trans('messages.validated_identification'));
|
|
}
|
|
|
|
public function fetchIdentification($user_phone)
|
|
{
|
|
// return Identification::where('id_user', $id_user)->firstOrFail();
|
|
$user = User::where('phone', $user_phone)->first();
|
|
if ($user) {
|
|
$identification = Identification::where('id_user', $user->id)->first();
|
|
$data['isIdentified'] = false;
|
|
$data['isIdentifiedValidated'] = false;
|
|
$data['data'] = $identification;
|
|
if ($identification) {
|
|
$data['isIdentified'] = true;
|
|
$data['isIdentifiedValidated'] = $identification->status == 1;
|
|
}
|
|
return $this->successResponse($data);
|
|
} else {
|
|
return $this->errorResponse(trans('errors.user_phone_not_exist'), Response::HTTP_NOT_FOUND);
|
|
}
|
|
|
|
}
|
|
|
|
public function verifyIdentification($user_phone)
|
|
{
|
|
$user = User::where('phone', $user_phone)->first();
|
|
if ($user) {
|
|
$identification = Identification::where('id_user', $user->id)->first();
|
|
if ($identification) {
|
|
return $this->errorResponse(trans('messages.user_identificated'));
|
|
} else
|
|
return $this->successResponse($user);
|
|
} else {
|
|
return $this->errorResponse(trans('errors.user_phone_not_exist'), Response::HTTP_NOT_FOUND);
|
|
}
|
|
|
|
}
|
|
|
|
private function generateRandomString($length = 10)
|
|
{
|
|
$characters = '23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ';
|
|
$charactersLength = strlen($characters);
|
|
$randomString = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
}
|
|
return $randomString;
|
|
}
|
|
|
|
public function rattachCard(Request $request, $id_user)
|
|
{
|
|
$this->validate($request, [
|
|
// 'id_user' => 'required|integer|min:0|not_in:0',
|
|
'numero_carte' => 'required',
|
|
'expiration_date' => 'required_if:facade,front|date_format:m/y|after_or_equal:today',
|
|
]);
|
|
$user = User::findOrFail($id_user);
|
|
$user->numero_carte = $request->numero_carte;
|
|
$expiration_date = \DateTime::createFromFormat('m/y', $request->expiration_date);
|
|
if (!$expiration_date)
|
|
$expiration_date = new \DateTime();
|
|
$user->expiration_date = $expiration_date;
|
|
$user->save();
|
|
return $this->successResponse(trans('messages.successful_card_attachment'));
|
|
}
|
|
|
|
public function uploadImage(Request $request, $key, $imageCode, $folderName)
|
|
{
|
|
|
|
// if ($request->hasFile('image')) {
|
|
$original_filename = $request->file($key)->getClientOriginalName();
|
|
$original_filename_arr = explode('.', $original_filename);
|
|
$file_ext = end($original_filename_arr);
|
|
$image = $imageCode . '-' . Str::uuid() . '.' . $file_ext;
|
|
|
|
//Check if the directory already exists.
|
|
$directoryName = './' . $folderName;
|
|
if (!is_dir($directoryName)) {
|
|
//Directory does not exist, so lets create it.
|
|
mkdir($directoryName, 0755);
|
|
}
|
|
|
|
// Allow certain file formats
|
|
// $allowTypes = array('jpg', 'png', 'jpeg', 'gif');
|
|
// if (in_array(strtolower($file_ext), $allowTypes)) {
|
|
|
|
$compressedImage = $this->compressImage($request->file($key), './' . $folderName . '/' . $image, 70);
|
|
if ($compressedImage) {
|
|
return $image;
|
|
} else {
|
|
return $this->errorResponse(trans('errors.compression_failed'));
|
|
}
|
|
// } else {
|
|
// return $this->errorResponse('Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.');
|
|
// }
|
|
|
|
// } else {
|
|
// return $this->errorResponse('File not found');
|
|
// }
|
|
|
|
}
|
|
|
|
private function deleteImageFile($filename, $folderName)
|
|
{
|
|
// unlink(storage_path('./'.$folderName.'/' . $filename));
|
|
$path = './' . $folderName . '/' . $filename;
|
|
if (File::exists($path))
|
|
File::delete($path);
|
|
}
|
|
|
|
/*
|
|
* Custom function to compress image size and
|
|
* upload to the server using PHP
|
|
*/
|
|
private function compressImage($source, $destination, $quality)
|
|
{
|
|
// Get image info
|
|
$imgInfo = getimagesize($source);
|
|
$mime = $imgInfo['mime'];
|
|
|
|
// Create a new image from file
|
|
switch ($mime) {
|
|
case 'image/jpeg':
|
|
$image = imagecreatefromjpeg($source);
|
|
break;
|
|
case 'image/png':
|
|
$image = imagecreatefrompng($source);
|
|
break;
|
|
case 'image/gif':
|
|
$image = imagecreatefromgif($source);
|
|
break;
|
|
default:
|
|
$image = imagecreatefromjpeg($source);
|
|
}
|
|
|
|
// Save image
|
|
imagejpeg($image, $destination, $quality);
|
|
|
|
// Return compressed image
|
|
return $destination;
|
|
}
|
|
|
|
// Mise a jour du mot de passe
|
|
|
|
public function updatePassword(Request $request)
|
|
{
|
|
$this->validate($request, [
|
|
'phone' => 'required',
|
|
'type' => 'required|in:user,agent',
|
|
// 'oldPassword' => 'required',
|
|
'newPassword' => 'required',
|
|
]);
|
|
|
|
if ($request->type == 'user') {
|
|
$user = User::where('phone', $request->phone)->firstOrFail();
|
|
} else {
|
|
$agent_plus = AgentPlus::where('phone', $request->phone)->orWhere('transactionNumber', $request->phone)->firstOrFail();
|
|
$user = Agent::findOrFail($agent_plus->id);
|
|
}
|
|
|
|
if ($request->has('oldPassword') && !$this->checkPassword($request->oldPassword, $user->encrypted_password, $user->salt))
|
|
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
|
|
|
$hash = $this->hashSSHA($request->newPassword);
|
|
$user->salt = $hash['salt'];
|
|
$user->encrypted_password = $hash['encrypted'];
|
|
$user->save();
|
|
|
|
$this->sendMail($user->email, trans('messages.password_update'),
|
|
trans('messages.successful_password_update') . ' ' . trans('messages.your_new_password', ['password' => $request->newPassword]));
|
|
|
|
return $this->successResponse(trans('messages.successful_password_update'));
|
|
|
|
}
|
|
|
|
}
|