ok

Mini Shell

Direktori : /home2/selectio/www/billingsoftwarenew/core/app/Http/Controllers/Admin/
Upload File :
Current File : //home2/selectio/www/billingsoftwarenew/core/app/Http/Controllers/Admin/NotificationController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Constants\Status;
use App\Http\Controllers\Controller;
use App\Models\GeneralSetting;
use App\Models\NotificationTemplate;
use App\Notify\Sms;
use Illuminate\Http\Request;

class NotificationController extends Controller {
    public function global () {
        $pageTitle = 'Global Template for Notification';
        return view('admin.notification.global_template', compact('pageTitle'));
    }

    public function globalUpdate(Request $request) {
        $request->validate([
            'email_from'     => 'required|email|string|max:40',
            'sms_from'       => 'required|string|max:40',
            'email_template' => 'required',
            'sms_body'       => 'required',
        ]);

        $general                 = GeneralSetting::first();
        $general->email_from     = $request->email_from;
        $general->email_template = $request->email_template;
        $general->sms_from       = $request->sms_from;
        $general->sms_body       = $request->sms_body;
        $general->save();

        $notify[] = ['success', 'Global notification settings updated successfully'];
        return back()->withNotify($notify);
    }

    public function templates() {
        $pageTitle = 'Notification Templates';
        $templates = NotificationTemplate::orderBy('name')->get();
        return view('admin.notification.templates', compact('pageTitle', 'templates'));
    }

    public function templateEdit($id) {
        $template  = NotificationTemplate::findOrFail($id);
        $pageTitle = $template->name;
        return view('admin.notification.edit', compact('pageTitle', 'template'));
    }

    public function templateUpdate(Request $request, $id) {
        $request->validate([
            'subject'    => 'required|string|max:255',
            'email_body' => 'required',
            'sms_body'   => 'required',
        ]);
        $template                           = NotificationTemplate::findOrFail($id);
        $template->subj                     = $request->subject;
        $template->email_body               = $request->email_body;
        $template->email_status             = $request->email_status ? Status::ENABLE : Status::DISABLE;
        $template->sms_body                 = $request->sms_body;
        $template->sms_status               = $request->sms_status ? Status::ENABLE : Status::DISABLE;
        $template->push_notification_body   = $request->push_notification_body;
        $template->push_notification_status = $request->push_notification_status ? Status::ENABLE : Status::DISABLE;
        $template->save();

        $notify[] = ['success', 'Notification template updated successfully'];
        return back()->withNotify($notify);
    }

    public function emailSetting() {
        $pageTitle = 'Email Notification Settings';
        return view('admin.notification.email_setting', compact('pageTitle'));
    }

    public function emailSettingUpdate(Request $request) {
        $request->validate([
            'email_method' => 'required|in:php,smtp,sendgrid,mailjet',
            'host'         => 'required_if:email_method,smtp',
            'port'         => 'required_if:email_method,smtp',
            'username'     => 'required_if:email_method,smtp',
            'password'     => 'required_if:email_method,smtp',
            'enc'          => 'required_if:email_method,smtp',
            'appkey'       => 'required_if:email_method,sendgrid',
            'public_key'   => 'required_if:email_method,mailjet',
            'secret_key'   => 'required_if:email_method,mailjet',
        ], [
            'host.required_if'       => ':attribute is required for SMTP configuration',
            'port.required_if'       => ':attribute is required for SMTP configuration',
            'username.required_if'   => ':attribute is required for SMTP configuration',
            'password.required_if'   => ':attribute is required for SMTP configuration',
            'enc.required_if'        => ':attribute is required for SMTP configuration',
            'appkey.required_if'     => ':attribute is required for SendGrid configuration',
            'public_key.required_if' => ':attribute is required for Mailjet configuration',
            'secret_key.required_if' => ':attribute is required for Mailjet configuration',
        ]);
        if ($request->email_method == 'php') {
            $data['name'] = 'php';
        } else if ($request->email_method == 'smtp') {
            $request->merge(['name' => 'smtp']);
            $data = $request->only('name', 'host', 'port', 'enc', 'username', 'password', 'driver');
        } else if ($request->email_method == 'sendgrid') {
            $request->merge(['name' => 'sendgrid']);
            $data = $request->only('name', 'appkey');
        } else if ($request->email_method == 'mailjet') {
            $request->merge(['name' => 'mailjet']);
            $data = $request->only('name', 'public_key', 'secret_key');
        }
        $general              = GeneralSetting::first();
        $general->mail_config = $data;
        $general->save();
        $notify[] = ['success', 'Email settings updated successfully'];
        return back()->withNotify($notify);
    }

    public function emailTest(Request $request) {
        $request->validate([
            'email' => 'required|email',
        ]);

        $general      = GeneralSetting::first();
        $config       = $general->mail_config;
        $receiverName = explode('@', $request->email)[0];
        $subject      = strtoupper($config->name) . ' Configuration Success';
        $message      = 'Your email notification setting is configured successfully for ' . $general->site_name;

        if ($general->en) {
            $user = [
                'username' => $request->email,
                'email'    => $request->email,
                'fullname' => $receiverName,
            ];
            notify($user, 'DEFAULT', [
                'subject' => $subject,
                'message' => $message,
            ], ['email'], false);
        } else {
            $notify[] = ['info', 'Please enable from general settings'];
            $notify[] = ['error', 'Your email notification is disabled'];
            return back()->withNotify($notify);
        }

        if (session('mail_error')) {
            $notify[] = ['error', session('mail_error')];
        } else {
            $notify[] = ['success', 'Email sent to ' . $request->email . ' successfully'];
        }

        return back()->withNotify($notify);
    }

