HEX
Server: LiteSpeed
System: Linux my-kul-web2054.main-hosting.eu 5.14.0-611.13.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 11 04:57:59 EST 2025 x86_64
User: u665686179 (665686179)
PHP: 8.2.30
Disabled: system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: /home/u665686179/domains/dealkr.com/public_html/app/Services/PushNotificationService.php
<?php

namespace App\Services;

use Exception;

class PushNotificationService
{
    public function getMessageKeyData(string $userType): array
    {
        $customer = [
            'order_pending_message',
            'order_confirmation_message',
            'order_processing_message',
            'out_for_delivery_message',
            'order_delivered_message',
            'order_returned_message',
            'order_failed_message',
            'order_canceled',
            'order_refunded_message',
            'refund_request_canceled_message',
            'message_from_delivery_man',
            'message_from_admin',
            'message_from_seller',
            'fund_added_by_admin_message',
            'your_referred_customer_has_been_place_order',
            'your_referred_customer_order_has_been_delivered',
        ];

        $vendor = [
            'new_order_message',
            'refund_request_message',
            'order_edit_message',
            'withdraw_request_status_message',
            'message_from_customer',
            'message_from_delivery_man',
            'delivery_man_assign_by_admin_message',
            'order_delivered_message',
            'order_canceled',
            'order_refunded_message',
            'refund_request_canceled_message',
            'refund_request_status_changed_by_admin',
            'product_request_approved_message',
            'product_request_rejected_message'
        ];
        
        $delivery_man = [
            'new_order_assigned_message',
            'expected_delivery_date',
            'delivery_man_charge',
            'order_canceled',
            'order_rescheduled_message',
            'order_edit_message',
            'message_from_seller',
            'message_from_admin',
            'message_from_customer',
            'cash_collect_by_admin_message',
            'cash_collect_by_seller_message',
            'withdraw_request_status_message',
        ];
        return match ($userType) {
            'customer' => $customer,
            'seller' => $vendor,
            'delivery_man' => $delivery_man,
        };
    }

    public function getAddData(string $userType, string $value): array
    {
        return [
            'user_type' => $userType,
            'key' => $value,
            'message' => 'customize your' . ' ' . str_replace('_', ' ', $value) . ' ' . 'message',
            'created_at' => now(),
            'updated_at' => now(),
        ];
    }

    public function getUpdateData(object $request, string $message, string $status, string $lang): array
    {
        return [
            'message' => $request->$message[array_search('en', $request->$lang)],
            'status' => $request->$status ?? false,
            'updated_at' => now(),
        ];
    }

    public function getFCMCredentialsArray(object|array $request): array
    {
        return [
            'apiKey' => $request['apiKey'],
            'authDomain' => $request['authDomain'],
            'projectId' => $request['projectId'],
            'storageBucket' => $request['storageBucket'],
            'messagingSenderId' => $request['messagingSenderId'],
            'appId' => $request['appId'],
            'measurementId' => $request['measurementId'],
        ];
    }

    /**
     * @throws Exception
     */
    public function firebaseConfigFileGenerate(array $config): void
    {
        $apiKey = $config['apiKey'] ?? '';
        $authDomain = $config['authDomain'] ?? '';
        $projectId = $config['projectId'] ?? '';
        $storageBucket = $config['storageBucket'] ?? '';
        $messagingSenderId = $config['messagingSenderId'] ?? '';
        $appId = $config['appId'] ?? '';
        $measurementId = $config['measurementId'] ?? '';

        $filePaths = [
            base_path('firebase-messaging-sw.js'),
            base_path('public/firebase-messaging-sw.js')
        ];

        $fileContent = <<<JS
            importScripts('https://www.gstatic.com/firebasejs/8.3.2/firebase-app.js');
            importScripts('https://www.gstatic.com/firebasejs/8.3.2/firebase-messaging.js');
            importScripts('https://www.gstatic.com/firebasejs/8.3.2/firebase-auth.js');

            firebase.initializeApp({
                apiKey: "{$apiKey}",
                authDomain: "{$authDomain}",
                projectId: "{$projectId}",
                storageBucket: "{$storageBucket}",
                messagingSenderId: "{$messagingSenderId}",
                appId: "{$appId}",
                measurementId: "{$measurementId}"
            });

            const messaging = firebase.messaging();
            messaging.setBackgroundMessageHandler(function(payload) {
                return self.registration.showNotification(payload.data.title, {
                    body: payload.data.body || '',
                    icon: payload.data.icon || ''
                });
            });
            JS;


        foreach ($filePaths as $filePath) {
            $this->writeToFile($filePath, $fileContent);
        }
    }

    /**
     * @throws Exception
     */
    private function writeToFile(string $filePath, string $fileContent): void
    {
        try {
            if (!file_exists($filePath)) {
                if (file_put_contents($filePath, '') === false) {
                    throw new Exception("Failed to create file: $filePath");
                }
            }

            if (!is_writable($filePath)) {
                throw new Exception("File exists but is not writable: $filePath");
            }

            if (file_put_contents($filePath, $fileContent, LOCK_EX) === false) {
                throw new Exception("Failed to write to file: $filePath");
            }
        } catch (Exception $e) {
            error_log($e->getMessage());
            throw $e;
        }
    }

}