HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/agile-selling-wpb/app/Http/Controllers/Api/UserApiController.php
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\MailboxUser;
use App\Events\ChatEvent;
use Carbon\Carbon;

use App\User;
use App\UserInformation;
use App\Address;
use App\Mailbox;
use App\Parameter;
use App\Message;
use App\Chat;
use App\ChatMessage;
use App\Discount;
use App\DiscountOrderUser;
use App\DocumentType;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class UserApiController extends Controller
{

    public function getAllDeliveries()
    {
        $couriers = User::where('rol_id', 3)
            ->where('id', '!=', Auth::user()->id)
            ->where('active', 1)->where('online', 1)->get();

        return array('r' => true, 'd' => $couriers);
    }

    public function closeDeliverySession(Request $request)
    {

        $obj = User::where('email', $request['email'])->first();
        if (!is_null($obj)) {
            $obj->last_session = null;
            $obj->online = 0;
            $obj->update();
        }
        return array('r' => true);
    }

    public function getClient($document)
    {

        $client = User::where('document', $document)->where('active', 1)->first();
        if (isset($client->id)) {
            $direction = Address::address($client->id)->first();
            $result = array('client' => $client->toArray(), 'address' => $direction);
            return array('r' => true, 'd' => $result);
        } else {
            return array('r' => false, 'd' => null);
        }
    }

    public function infoUser(Request $request)
    {
        $user = User::where("email", $request["email"])->with('userInfo')->with('addresses')->with('addresses.city')->first();
        $data = array('status' => 'success', 'user' => $user);
        return response()->json($data, 200);
    }

    public function updateUser(Request $request)
    {
        $user_id = Auth::user()->id;
        $user = User::find($user_id);
        $user_info = UserInformation::where('user_id', $user_id)->first();
        $user->first_name = $request["first_name"];
        $user->last_name = $request["last_name"];
        $user->document = $request["document"];
        $user->phone = $request["phone"];
        $user->email = $request["email"];
        $user->document_type_id = $request["document_type"];
        $user_info->dob = $request["birthdate"];
        $user->update();
        $user_info->update();

        if ($user) {
            $userInfo = User::where("id", $user_id)->with('userInfo')->with('addresses')->with('addresses.city')->first();
            $data = array('status' => 'success', 'user' => $userInfo);
            return response()->json($data, 200);
        } else {
            $data = array('status' => 'error', 'user' => null);
            return response()->json($data, 200);
        }
    }

    public function savePlayerId(Request $request)
    {

        $id = Auth::user()->id;
        $user = User::find($id);
        $user->pns_id = $request['playerId'];
        $user->update();

        return array('r' => true);
    }

    public function mailbox(Request $request)
    {
        $user_id = Auth::user()->id;
        $mailbox = new Mailbox();
        $mailbox->message = $request["mailbox"];
        $mailbox->user_id = $user_id;
        $mailbox->save();

        if ($mailbox) {
            $user = User::find($user_id);
            $parameters = Parameter::find(1);

            $mail = new \stdClass();
            $mail->originCity = $parameters->db_city;
            $mail->userName = $user->first_name .' '. $user->last_name;
            $mail->userEmail = $user->email;
            Mail::to($parameters->email_notification)->send(new MailboxUser($mail));

            $data = array('status' => 'success');
            return response()->json($data, 200);
        }
    }

    public function getMessages()
    {
        $user_id = Auth::user()->id;
        $chat = Chat::where('user_id', $user_id)->first();
        $messages = array();

        if ($chat != null) {
            $messages = ChatMessage::where('chat_id', $chat->id)->with('messages')->get();
        }

        $data = array('status' => 'success', 'messages' => $messages);
        return response()->json($data, 200);
    }

    public function newMessage(Request $request)
    {
        $user_id = Auth::user()->id;
        $nameUser = Auth::user()->first_name . " " . Auth::user()->last_name;
        $chat = Chat::where('user_id', $user_id)->first();

        if ($chat != null) { // Existe conversación.
            $message = new Message();
            $message->message = $request["message"];
            $message->user_id = $user_id;
            $message->read_user = 1;
            $message->image = '';
            $message->save();

            $chat_message = new ChatMessage;
            $chat_message->chat_id = $chat->id;
            $chat_message->messages_id = $message->id;
            $chat_message->save();
        } else {
            $chat = new Chat;
            $chat->user_id = $user_id;
            $chat->save();

            $message = new Message();
            $message->message = $request["message"];
            $message->user_id = $user_id;
            $message->read_user = 1;
            $message->image = '';
            $message->save();

            $chat_message = new ChatMessage;
            $chat_message->chat_id = $chat->id;
            $chat_message->messages_id = $message->id;
            $chat_message->save();
        }
        $time = $chat_message->messages->time_elapsed_string($chat_message->messages->created_at);
        if ($message) {
            $response = array("message" => $message, "name" => $nameUser, "time" => $time);
            event(new ChatEvent($response, $user_id, 4));
            $data = array('status' => 'success', 'message' => $message);
            return response()->json($data, 200);
        }
    }

    public function getUserPermission()
    {
        $id = Auth::user()->id;
        $parameters = Parameter::find(1);

        if ($parameters->deliveryMan_create_order) {
            return array('r' => true, 'city' => $parameters->db_city);
        } else {
            return array('r' => false, 'city' => $parameters->db_city);
        }
    }

    public function updateDelivery(Request $request)
    {

        $id = Auth::user()->id;
        $user =  User::where('id', $id)->with('userInfo')->first();
        $user->first_name = $request['name'];
        $user->last_name = $request['lastname'];
        $user->document =  $request['document'];
        $user->phone = $request['phone'];
        $user->email = $request['email'];
        $user->update();
        return array('r' => true);
    }

    public function updateInfoPermission()
    {

        $parameters = Parameter::find(1);
        if ($parameters->deliveryMan_update_info) {
            return array('r' => true);
        } else {
            return array('r' => false);
        }
    }

    // Genera Pin aleatorio gane.
    public function generatepin()
    {
        $date = Carbon::now();
        $pin = $date->getTimestamp() . rand(10,99);
        return $pin;
    }

    public function uploadImageProfile(Request $request)
    {
        try{
            $id = Auth::user()->id;
            $filename = $this->generatepin() . '.jpg';
            $user = UserInformation::select('id','user_id','photo_social','photo')->where('user_id', $id)->first();
            if($user->photo){
                Storage::disk('s3')->delete(env('S3_AVATARS_PATH') . $user->photo);
            }
            $user->photo_social = null;
            $user->photo = $filename;
            $user->update();

            list($baseType, $image) = explode(';', $request->file);
            list(, $image) = explode(',', $image);
            $image = base64_decode($image);

            // Subir archivo a AWS S3
            Storage::disk('s3')->put(env('S3_AVATARS_PATH') . $filename, $image, 'public');
            return array('status' => true, 'filename' => $filename);
        }catch(\Exception $exx){
            return array('status' => false, 'error' => $exx->getMessage());
        }
    }

    public function itIsAuthorized(Request $request)
    {
        $id = Auth::user()->id;
        try {
            $data = array('status' => 'success');
            return response()->json($data, 200);
        } catch (Exception $e) {
            return $e;
        }
    }

    public function updateViewTutorial()
    {
        try {
            UserInformation::where('user_id', Auth::user()->id)->update(['is_tutorial_viewed' => true]);
            return response()->json(array('status' => true, 'm' => ''), 200);
        } catch (Exception $e) {
            return array('status' => false, 'error' => $e->getMessage());
        }
    }

    public function registerDiscountShipments(Request $request)
    {
        $user_id = Auth::user()->id;
        $discount = Discount::where([['active', true], ['discount_type_id', 1]])->first();
        if (isset($discount->id)) {

            $date = Carbon::now();
            $finalDate = $date->addDays($discount->days_register_discount_delivery);

            $discountOrderUser = new DiscountOrderUser();
            $discountOrderUser->user_id = $user_id;
            $discountOrderUser->discount_id = $discount->id;
            $discountOrderUser->limit_discount = $finalDate;
            $discountOrderUser->save();

            $data = array('status' => 'success');
            return response()->json($data, 200);
        } else {
            $data = array('status' => 'there_is_no_discount');
            return response()->json($data, 200);
        }
    }

    public function updateSucursalUser(Request $request)
    {
        $user_id = Auth::user()->id;
        $updateUser = UserInformation::where('user_id', $user_id)
            ->update(['current_sucursal_id' => $request["sucursal_id"]]);
        if ($updateUser) {
            $data = array('status' => 'success');
            return response()->json($data, 200);
        } else {
            $data = array('status' => 'error');
            return response()->json($data, 200);
        }
    }

    public function getDocumentTypes()
    {
        $document_types = DocumentType::where('active', true)->get();
        $data = array('status' => 'success', 'documents_types' => $document_types);
        return response()->json($data, 200);
    }

    public function updateLastSession()
    {
        try {
            $user = User::where('id', Auth::user()->id)->first();
            $user->last_session = Carbon::now();
            $user->update();
            return array('r' => true, 'm' => null);
        } catch (\Throwable $th) {
            return array('r' => false, 'm' => $th->getMessage());
        }
    }
}