20 September 2023

How to delete previous image on update new image or delete record in laravel?

Delete previous image on update new image or delete record in laravel

Laravel Model

public function getProfileImageAttribute($profile_image)

    {

        if(!empty($profile_image))

        {

            return $filepath = URL::to('/') . '/public/upload/' . $profile_image;

        }

    }


    // Custom method to get the original unmodified URL

    public function getOriginalProfileImageAttribute()

    {

        return $this->attributes['profile_image'];

    }


    function deleteProfileImage(){

        $model = $this;

        // Check if the avatar attribute is changing

        if ($model->isDirty('profile_image')) {

            // Delete the previous profile image if it exists

            $previousFile = $model->getOriginal('original_profile_image');

            if (!empty($previousFile) && Storage::disk('uploads')->exists($previousFile)) {

                // Delete the file

                Storage::disk('uploads')->delete($previousFile);

            }

        }

    }


    protected static function boot()

    {

        parent::boot();


        static::updating(function ($model) {

            $model->deleteProfileImage();

        });

        static::deleting(function ($model) {

            // Delete the previous profile image if it exists

            $previousFile = $model->getOriginal('original_profile_image');

            if (!empty($previousFile) && Storage::disk('uploads')->exists($previousFile)) {

                // Delete the file

                Storage::disk('uploads')->delete($previousFile);

            }

        });

    } 

26 July 2023

How to integrate one signal push notification in website (Laravel)?

Integrate one signal push notification

    <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
    <script>
    var OneSignal = window.OneSignal || [];
        var initConfig = {
            appId: "{{ env('OneSignalApp_ID') }}",
            notifyButton: {
                enable: true
            },
        };
        OneSignal.push(function () {
            OneSignal.init(initConfig);
            console.log(OneSignal);
        });
        OneSignal.push(function() {
/*             OneSignal.isPushNotificationsEnabled(function(isEnabled) {
                if (isEnabled)
                console.log("Push notifications are enabled!");
                else
                console.log("Push notifications are not enabled yet.");    
            }); */

            OneSignal.isPushNotificationsEnabled(function(isEnabled) {
            if (isEnabled) {
                // user has subscribed
                OneSignal.getUserId( function(userId) {
                    console.log('player_id of the subscribed user is : ' + userId);
                    if($("#one_signal_player_id").length > 0){
                        $("#one_signal_player_id").val(userId);
                    }
                    // Make a POST call to your server with the user ID        
                });
            }
            });
        });
        </script>

How to integrate pubnub chat in website?

Integrate pubnub chat

 
<script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>

<script src="https://cdn.pubnub.com/sdk/javascript/pubnub.7.2.3.min.js"></script>

<style>

.user_pubnub_mgs {

    height: 450px;

    border: 1px solid #d0d0d0;

    padding: 10px 12px;

    overflow-y: auto;

}

.other_user_chat {

    background: #b4b4b4;

    margin-bottom: 10px;

    padding: 10px;

    width: fit-content;

    font-size: 14px;

    border-radius: 10px 0px 10px 10px;

    color: #fff;

    display: block;

    word-break: break-word;

}

.current_user_chat {

    background: #2695ee;

    margin-bottom: 10px;

    padding: 10px;

    width: fit-content;

    font-size: 14px;

    border-radius: 10px 0px 10px 10px;

    color: #fff;

    display: block;

    word-break: break-word;

    margin-left: auto;

}

#send_chat_bt {

    background: #2695ee;

}

#send_chat_bt[disabled] {

    background: #dadada !important;

}

</style>

<script>

const buttonClick = () => {

    var input = document.getElementById('message-input');

    publishMessage(input.value);

    input.value = '';

};


const delete_full_messages = () => {

    var channel_name = "hello_world";

    pubnub_delete_full_messages(channel_name);

};


const showMessage = (msg) => {

var message = '';

msg = msg;

if(msg !== null && msg !== ""){

    var currentUserId = {{ auth('customer')->user()->id }};

    console.log(msg);

    var user_class = '';

    if (currentUserId == msg.user_id) {

        user_class = "current_user_chat";

    }

    else{

        user_class = "other_user_chat";

    }

    console.log(user_class);

    message = "<div class='chat_messages " + user_class + "'>" + msg.chat_message     + "</div>"

    $('#messages').append(message);

    if(message){

         const divElement = $(".user_pubnub_mgs");

        const innerScrollHeight = divElement.prop("scrollHeight") - divElement.height();

        $(".user_pubnub_mgs").animate({

            scrollTop: $('.user_pubnub_mgs').offset().top + innerScrollHeight

        }, 0); 

    }  

}  

};



