ok

Mini Shell

Direktori : /home2/selectio/public_html/billingsoftwarenew/core/app/Notify/
Upload File :
Current File : //home2/selectio/public_html/billingsoftwarenew/core/app/Notify/NotifyProcess.php

<?php

namespace App\Notify;

use App\Constants\Status;
use App\Models\AdminNotification;
use App\Models\NotificationLog;
use App\Models\NotificationTemplate;

class NotifyProcess {

    /*
    |--------------------------------------------------------------------------
    | Notification Process
    |--------------------------------------------------------------------------
    |
    | This is the core processor to send a notification to receiver. In this
    | class, find the notification template from database and build the final
    | message replacing the short codes and provide this to the method to send
    | the notification. Also notification log and error is creating here.
    |
     */

    /**
     * Template name, which contain the short codes and messages
     *
     * @var string
     */
    public $templateName;

    /**
     * Short Codes, which will be replaced
     *
     * @var array
     */
    public $shortCodes;

    /**
     * Instance of user, who will get the notification
     *
     * @var object
     */
    public $user;

    /**
     * System general setting's instances
     *
     * @var object
     */
    public $setting;

    /**
     * Status field name in database of notification template
     *
     * @var string
     */
    protected $statusField;

    /**
     * Global template field name in database of notification method
     *
     * @var string
     */
    protected $globalTemplate;

    /**
     * Message body field name in database of notification
     *
     * @var string
     */
    protected $body;

    /**
     * Notification template instance
     *
     * @var object
     */
    public $template;

    /**
     * Message, if the email template doesn't exists
     *
     * @var string|null
     */
    public $message;

    /**
     * Notification log will be created or not
     *
     * @var bool
     */
    public $createLog;

    /**
     * Method configuration field name in database
     *
     * @var string
     */
    public $notifyConfig;

    /**
     * Subject of notification
     *
     * @var string
     */
    public $subject;

    /**
     * Name of receiver
     *
     * @var string
     */
    public $receiverName;

    /**
     * The relational field name like user_id, agent_id
     *
     * @var string
     */
    public $userColumn;

    /**
     * Address of receiver, like email, mobile number etc
     *
     * @var string
     */
    protected $toAddress;

    /**
     * Final message of notification
     *
     * @var string
     */
    protected $finalMessage;

    /**
     * Get the final message after replacing the short code.
     *
     * Also custom message will be return from here if notification template doesn't exist.
     *
     * @return string
     */
    protected function getMessage() {
        $this->prevConfiguration();
        $this->setSetting();

        $body           = $this->body;
        $user           = $this->user;
        $globalTemplate = $this->globalTemplate;

        //finding the notification template
        $template       = NotificationTemplate::where('act', $this->templateName)->where($this->statusField, Status::ENABLE)->first();
        $this->template = $template;

        //Getting the notification message from database if use and template exist
        //If not exist, get the message which have sent via method
        if ($user && $template) {
            $message = $this->replaceShortCode($user->fullname, $user->username, $this->setting->$globalTemplate, $template->$body);
            if (empty($message)) {
                $message = $template->$body;
            }
        } else {
            $message = $this->replaceShortCode($this->receiverName, $this->toAddress, $this->setting->$globalTemplate, $this->message);
        }

        //replace the all short cod of template
        if ($this->shortCodes) {
            foreach ($this->shortCodes as $code => $value) {
                $message = str_replace('{{' . $code . '}}', $value, $message);
            }
        }

        //Check email enable
        if (!$this->template && $this->templateName) {
            return false;
        }

        //set subject to property
        $this->getSubject();

        $this->finalMessage = $message;

        //return the final message
        return $message;
    }

    /**
     * Replace the short code of global template
     *
     * @return string
     */
    protected function replaceShortCode($name, $username, $template, $body) {
        $message = str_replace("{{fullname}}", $name, $template);
        $message = str_replace("{{username}}", $username, $message);
        $message = str_replace("{{message}}", $body, $message);
        return $message;
    }

    /**
     * Set the subject with replaced the short codes
     *
     * @return void
     */
    protected function getSubject() {
        if ($this->template) {
            $subject = $this->template->subj;
            if ($this->shortCodes) {
                foreach ($this->shortCodes as $code => $value) {
                    $subject = str_replace('{{' . $code . '}}', $value, $subject);
                }
            }
            $this->subject = $subject;
        }
    }

    /**
     * Set the setting if not set yet
     *
     * @return void
     */
    protected function setSetting() {
        if (!$this->setting) {
            $this->setting = gs();
        }
    }

    /**
     * Create the notification log
     *
     * @return void
     */
    public function createErrorLog($message) {
        $adminNotification            = new AdminNotification();
        $adminNotification->user_id   = 0;
        $adminNotification->title     = $message;
        $adminNotification->click_url = '#';
        $adminNotification->save();
    }

    /**
     * Create the error log
     *
     * @return void
     */
    public function createLog($type) {
        $userColumn = $this->userColumn;
        if ($this->user && $this->createLog) {
            $notifyConfig    = $this->notifyConfig;
            $config          = $this->setting->$notifyConfig;
            $notificationLog = new NotificationLog();
            if (@$this->user->id) {
                $notificationLog->$userColumn = $this->user->id;
            }
            $notificationLog->notification_type = $type;
            $notificationLog->sender            = @$config->name ? @$config->name : trans('Firebase');
            $notificationLog->sent_from         = $this->setting->email_from;
            $notificationLog->sent_to           = is_array($this->toAddress) ? json_encode($this->toAddress) : $this->toAddress;
            $notificationLog->subject           = $this->subject;
            $notificationLog->message           = $type == 'email' ? $this->finalMessage : strip_tags($this->finalMessage);
            $notificationLog->save();
        }
    }
}

Zerion Mini Shell 1.0