diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 2e0542f..8e08c8a 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -10,12 +10,13 @@ use App\Traits\Helper; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Date; -use Illuminate\Support\Facades\Mail; +use Illuminate\Support\Facades\File; class UserController extends Controller { use ApiResponser; use Helper; + /** * Create a new controller instance. * @@ -33,22 +34,45 @@ class UserController extends Controller $this->validate($request, $identification->rules()); $dbIdentification = Identification::where('id_user', $request->id_user)->first(); - if($dbIdentification) + if ($dbIdentification) return $this->errorResponse(trans('errors.identification_carried_out')); - if($request->has('id_user')) + if ($request->has('id_user')) $user = User::findOrFail($request->id_user); elseif ($request->has('phone_number')) - $user = User::where('phone',$request->phone_number)->firstOrFail(); + $user = User::where('phone', $request->phone_number)->firstOrFail(); $identification->fill($request->all()); $identification->id_user = $user->id; $identification->status = 0; $identification->save(); - $this->sendMail($user->email,trans('messages.successful_identification'), - trans('messages.successful_identification_message',['name'=>$identification->lastname.' '.$identification->firstname])); - return $this->successResponse(trans('messages.successful_identification',['name'=>$identification->lastname.' '.$identification->firstname])); + $this->sendMail($user->email, trans('messages.successful_identification'), + 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) @@ -64,14 +88,14 @@ class UserController extends Controller 'user_image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:6048', ]); - $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->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')); + $this->sendMail($identification->user->email, trans('messages.validated_identification'), trans('messages.validated_identification_message')); return $this->successResponse(trans('messages.validated_identification')); } @@ -79,18 +103,18 @@ class UserController extends Controller { // return Identification::where('id_user', $id_user)->firstOrFail(); $user = User::where('phone', $user_phone)->first(); - if($user){ + if ($user) { $identification = Identification::where('id_user', $user->id)->first(); $data['isIdentified'] = false; $data['isIdentifiedValidated'] = false; $data['data'] = $identification; - if($identification){ + if ($identification) { $data['isIdentified'] = true; - $data['isIdentifiedValidated'] = $identification->status == 1 ; + $data['isIdentifiedValidated'] = $identification->status == 1; } return $this->successResponse($data); - }else{ - return $this->errorResponse(trans('errors.user_phone_not_exist'),Response::HTTP_NOT_FOUND); + } else { + return $this->errorResponse(trans('errors.user_phone_not_exist'), Response::HTTP_NOT_FOUND); } } @@ -98,14 +122,14 @@ class UserController extends Controller public function verifyIdentification($user_phone) { $user = User::where('phone', $user_phone)->first(); - if($user){ + if ($user) { $identification = Identification::where('id_user', $user->id)->first(); - if($identification){ + if ($identification) { return $this->errorResponse(trans('messages.user_identificated')); - }else + } else return $this->successResponse($user); - }else{ - return $this->errorResponse(trans('errors.user_phone_not_exist'),Response::HTTP_NOT_FOUND); + } else { + return $this->errorResponse(trans('errors.user_phone_not_exist'), Response::HTTP_NOT_FOUND); } } @@ -121,11 +145,12 @@ class UserController extends Controller return $randomString; } - public function rattachCard(Request $request , $id_user){ + 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', + '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; @@ -137,32 +162,32 @@ class UserController extends Controller return $this->successResponse(trans('messages.successful_card_attachment')); } - public function uploadImage(Request $request , $key , $imageCode, $folderName) + 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.'-' . time() . '.' . $file_ext; + $original_filename = $request->file($key)->getClientOriginalName(); + $original_filename_arr = explode('.', $original_filename); + $file_ext = end($original_filename_arr); + $image = $imageCode . '-' . time() . '.' . $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); - } + //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 + // 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')); - } + $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.'); // } @@ -173,6 +198,14 @@ class UserController extends Controller } + 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 diff --git a/app/Models/User.php b/app/Models/User.php index 9f7161e..63f3785 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -31,6 +31,7 @@ use Illuminate\Database\Eloquent\Model; * @property Carbon $date_modified * @property Carbon $date_created * @property int $network_id + * @property int $group_id * * @property Collection|Identification[] $identifications * @property Collection|WalletsUser[] $wallets_users @@ -45,7 +46,8 @@ class User extends Model protected $casts = [ 'solde' => 'float', 'active' => 'int', - 'network_id' => 'int' + 'network_id' => 'int', + 'group_id' => 'int' ]; protected $dates = [ diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index a0407cd..178c0af 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -17,12 +17,18 @@ return [ 'transaction_not_exist' => 'This transaction does not exist', 'withdrawal_already_made' => 'Withdrawal already made', 'invalid_withdrawal_code' => 'Invalid withdrawal code', - 'incorrect_withdrawal_amount'=> 'Incorrect withdrawal amount', + 'incorrect_withdrawal_amount' => 'Incorrect withdrawal amount', 'operation_cannot_performed_in_country' => 'This operation cannot be performed in this country', 'withdrawal_network_unauthorized' => 'This withdrawal cannot be made in this network. Paying network : :network :country', 'user_identification_required' => 'User identification is required to continue the operation', 'validation_user_identification_required' => 'Validation of user identification is required to continue the operation', 'incorrect_net_amount' => 'Net amount is less than zero', - 'agent_unauthorized'=> 'This agent cannot make this withdrawal' + 'agent_unauthorized' => 'This agent cannot make this withdrawal', + 'sponsor_identification_required' => 'Sponsor :id identification is required to continue the operation', + 'validation_sponsor_identification_required' => 'Validation of sponsor :id identification is required to continue the operation', + 'not_group_sponsor' => 'You are not a sponsor of this group', + 'group_already_activated' => 'This group is already activated', + 'sponsor_belongs_to_group' => 'Sponsor :id already belongs to a group', + 'treated_group_demand' => 'Group validation request already processed', ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index ee7ee81..b5c20d7 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -131,7 +131,7 @@ Transaction information : - User code : :sender_code - Card number : :cart_number - Withdrawal code : :code', - 'successful_agent_remove_cash'=>'Withdrawal of money from a geolocated agent + 'successful_agent_remove_cash' => 'Withdrawal of money from a geolocated agent Transaction information : - Number : :id_transaction - Country of departure : :init_country @@ -141,4 +141,14 @@ Transaction information : - Withdrawal amount : :amount - Withdrawal transaction number : :id_transaction_retrait - Withdrawal code : :code', + + 'successful_user_group_created' => 'The group was created successfully. Awaiting validation from the 3 sponsors to activate it', + 'successful_group_validation' => 'Group validation successful. Only :count validation remaining|Group validation successful. Only :count validations remaining', + 'successful_identification_modification' => 'Successful identification modification', + 'successful_identification_modification_message' => 'Hi :name, + +Your new identification has been taken into account. Contact an iLink World agent with your ID to validate your identity. + +Regards, +iLinkWorld team.', ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index f7482e3..7346ef0 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -17,12 +17,18 @@ return [ 'transaction_not_exist' => 'Cette transaction n\'existe pas', 'withdrawal_already_made' => 'Retrait déjà éffectué', 'invalid_withdrawal_code' => 'Code de retrait invalide', - 'incorrect_withdrawal_amount'=> 'Montant de retrait incorrect', + 'incorrect_withdrawal_amount' => 'Montant de retrait incorrect', 'operation_cannot_performed_in_country' => 'Cette operation ne peut pas etre effectuée dans ce pays', 'withdrawal_network_unauthorized' => 'Ce retrait ne peut etre effectué dans ce reseau. Réseau payeur : :network :country', 'user_identification_required' => 'L\'identification de l\'utilisateur est requise pour continuer l\'operation', 'validation_user_identification_required' => 'La validation de l\'identification de l\'utilisateur est requise pour continuer l\'operation', 'incorrect_net_amount' => 'Le montant net est inférieur à zéro', - 'agent_unauthorized'=> 'Cet agent ne peut pas effectuer ce retrait', + 'agent_unauthorized' => 'Cet agent ne peut pas effectuer ce retrait', + 'sponsor_identification_required' => 'L\'identification du sponsor :id est requise pour continuer l\'operation', + 'validation_sponsor_identification_required' => 'La validation de l\'identification du sponsor :id est requise pour continuer l\'operation', + 'not_group_sponsor' => 'Vous n\'êtes pas un sponsor de ce groupe', + 'group_already_activated' => 'Ce groupe est déjà activé', + 'sponsor_belongs_to_group' => 'Sponsor :id appartient déjà à un groupe', + 'treated_group_demand' => 'Demande de validation de groupe déjà traitée', ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 6d62486..a740c6d 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -131,7 +131,7 @@ Informations de la transaction : - Code utilisateur : :sender_code - Numero de la carte : :cart_number - Code de retrait : :code', - 'successful_agent_remove_cash'=>'Retrait d\'argent chez un agent géolocalisé + 'successful_agent_remove_cash' => 'Retrait d\'argent chez un agent géolocalisé Informations de la transaction : - Numéro : :id_transaction - Pays de départ : :init_country @@ -140,5 +140,15 @@ Informations de la transaction : - Noms du destinataire : :receiver_name - Montant de retrait : :amount - Numero de transaction de retrait : :id_transaction_retrait - - Code de retrait : :code' + - Code de retrait : :code', + + 'successful_user_group_created' => 'Le groupe a été crée avec succes. En attente de validation des 3 sponsors pour l\'activer', + 'successful_group_validation' => 'Validation du groupe réussie. Plus que :count validation restante|Validation du groupe réussie. Plus que :count validations restantes', + 'successful_identification_modification' => 'Modification de l\'identification réussie', + 'successful_identification_modification_message' => 'Salut :name, + +Votre nouvelle identification a bien été bien prise en compte. Rapprochez vous auprès d\'un agent iLink World muni de votre pièce d\'identité pour faire valider de votre identité. + +Cordialement, +Equipe iLinkWorld.', ]; diff --git a/routes/web.php b/routes/web.php index c634693..39e72a3 100755 --- a/routes/web.php +++ b/routes/web.php @@ -60,11 +60,17 @@ $router->group(['prefix' => '/wallets'] , function () use ($router){ }); // Idendification routes -$router->group(['prefix' => '/identifications'] , function () use ($router){ - $router->post('','UserController@identification'); - $router->post('{id_identification}','UserController@validateIdentification'); - $router->get('{user_phone}','UserController@fetchIdentification'); - $router->get('verify/{user_phone}','UserController@verifyIdentification'); +$router->group(['prefix' => '/identifications'], function () use ($router) { + $router->post('', 'UserController@identification'); + $router->put('', 'UserController@updateIdentification'); + $router->post('{id_identification}', 'UserController@validateIdentification'); + $router->get('{user_phone}', 'UserController@fetchIdentification'); + $router->get('verify/{user_phone}', 'UserController@verifyIdentification'); $router->post('rattach_card/{id_user}', 'UserController@rattachCard'); }); +// Users groups routes +$router->group(['prefix' => '/groups'], function () use ($router) { + $router->post('', 'NanoCreditController@createGroup'); + $router->put('', 'NanoCreditController@validateGroup'); +});