const appendMessageToWebPage = (message) => {

    myObj = message.entry.chat_message;

    if (myObj !== null && typeof myObj !== 'undefined') {

        showMessage(message.entry);

    }

}


let pubnub;

const setupPubNub = () => {

    // Update this block with your publish/subscribe keys

    pubnub = new PubNub({

        publishKey: "pub-c-52377dc0-a888-44a0-841f-825b319416b9",

        subscribeKey: "sub-c-c2a10f4c-394c-4b89-ba16-4de660c4f0b0",

        userId: "1"

    });


    // add listener

    const listener = {

        status: (statusEvent) => {

            if (statusEvent.category === "PNConnectedCategory") {

                console.log("Connected");

            }

        },

        message: (messageEvent) => {


            // handle message

            const channelName = messageEvent.channel;

            const channelGroup = messageEvent.subscription;

            const publishTimetoken = messageEvent.timetoken;

            const msg = messageEvent.message;

            const publisher = messageEvent.publisher;


            //show time

            const unixTimestamp = messageEvent.timetoken / 10000000;

            const gmtDate = new Date(unixTimestamp * 1000);

            const localeDateTime = gmtDate.toLocaleString();



            showMessage(messageEvent.message);


        },

        messageAction: function(ma) {

            // handle message actions

            console.log('messageAction');

        },

        presence: (presenceEvent) => {

            // handle presence

            console.log('working');

        }


    };

    pubnub.addListener(listener);


    // subscribe to a channel

    pubnub.subscribe({

        channels: ["hello_world"]

    });



    pubnub.history({

        channel: 'hello_world',


    }, function(status, response) {

/*         console.log(response.messages); */

        if (response.messages.length) {

            console.log(response.messages);

            response.messages.forEach(appendMessageToWebPage);

        }


    });


};


// run after page is loaded

window.onload = setupPubNub;

// publish message

const publishMessage = async (message) => {

    // With the right payload, you can publish a message, add a reaction to a message,

    // send a push notification, or send a small payload called a signal.

    var currentUserId = {{ auth('customer')->user()->id }};

    const publishPayload = {

        channel: "hello_world",

        message: {

            title: "User Chat",

            type: "user_chat",

            chat_message: message,

            user_id: currentUserId,

            read: 0,

        }

    };

    await pubnub.publish(publishPayload);

}

// Delete_messages message

const pubnub_delete_full_messages = async (channel_name) => {

    // With the right payload, you can publish a message, add a reaction to a message,

    // send a push notification, or send a small payload called a signal.

    try {

        const result = await pubnub.deleteMessages({

            channel: channel_name,

            //start: "15088506076921021",

            //end: "15088532035597390",

        });

    } catch (status) {

        console.log(status);

    }

}

</script>

<div class="ps-section__header">

    <h3>Messages</h3>


    <!-- <div class="float-right">

            <a class="add-address ps-btn ps-btn--sm ps-btn--small" href="{{ route('customer.address.create') }}">

                <span>{{ __('Add a new address') }}</span>

            </a>

        </div> -->

</div>

<div class="ps-section__content">

    <div>

<!--         <button onclick="delete_full_messages()">Delete messages</button> -->

        <div id="messages" class="user_pubnub_mgs"></div>

        <input id="message-input" type="text">

        <button onclick="buttonClick()" id="send_chat_bt">Send</button>

    </div>

</div>

<script>

$(document).ready(function(){

    $("body").on("click, keyup","#message-input", function(){

    var message_body =  $(this).val();

        if(message_body){

            $("#send_chat_bt").prop('disabled', false);

        }

        else{

            $("#send_chat_bt").prop('disabled', true);

        }

    });

    $(document).on('keyup','#message-input',function(e){

            if (e.code === "Enter") {  //checks whether the pressed key is "Enter"

                buttonClick();

            }

    });

});


</script>


How to create load more on scroll functionality in laravel?

Create load more on scroll functionality in laravel