    public function smsSetting() {
        $pageTitle = 'SMS Notification Settings';
        return view('admin.notification.sms_setting', compact('pageTitle'));
    }

    public function smsSettingUpdate(Request $request) {
        $request->validate([
            'sms_method'             => 'required|in:clickatell,infobip,messageBird,nexmo,smsBroadcast,twilio,textMagic,custom',
            'clickatell_api_key'     => 'required_if:sms_method,clickatell',
            'message_bird_api_key'   => 'required_if:sms_method,messageBird',
            'nexmo_api_key'          => 'required_if:sms_method,nexmo',
            'nexmo_api_secret'       => 'required_if:sms_method,nexmo',
            'infobip_username'       => 'required_if:sms_method,infobip',
            'infobip_password'       => 'required_if:sms_method,infobip',
            'sms_broadcast_username' => 'required_if:sms_method,smsBroadcast',
            'sms_broadcast_password' => 'required_if:sms_method,smsBroadcast',
            'text_magic_username'    => 'required_if:sms_method,textMagic',
            'apiv2_key'              => 'required_if:sms_method,textMagic',
            'account_sid'            => 'required_if:sms_method,twilio',
            'auth_token'             => 'required_if:sms_method,twilio',
            'from'                   => 'required_if:sms_method,twilio',
            'custom_api_method'      => 'required_if:sms_method,custom|in:get,post',
            'custom_api_url'         => 'required_if:sms_method,custom',
        ]);

        $data = [
            'name'          => $request->sms_method,
            'clickatell'    => [
                'api_key' => $request->clickatell_api_key,
            ],
            'infobip'       => [
                'username' => $request->infobip_username,
                'password' => $request->infobip_password,
            ],
            'message_bird'  => [
                'api_key' => $request->message_bird_api_key,
            ],
            'nexmo'         => [
                'api_key'    => $request->nexmo_api_key,
                'api_secret' => $request->nexmo_api_secret,
            ],
            'sms_broadcast' => [
                'username' => $request->sms_broadcast_username,
                'password' => $request->sms_broadcast_password,
            ],
            'twilio'        => [
                'account_sid' => $request->account_sid,
                'auth_token'  => $request->auth_token,
                'from'        => $request->from,
            ],
            'text_magic'    => [
                'username'  => $request->text_magic_username,
                'apiv2_key' => $request->apiv2_key,
            ],
            'custom'        => [
                'method'  => $request->custom_api_method,
                'url'     => $request->custom_api_url,
                'headers' => [
                    'name'  => $request->custom_header_name ?? [],
                    'value' => $request->custom_header_value ?? [],
                ],
                'body'    => [
                    'name'  => $request->custom_body_name ?? [],
                    'value' => $request->custom_body_value ?? [],
                ],
            ],
        ];
        $general             = GeneralSetting::first();
        $general->sms_config = $data;
        $general->save();
        $notify[] = ['success', 'Sms settings updated successfully'];
        return back()->withNotify($notify);
    }

    public function smsTest(Request $request) {
        $request->validate(['mobile' => 'required']);
        $general = GeneralSetting::first();
        if ($general->sn == Status::ENABLE) {
            $sendSms               = new Sms;
            $sendSms->mobile       = $request->mobile;
            $sendSms->receiverName = ' ';
            $sendSms->message      = 'Your sms notification setting is configured successfully for ' . $general->site_name;
            $sendSms->subject      = ' ';
            $sendSms->send();
        } else {
            $notify[] = ['info', 'Please enable from general settings'];
            $notify[] = ['error', 'Your sms notification is disabled'];
            return back()->withNotify($notify);
        }

        if (session('sms_error')) {
            $notify[] = ['error', session('sms_error')];
        } else {
            $notify[] = ['success', 'SMS sent to ' . $request->mobile . 'successfully'];
        }

        return back()->withNotify($notify);
    }

    public function push() {
        $pageTitle = 'Push Notification Setting';
        return view('admin.notification.push_setting', compact('pageTitle'));
    }
    public function pushSetting(Request $request) {
        $request->validate([
            'serverKey'         => 'required|string',
            'apiKey'            => 'required|string|max:255',
            'authDomain'        => 'required|string|max:255',
            'projectId'         => 'required|string|max:255',
            'storageBucket'     => 'required|string|max:255',
            'messagingSenderId' => 'required|string|max:255',
            'appId'             => 'required|string|max:255',
            'measurementId'     => 'required|string|max:255',
        ]);
        $general                     = gs();
        $general->push_configuration = [
            'serverKey'         => $request->serverKey,
            'apiKey'            => $request->apiKey,
            'authDomain'        => $request->authDomain,
            'projectId'         => $request->projectId,
            'storageBucket'     => $request->storageBucket,
            'messagingSenderId' => $request->messagingSenderId,
            'appId'             => $request->appId,
            'measurementId'     => $request->measurementId,
        ];
        $general->save();

        $notify[] = ['success', 'Push notification setting updated successfully'];
        return back()->withNotify($notify);
    }
}

Zerion Mini Shell 1.0