Viewing File: /home/ubuntu/vedadeals-backend-base/app/Services/EmailService.php

<?php 

namespace App\Services;

use Illuminate\Http\Request;

use App\Models\{ User, PasswordReset, Order, OrderPayment };

use App\Jobs\SendEmailJob;

use Setting;

class EmailService {

	/**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct(Request $request)
    {

    }

    /**
     * @method send_admin_welcome_email()
     *
     * @uses to send welcome email when admin created a user
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_admin_welcome_email($user) {

        $token = app('auth.password.broker')->createToken($user);

        PasswordReset::insert([ 'email' => $user->email, 'token' => $token, 'created_at' => now() ]);

    	$email_data['subject'] = tr('user_welcome_email' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['picture']  = $user->picture;

        $email_data['name'] = $user->name;

        $email_data['page'] = "emails.users.admin_welcome";

        $email_data['url'] = url('')."/reset_password?token=".$token;

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_user_welcome_email()
     *
     * @uses to send welcome email when user registered
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_user_welcome_email($user) {

        $email_data['subject'] = tr('user_welcome_email' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['picture']  = $user->picture;

        $email_data['name'] = $user->name;

        if(Setting::get('is_account_email_verification')) {

            $email_data['verification_code'] = $user->verification_code;
        }

        $email_data['page'] = "emails.users.welcome";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_change_password_email()
     *
     * @uses to send password changed success email
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_change_password_email($user) {

        $email_data['subject'] = tr('change_password_success' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['picture']  = $user->picture;

        $email_data['name'] = $user->name;

        $email_data['page'] = "emails.users.change_password";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_forgot_password_email()
     *
     * @uses to send forgot password token email
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_forgot_password_email($user, $token) {

        $email_data['subject'] = tr('forgot_password_subject' , Setting::get('site_name'));
    
        $email_data['email']  = $user->email;

        $email_data['name']  = $user->name;

        $email_data['user']  = $user;

        $email_data['page'] = "emails.users.forgot_password";

        $email_data['url'] = Setting::get('frontend_url')."reset-password/".$token;
        
        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_forgot_password_success_email()
     *
     * @uses to send forgot password changed success email
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_forgot_password_success_email($user) {

        $email_data['subject'] = tr('reset_password_success' , Setting::get('site_name'));
    
        $email_data['email']  = $user->email;

        $email_data['name']  = $user->name;

        $email_data['page'] = "emails.admin.reset_password";
        
        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method user_register_job()
     *
     * @uses User register account
     *
     * @created
     * 
     * @updated 
     *
     * @param object $request
     *
     * @return object 
     */