Main listing file
<style>
.notifications_page_cover_ui {
    overflow: auto;
    max-height: 474px;
}
</style>
<div class="ps-section__right">
    <div class="section-header">
        <h3>Notifications</h3>
    </div>
    <div class="section-content">
       <div class="notifications_page_cover_ui" id="load-more-container">
        <?php echo $notification_list ?>
       </div>
    </div>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
    let lastNotificationID = {!! $lastNotificationID !!}; // Pass the last item ID from your controller or view
    let loading = false;
    function loadMoreData() {
        if (loading) {
            return; // If a request is already in progress, do nothing
        }
        loading = true; // Set the flag to indicate that a request is in progress
        $.ajax({
            url:  "{{route('customer.loadMoreNotifications')}}",
            method: 'GET',
            data: { lastNotificationID: lastNotificationID },
            success: function(response) {
                loading = false; // Reset the flag when the request is complete
                if (response["notification_list"].length > 0) {
                    let notification_list = '';
                    /* console.log();  */
                    $('#load-more-container').append(response["notification_list"]);
                    lastNotificationID = response["lastNotificationID"];
                } else {
                    // No more data to load
                }
            },
            error: function() {
                loading = false; // Reset the flag in case of an error
            }
        });
    }

    $('#load-more-container').on('scroll', function() {
        let scrollableDiv = $(this);
        let scrollableHeight = scrollableDiv.prop('scrollHeight');
        let visibleHeight = scrollableDiv.height();
        let scrollPosition = scrollableDiv.scrollTop();
        if (scrollPosition + visibleHeight >= scrollableHeight - 100) {
            // Scroll has reached the end of the div
            loadMoreData();
        } else {
            // Scroll is not at the end of the div
        }
    });
});
</script>


Controller function file

    public function getNotifications(Request $request, BaseHttpResponse $response)
    {   
        $currentUser = auth('customer')->user();
        $notifications = Notification::where("sent_to",$currentUser->id)->with(["SentTo"])->orderBy("id","DESC")->paginate(10);
        $lastNotificationID = $notifications->last();
        $lastNotificationID = $lastNotificationID->id;
        $notification_list_view = Theme::getThemeNamespace() . '::views.ecommerce.customers.notifications.notification-list';
        $notification_list = view($notification_list_view,compact("notifications"))->render();
        return Theme::scope('ecommerce.customers.notifications.all-notifications',compact("lastNotificationID","notification_list"))->render();
    }

    public function loadMoreNotifications(Request $request)
    {
        $currentUser = auth('customer')->user();
        $lastNotificationID = $request->input('lastNotificationID');
        // Fetch more data from your model using the lastItemID as an offset
        $notifications = Notification::where('id', '<', $lastNotificationID)->where("sent_to",$currentUser->id)->with(["SentTo"])->orderBy("id","ASC")->paginate(10);
        if(!empty($notifications[0])){
            $lastNotificationID = $notifications->last();
            $lastNotificationID = $lastNotificationID->id;
        }
        $notification_list_view = Theme::getThemeNamespace() . '::views.ecommerce.customers.notifications.notification-list';
        $notification_list = view($notification_list_view,compact("notifications"))->render();
        $data = ["notification_list"=>$notification_list,"lastNotificationID"=>$lastNotificationID];
        return response()->json($data);
    }

Data listing file (notification-list.blade.php)

@if(!empty($notifications[0]))
    @foreach($notifications as $notification)
    <div class="notofication_card_ui {{ ($notification->is_read == '0')? 'project_assigned_ui' : ''}}">
        <div class="user_card_box">
            <span class="user_avatar"><img src="{{$notification->SentTo->avatar_url}}"></span>
            <div class="user_message_description"><h5 class="user_name">{{$notification->id}}{{$notification->SentTo->name}}</h5><span class="message__sent_time">{{$notification->created_time_ago}}</span></div>
        </div>
        <div class="user_comment_box">
        <p>{{$notification->message}}</p>
        </div>
        <div class="view_notification_btn"><a href="{{route('customer.readNotifications', $notification->id)}}" class="view_more_notification_btn">View</a></div>
    </div>
    @endforeach
@endif

28 June 2023

How to use Mutators and Accessors in Laravel?

Mutators and Accessors in Laravel     


Set file path in model

public function getFilePathAttribute($file_path)

    {

        if(!empty($file_path))

        {

             return $filepath = URL::to('/') . '/upload/' . $file_path;

/*             return asset('/upoad/' . $file_path); */


        }

    }

Set created time ago in model

