File: /var/www/vhost/disk-apps/alq-central.bikenow.co/app/Http/Controllers/Api/UserApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\DataPolicyClient;
use App\Http\Controllers\Controller;
use App\TermClient;
use App\User;
use App\UserInformation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class UserApiController extends Controller
{
public $__SUPERADMIN_ROL = 1;
public $__ADMIN_ROL = 2;
public $__MESSENGER_ROL = 3;
private $appUrl;
public function __construct()
{
$this->appUrl = env('APP_URL');
}
public function getAppUrl()
{
return $this->appUrl;
}
// Registro normal de usuarios a traves de la app de e-commerce
public function signup(Request $request)
{
$email = User::where("email", $request["accountInfo"]["email"])->get();
if (count($email) > 0) {
$data = array('status' => 'email_already_exists');
return response()->json($data, 200);
}
return $this->createUser($request, 4);
}
// Es cuando se realiza registro de Mensajero o administrador a traves del admin.
public function signupFromAdmin(Request $request)
{
$userCopy = User::where("email", $request["accountInfo"]["email"])->first();
if (isset($userCopy->id)) {
$user = new User();
$user->setConnection($request["name_database"]);
$userN = $user->where('email', $request["accountInfo"]["email"])->first();
if (isset($userN->id)) {
$data = array('status' => 'email_already_exists', 'd' => $userN);
return response()->json($data, 200);
} else {
$userTerms = TermClient::where("user_id", $userCopy->id)->first();
$userInformation = UserInformation::where("user_id", $userCopy->id)->first();
return $this->createCopyUserHost($userCopy, $userTerms, $userInformation, $request["name_database"]);
}
}
return $this->createUser($request, $request["rol"]);
}
// Es cuando se realiza registro de un cliente en el pedido tipo venta a traves del admin.
public function signupFromAdminSale(Request $request)
{
$userCopy = User::where("document", $request["accountInfo"]["document"])->first();
if (isset($userCopy->id)) {
$user = new User();
$user->setConnection($request["name_database"]);
$userN = $user->where('document', $request["accountInfo"]["document"])->first();
if (isset($userN->id)) {
$data = array('status' => 'document_already_exists');
return response()->json($data, 200);
} else {
$userTerms = TermClient::where("user_id", $userCopy->id)->first();
$userInformation = UserInformation::where("user_id", $userCopy->id)->first();
return $this->createCopyUserHost($userCopy, $userTerms, $userInformation, $request["name_database"]);
}
}
return $this->createUser($request, $request["rol"]);
}
public function createUser($request, $rol)
{
$user = new User();
$user->first_name = $request["accountInfo"]["name"];
$user->last_name = $request["accountInfo"]["lastName"];
$user->phone = $request["accountInfo"]["cellPhone"];
$user->email = $request["accountInfo"]["email"];
$user->password = \Hash::make($request["accountInfo"]["password"]);
if (isset($request["accountInfo"]["document"]))
$user->document = $request["accountInfo"]["document"];
$user->rol_id = $rol;
$user->save();
$isSubscriber = null;
if (isset($request["accountInfo"]["isSubscriber"]))
$isSubscriber = $request["accountInfo"]["isSubscriber"];
if ($user->id) {
/* CONSIDERACIÓN: Los términos que se guardan en central son siempre 1 para manejo exclusivo del registro; sin embargo,
los nuevos términos y condiciones que el equipo vaya cargando quedan aceptados dentro de la BD de cada equipo */
$userTerms = new TermClient();
$userTerms->accepted = 1;
$userTerms->term_id = 1;
$userTerms->user_id = $user->id;
$userTerms->save();
$userInformation = new UserInformation();
$userInformation->is_initial = 1;
$userInformation->is_tutorial_viewed = 1;
$userInformation->is_habeas_data_viewed = 1;
$userInformation->user_id = $user->id;
if (in_array($rol, [$this->__MESSENGER_ROL]) && isset($request["accountInfo"])) {
$userInformation->plate = $request["accountInfo"]["plate"];
$userInformation->courier_company_id = $request["accountInfo"]["courier_company_id"];
$userInformation->sucursal_id = $request["accountInfo"]["sucursal_id"];
}
$userInformation->save();
}
return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"], $isSubscriber);
}
public function createCopyUserHost($userCopy, $userTermsCopy, $userInformationCopy, $db_connection, $isSubscriber = null)
{
$user = new User();
$user->setConnection($db_connection);
$user->id = $userCopy->id;
$user->first_name = $userCopy->first_name;
$user->last_name = $userCopy->last_name;
$user->phone = $userCopy->phone;
$user->email = $userCopy->email;
$user->password = $userCopy->password;
$user->document = $userCopy->document;
$user->rol_id = $userCopy->rol_id;
$user->created_at = $userCopy->created_at;
if (isset($isSubscriber))
$user->is_subscriber = $isSubscriber;
$user->save();
$termId = $userTermsCopy->term_id;
$controller = new CentralApiController;
$bodyTerm = $controller->getTermsActive();
if ($bodyTerm && isset($bodyTerm->term)) {
$termId = $bodyTerm->term->id;
}
$userTerms = new TermClient();
$userTerms->setConnection($db_connection);
$userTerms->accepted = $userTermsCopy->accepted;
$userTerms->term_id = $termId;
$userTerms->user_id = $userCopy->id;
$userTerms->created_at = $userTermsCopy->created_at;
$userTerms->updated_at = $userTermsCopy->updated_at;
$userTerms->save();
$policyId = $userTermsCopy->term_id;
$bodyPolicy = $controller->getActivePolicy();
if ($bodyPolicy && isset($bodyPolicy->activePolicy)) {
$policyId = $bodyPolicy->activePolicy->id;
}
$dataPolicy = new DataPolicyClient();
$dataPolicy->setConnection($db_connection);
$dataPolicy->accepted = $userTermsCopy->accepted;
$dataPolicy->data_policy_id = $policyId;
$dataPolicy->user_id = $userCopy->id;
$dataPolicy->created_at = $userTermsCopy->created_at;
$dataPolicy->updated_at = $userTermsCopy->updated_at;
$dataPolicy->save();
$userInformation = new UserInformation();
$userInformation->setConnection($db_connection);
$userInformation->id = $userInformationCopy->id;
$userInformation->is_initial = $userInformationCopy->is_initial;
$userInformation->is_tutorial_viewed = $userInformationCopy->is_tutorial_viewed;
$userInformation->is_habeas_data_viewed = $userInformationCopy->is_habeas_data_viewed;
$userInformation->user_id = $userCopy->id;
$userInformation->created_at = $userInformationCopy->created_at;
$userInformation->updated_at = $userInformationCopy->updated_at;
if (in_array(intval($userCopy->rol_id), [$this->__MESSENGER_ROL])) { // Para mensajero se necesitan estos datos adicionales.
$userInformation->plate = $userInformationCopy->plate;
$userInformation->courier_company_id = $userInformationCopy->courier_company_id;
$userInformation->sucursal_id = $userInformationCopy->sucursal_id;
$userInformation->photo = $userInformationCopy->photo;
}
$userInformation->save();
$data = array('status' => 'success', 'user' => $user);
return response()->json($data, 200);
}
public function validateLogin(Request $request)
{
$endpoint = 'https://alq-cali.bikenow.co/api/central/validate/login';
$apiCall = Http::withToken(
$request->bearerToken()
)->withOptions([
"verify" => false,
])->withHeaders(
["origin" => $this->getAppUrl()]
)->post(
$endpoint,
$request->all()
);
return $apiCall->body();
$user = User::where("email", $request["email"]);
if (isset($request["validateRole"])) {
$user = $user->where('rol_id', $request["validateRole"])->first();
} else {
$user = $user->first();
}
if (isset($user->id)) {
$userHost = new User();
$userHost->setConnection($request["name_database"]);
$userValidate = $userHost->where('email', $request["email"])->withTrashed()->first();
if (isset($userValidate->id)) {
if ($user->remember_token != null) {
$userValidate->password = $user->password;
$userValidate->update();
}
$data = array('status' => 'success');
return response()->json($data, 200);
} else { // el usuario no existe en la ciudad
if ($user->rol_id == $this->__MESSENGER_ROL) {
if ($request['change'] == 'client') { //Cambio la conexión a otro cliente?
$data = array('status' => 'user_not_exists');
return response()->json($data, 200);
} else if ($request['change'] == 'city') { //Cambio la conexión a otra ciudad?
$userTerms = TermClient::where("user_id", $user->id)->first();
$userInformation = UserInformation::where("user_id", $user->id)->first();
return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"]);
}
} else {
$userTerms = TermClient::where("user_id", $user->id)->first();
$userInformation = UserInformation::where("user_id", $user->id)->first();
return $this->createCopyUserHost($user, $userTerms, $userInformation, $request["name_database"]);
}
}
} else {
$data = array('status' => 'user_not_exists');
return response()->json($data, 200);
}
}
public function deleteUser($id)
{
UserInformation::find($id)->forceDelete();
User::find($id)->forceDelete();
}
public function deleteSystemUser(Request $request)
{
$user = User::find($request->id);
if ($user) {
TermClient::where('user_id', $user->id)->delete();
UserInformation::where('user_id', $user->id)->delete();
User::where('id', $user->id)->delete();
}
}
public function update(Request $request)
{
$user = User::find($request->id);
if ($user) {
$user->first_name = $request["first_name"];
$user->last_name = $request["last_name"];
$user->phone = $request["phone"];
$user->email = $request["email"];
$user->document = $request["document"];
if ($request["password"])
$user->password = \Hash::make($request["password"]);
if ($request["rol_id"])
$user->rol_id = $request["rol_id"];
$user->update();
return $user;
}
return false;
}
public function fixPassword($init, $end)
{
$users = User::where('id', '>=', $init)->where('id', '<=', $end)->get();
foreach ($users as $key => $user) {
$user->password = \Hash::make($user->password);
$user->update();
}
return response()->json(200);
}
}