    public static function user_register_job($user) {

        try {

            if (Setting::get('is_email_notification') == YES && $user) {

                $email_data['subject'] = tr('two_step_verification_subject').' '.Setting::get('site_name');

                $email_data['page'] = "emails.users.welcome";

                $email_data['data'] = $user;

                $email_data['email'] = $user->email;

                $email_data['name'] = $user->name;

                $email_data['verification_code'] = $user->verification_code;

                SendEmailJob::dispatch($email_data);

            }

        } catch(Exception $e) {

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);

        }

    }

    /**
     * @method send_two_step_verification_code_email()
     *
     * @uses to send email with 2 step verification code
     *
     * @created Arun
     *
     * @updated  
     *
     */

    public function send_two_step_verification_code_email($user) {

        $email_data['subject'] = tr('two_step_verification_subject' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['picture']  = $user->picture;

        $email_data['name'] = $user->name;

        $email_data['verification_code'] = $user->verification_code;

        $email_data['page'] = "emails.users.two-step-verification-code";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_withdrawal_request_paid_email()
     *
     * @uses to send amount paid to an user email when admin paid to a withdrawal request.
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_withdrawal_request_paid_email($user_id, $amount) {

        $user = User::find($user_id);

        $email_data['subject'] = tr('amount_paid_by_admin' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['name'] = $user->name;

        $email_data['content'] = tr('amount_paid_by_admin_main_content', formatted_amount($amount));

        $email_data['page'] = "emails.users.withdrawal";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_withdrawal_request_rejected_email()
     *
     * @uses to send withdrawal request rejected email when admin rejected a withdrawal request.
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_withdrawal_request_rejected_email($withdrawal_request) {

        $user = User::find($withdrawal_request->user_id);

        $email_data['subject'] = tr('withdrawal_request_rejected_by_admin' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['name'] = $user->name;

        $email_data['content'] = tr('withdrawal_request_rejected_by_admin_main_content', formatted_amount($withdrawal_request->requested_amount));

        $email_data['page'] = "emails.users.withdrawal";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_withdrawal_request_cancelled_email()
     *
     * @uses to send withdrawal request cancelled email when user cancel a withdrawal request.
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_withdrawal_request_cancelled_email($withdrawal_request) {

        $user = User::find($withdrawal_request->user_id);

        $email_data['subject'] = tr('withdrawal_request_cancelled' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['name'] = $user->name;

        $email_data['content'] = tr('withdrawal_request_cancelled_main_content', formatted_amount($withdrawal_request->requested_amount));

        $email_data['page'] = "emails.users.withdrawal";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_reset_password_email()
     *
     * @uses to send reset password success email
     *
     * @created Karthick
     *
     * @updated
     *
     */

    public function send_reset_password_email($user) {

        $email_data['subject'] = tr('reset_password_success' , Setting::get('site_name'));

        $email_data['email']  = $user->email;

        $email_data['picture']  = $user->picture;

        $email_data['name'] = $user->name;

        $email_data['page'] = "emails.users.reset_password";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_contact_request_email()
     *
     * @uses to send respond to a contact request form.
     *
     * @created Karthick
     *
     * @updated
     * 
     * param - contact_request (object)
     *
     */

    public function send_contact_request_email($contact_request) {

        $email_data['subject'] = tr('contact_request_subject' , Setting::get('site_name')).' - '.$contact_request->unique_id;

        $email_data['email']  = $contact_request->email;

        $email_data['contact_request'] = $contact_request;

        $email_data['page'] = "emails.users.contact_request";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method order_status_email()
     *
     * @uses to send order status email to user
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function order_status_email($order_unique_id) {

        $order = Order::with(['deliveryAddress:id,address,city,state,pincode', 
                        'orderPayment:id,order_id,unique_id,paid_date,sub_total,total,payment_mode,payment_id', 
                        'orderProducts:id,order_id,product_id,quantity,per_quantity_price,discount_price,total', 
                        'orderProducts.product:id,name,file',
                        'user:id,token,email,name'
                    ])->firstWhere(['unique_id' => $order_unique_id]);

        $email_data['subject'] = get_order_email_subject($order->status, $order_unique_id);

        $email_data['content'] = get_order_email_content($order->status, $order_unique_id);

        $email_data['email']  = $order->user->email ?? '';

        $email_data['name'] = $order->user->name ?? '';

        $email_data['order'] = $order ?? [];

        $email_data['url'] = Setting::get('frontend_url').'orders/tracking/'.$order_unique_id;

        $email_data['invoice_url'] = route('user.orders_invoice',
            ['id' => $order->user->id, 'token' => $order->user->token, 'order_unique_id' => $order_unique_id, 'invoice_via' => VIA_DOWNLOAD]
        );

        $email_data['order_amount'] = ProductService::get_order_amount($order->orderProducts);

        if(in_array($order->status, [ORDER_RECEIVED, ORDER_AWAITING_SHIPMENT, ORDER_SHIPPED, ORDER_COMPLETED])) {

            $email_data['page'] = "emails.users.order_detailed";

        } else {

            $email_data['page'] = "emails.users.order";
        }

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method new_order_email_to_admin()
     *
     * @uses to send order status email to user
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function new_order_email_to_admin($order_unique_id) {

        $order = Order::with(['user', 'orderProducts'])->withSum('orderProducts', 'quantity')->firstWhere(['unique_id' => $order_unique_id]);

        $email_data['subject'] = tr('new_order_email_to_admin_subject', $order_unique_id);

        $email_data['content'] = tr('new_order_email_to_admin_content', $order_unique_id);

        $email_data['email']  = Setting::get('notification_email');

        $email_data['name'] = "Admin";

        $email_data['order'] = $order ?? [];

        $email_data['url'] = url("/admin/orders/view?order_id=$order->id");

        $email_data['order_amount'] = ProductService::get_order_amount($order->orderProducts);

        $email_data['page'] = "emails.users.order";

        SendEmailJob::dispatch($email_data);
    }

    /**
     * @method send_sitemap_email()
     *
     * @uses to send sitemap email
     *
     * @created Karthick
     *
     * @updated  
     *
     */

    public function send_sitemap_email() {

        $today = today(IST_TIMEZONE)->format('d M Y');

        $email_data['subject'] = Setting::get('site_name').' - '.tr('sitemap_email_subject', $today);

        $email_data['content'] = tr('sitemap_email_content', $today);

        $email_data['email']  = Setting::get('sitemap_email');

        $email_data['name'] = "Team";

        $email_data['page'] = "emails.users.sitemap";

        $email_data['file_name'] = "$today-sitemap.zip";

        $email_data['sitemap'] = YES;

        SendEmailJob::dispatch($email_data);
    }

    /**
    * @method send_order_invoice_email()
    *
    * @uses to send order status email to user
    *
    * @created Karthick
    *
    * @updated  
    *
    */

    public function send_order_invoice_email($order) {

       $user = User::find($order->user_id, ['id', 'name', 'email', 'timezone']);

       if($user) {

           $email_data['subject'] = tr('invoice_email_subject', $order->unique_id);

           $email_data['content'] = tr('invoice_email_content', $order->unique_id);

           $email_data['email']  = $user->email;

           $email_data['name'] = $user->name;

           $email_data['order'] = $order ?? [];

           $email_data['url'] = Setting::get('frontend_url').'order-tracking/'.$order->unique_id;

           $email_data['timezone'] = $user->timezone ? : 'America/New_York';

           $email_data['page'] = "emails.users.invoice";

           $email_data['file_name'] = "$order->unique_id.pdf";

           $email_data['invoice'] = YES;

           SendEmailJob::dispatch($email_data);
       }
    }
    
}
Back to Directory File Manager