protected $appends = ["created_time_ago"];

public function getCreatedTimeAgoAttribute()

    {

        $created_at = $this->attributes['created_at'];

        // Convert the date/time to a Carbon instance

        $carbonCreatedAt = Carbon::parse($created_at);

        // Get the "time ago" format

        $timeAgo = $carbonCreatedAt->diffForHumans();

        // Set the modified value to the column

        return $timeAgo;

    }

Set created time ago in model

public function getRequestedTimeAttribute($requested_time)

    {

        if(!empty($requested_time))

        {

             return date_format($requested_time,"Y-m-d");

        }

    }

How to upload multi file by base64 url in laravel?

Multi file upload by base64 url in laravel

Function


function uploadBase64File($base64_url){

    $response = array();

    $base64Data = $base64_url;

    $pattern = '/data:(.*);base64,([^"]*)/';

    // Perform the regular expression match

    preg_match($pattern, $base64Data, $matches);

    if (!empty($matches[1])) {

        $mime = $matches[1];

        // Remove the data:image/jpeg;base64, part from the string

        $mimeToExt = [

            'image/jpeg' => 'jpg',

            'image/png' => 'png',

            'image/gif' => 'gif',

            'image/bmp' => 'bmp',

            'image/webp' => 'webp',

            'application/pdf' => 'pdf',

            'application/msword' => 'doc',

            'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx',

            // Add more mappings as needed

        ];

        // Check if the MIME type exists in the mapping

        if (isset($mimeToExt[$mime])) {

            $extension = $mimeToExt[$mime];

        }

        

        $base64Data = str_replace('data:' . $matches[1] . ';base64,', '', $base64Data);

        // Decode the base64 data into binary format

        $fileData = base64_decode($base64Data);

        $urlParts = parse_url($base64Data);

        $queryString = $urlParts['query'];

        parse_str($queryString, $queryParameters);

        $original_filename = uniqid() . "-" . $queryParameters['filename'];

        if(empty($queryParameters['filename'])){

        // Generate a unique file name for the uploaded file

        $original_filename = uniqid() . "." . $extension;

        }

        $response["file_name"] = $original_filename; 

        $response["file_extension"] = $extension; 

        $response["file_data"] = $fileData; 

        return $response;

    }

}




=====================================================

Add base 64 url

$base64url = "";

$Base64File = uploadBase64File($base64url);

if(!empty($Base64File["file_name"])){

$original_filename = $Base64File["file_name"];

$file_extension = $Base64File["file_extension"];

$file_data = $Base64File["file_data"];

$storagePath = "service-requests/location-images" . "/" . $original_filename;

$filePath = Storage::disk('uploads')->put($storagePath, $file_data);

$ServiceRequestsDocs = ServiceRequestsDocs::create([

'file_extensions' => $file_extension,

'file_name' => $original_filename,

'file_path' => $storagePath,

]

);

}


Add below code in config\filesystem.php file

        'uploads' => [

            'driver' => 'local',

            'root' => public_path() .'/upload',

            'visibility' => 'public',

       ]


Add in Model file   
 public function getFilePathAttribute($file_path)

    {

        if(!empty($file_path))

        {

             return $filepath = URL::to('/') . '/upload/' . $file_path;

/*             return asset('/upoad/' . $file_path); */


        }

    }

How to use autofill google place APi(google Map APi)?

 <html>

    <head>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBcRA4LijSY8e-FG4lN1sTYChasKAEsrGo&libraries=places"></script>
    </head>
    <body>
    <input type="text" id="autocomplete-input" placeholder="Enter a location">
    </body>
    <script>
    // Replace 'YOUR_API_KEY' with your actual API key
    const apiKey = 'AIzaSyBcRA4LijSY8e-FG4lN1sTYChasKAEsrGo';

    // Initialize the autocomplete object
    const autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete-input'), {
    types: ['geocode'],  // Restrict the results to geographical locations
    apiKey: apiKey       // Provide your API key
    });

    // Add an event listener for when a place is selected
    autocomplete.addListener('place_changed', onPlaceSelected);

    // Handle the selected place
    function onPlaceSelected() {
    const place = autocomplete.getPlace();
    console.log(place); // You can access the selected place object here
    }
    </script>
</html>

How to fetch instagram posts data?

Fetch Instagram posts data by pasting this code in browser console. (() => { /* ====================================================...