diff --git a/app/Commands/MessageAttendeesCommand.php b/app/Commands/MessageAttendeesCommand.php deleted file mode 100644 index c0adfe4d..00000000 --- a/app/Commands/MessageAttendeesCommand.php +++ /dev/null @@ -1,34 +0,0 @@ -attendeeMessage = $attendeeMessage; - } - - public function handle(AttendeeMailer $mailer) - { - Log::info(date('d m y H:i')." - Starting Job {$this->job->getJobId()} ".__CLASS__); - - $mailer->sendMessageToAttendees($this->attendeeMessage); - - Log::info(date('d m y H:i')." - Finished Job {$this->job->getJobId()} ".__CLASS__); - - $this->delete(); - } -} diff --git a/app/Events/OrderCompletedEvent.php b/app/Events/OrderCompletedEvent.php new file mode 100644 index 00000000..ded88068 --- /dev/null +++ b/app/Events/OrderCompletedEvent.php @@ -0,0 +1,34 @@ +order = $order; + } + + /** + * Get the channels the event should be broadcast on. + * + * @return array + */ + public function broadcastOn() + { + return []; + } +} diff --git a/app/Http/Controllers/EventAttendeesController.php b/app/Http/Controllers/EventAttendeesController.php index 00a8c91a..ce66ed4b 100644 --- a/app/Http/Controllers/EventAttendeesController.php +++ b/app/Http/Controllers/EventAttendeesController.php @@ -2,9 +2,10 @@ namespace App\Http\Controllers; -use App\Mailers\TicketMailer; +use App\Jobs\SendAttendeeInvite; +use App\Jobs\SendAttendeeTicket; +use App\Jobs\SendMessageToAttendees; use App\Jobs\GenerateTicket; -use App\Commands\MessageAttendeesCommand; use App\Models\Attendee; use App\Models\Event; use App\Models\EventStats; @@ -191,10 +192,9 @@ class EventAttendeesController extends MyBaseController $attendee->reference_index = 1; $attendee->save(); - $this->dispatch(new GenerateTicket($order->order_reference."-".$attendee->reference_index)); if ($email_attendee == '1') { - TicketMailer::sendAttendeeInvite($attendee); + $this->dispatch(new SendAttendeeInvite($attendee)); } session()->flash('message', 'Attendee Successfully Invited'); @@ -346,9 +346,8 @@ class EventAttendeesController extends MyBaseController $attendee->reference_index = 1; $attendee->save(); - $this->dispatch(new GenerateTicket($attendee->getReferenceAttribute())); if ($email_attendee == '1') { - TicketMailer::sendAttendeeInvite($attendee); + $this->dispatch(new SendAttendeeInvite($attendee)); } } }; @@ -431,6 +430,7 @@ class EventAttendeesController extends MyBaseController 'email_logo' => $attendee->event->organiser->full_logo_path, ]; + //@todo move this to the SendAttendeeMessage Job Mail::send('Emails.messageAttendees', $data, function ($message) use ($attendee, $data) { $message->to($attendee->email, $attendee->full_name) ->from(config('attendize.outgoing_email_noreply'), $attendee->event->organiser->name) @@ -497,13 +497,14 @@ class EventAttendeesController extends MyBaseController $message = Message::createNew(); $message->message = $request->get('message'); $message->subject = $request->get('subject'); - if ($request->get('recipients') != "all") { - $message->recipients = $request->get('recipients'); - } + $message->recipients = ($request->get('recipients') == 'all') ? 'all' : $request->get('recipients'); $message->event_id = $event_id; $message->save(); - $this->dispatch(new MessageAttendeesCommand($message)); + /* + * Queue the emails + */ + $this->dispatch(new SendMessageToAttendees($message)); return response()->json([ 'status' => 'success', @@ -755,8 +756,7 @@ class EventAttendeesController extends MyBaseController { $attendee = Attendee::scope()->findOrFail($attendee_id); - $this->dispatch(new GenerateTicket($attendee->getReferenceAttribute())); - TicketMailer::sendAttendeeTicket($attendee); + $this->dispatch(new SendAttendeeTicket($attendee)); return response()->json([ 'status' => 'success', diff --git a/app/Http/Controllers/EventCheckoutController.php b/app/Http/Controllers/EventCheckoutController.php index 21d76cb0..6b14113b 100644 --- a/app/Http/Controllers/EventCheckoutController.php +++ b/app/Http/Controllers/EventCheckoutController.php @@ -2,8 +2,7 @@ namespace App\Http\Controllers; -use App\Jobs\GenerateTicket; -use App\Mailers\TicketMailer; +use App\Events\OrderCompletedEvent; use App\Models\Affiliate; use App\Models\Attendee; use App\Models\Event; @@ -351,7 +350,8 @@ class EventCheckoutController extends Controller if ($response->isSuccessful()) { - session()->push('ticket_order_' . $event_id . '.transaction_id', $response->getTransactionReference()); + session()->push('ticket_order_' . $event_id . '.transaction_id', + $response->getTransactionReference()); return $this->completeOrder($event_id); @@ -605,9 +605,8 @@ class EventCheckoutController extends Controller /* * Queue up some tasks - Emails to be sent, PDFs etc. */ - $this->dispatch(new GenerateTicket($order->order_reference)); - TicketMailer::sendOrderTickets($order); - + Log::info('Firiing the event'); + event(new OrderCompletedEvent($order)); } catch (Exception $e) { diff --git a/app/Jobs/SendAttendeeInvite.php b/app/Jobs/SendAttendeeInvite.php new file mode 100644 index 00000000..3732e496 --- /dev/null +++ b/app/Jobs/SendAttendeeInvite.php @@ -0,0 +1,38 @@ +attendee = $attendee; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(AttendeeMailer $attendeeMailer) + { + $attendeeMailer->sendAttendeeInvite($this->attendee); + } +} diff --git a/app/Jobs/SendAttendeeTicket.php b/app/Jobs/SendAttendeeTicket.php new file mode 100644 index 00000000..d9ae2555 --- /dev/null +++ b/app/Jobs/SendAttendeeTicket.php @@ -0,0 +1,38 @@ +attendee = $attendee; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(AttendeeMailer $attendeeMailer) + { + $attendeeMailer->sendAttendeeTicket($this->attendee); + } +} diff --git a/app/Jobs/SendMessageToAttendee.php b/app/Jobs/SendMessageToAttendee.php new file mode 100644 index 00000000..d8235187 --- /dev/null +++ b/app/Jobs/SendMessageToAttendee.php @@ -0,0 +1,33 @@ +attendeeMessage = $attendeeMessage; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(AttendeeMailer $attendeeMailer) + { + $attendeeMailer->sendMessageToAttendees($this->attendeeMessage); + } +} diff --git a/app/Jobs/SendOrderNotification.php b/app/Jobs/SendOrderNotification.php new file mode 100644 index 00000000..d78f84f6 --- /dev/null +++ b/app/Jobs/SendOrderNotification.php @@ -0,0 +1,37 @@ +order = $order; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(OrderMailer $orderMailer) + { + $orderMailer->sendOrderNotification($this->order); + } +} diff --git a/app/Jobs/SendOrderTickets.php b/app/Jobs/SendOrderTickets.php new file mode 100644 index 00000000..f2f6aa9a --- /dev/null +++ b/app/Jobs/SendOrderTickets.php @@ -0,0 +1,37 @@ +order = $order; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(OrderMailer $orderMailer) + { + $orderMailer->sendOrderTickets($this->order); + } +} diff --git a/app/Listeners/OrderCompletedListener.php b/app/Listeners/OrderCompletedListener.php new file mode 100644 index 00000000..cc03c180 --- /dev/null +++ b/app/Listeners/OrderCompletedListener.php @@ -0,0 +1,46 @@ +order->order_reference); + $this->dispatchNow(new GenerateTicket($event->order->order_reference)); + $this->dispatch(new SendOrderTickets($event->order)); + $this->dispatch(new SendOrderNotification($event->order)); + + } +} diff --git a/app/Mailers/AttendeeMailer.php b/app/Mailers/AttendeeMailer.php index ff1880d7..4e612cbe 100644 --- a/app/Mailers/AttendeeMailer.php +++ b/app/Mailers/AttendeeMailer.php @@ -7,23 +7,30 @@ use App\Models\Message; use App\Models\Order; use Carbon\Carbon; use Mail; +use Log; class AttendeeMailer extends Mailer { - /** - * Send the attendee the ticket - * - * @param Attendee $attendee - * @param Order $order - * @param $ticket_path - */ - public function sendAttendeeTicket(Attendee $attendee, Order $order, $ticket_path) + + public function sendAttendeeTicket($attendee) { - $this->sendTo($attendee->email, config('attendize.outgoing_email'), $order->event->organiser->name, 'Your ticket for the event '.$order->event->title, 'Emails.AttendeeTicketResend', [ - 'order' => $order, - 'email_logo' => $order->event->organiser->full_logo_path, - 'attendee' => $attendee - ], $ticket_path); + + Log::info("Sending ticket to: " . $attendee->email); + + $data = [ + 'attendee' => $attendee, + ]; + + Mail::send('Mailers.TicketMailer.SendAttendeeTicket', $data, function ($message) use ($attendee) { + $message->to($attendee->email); + $message->subject('Your ticket for the event ' . $attendee->order->event->title); + + $file_name = $attendee->getReferenceAttribute(); + $file_path = public_path(config('attendize.event_pdf_tickets_path')) . '/' . $file_name . '.pdf'; + + $message->attach($file_path); + }); + } /** @@ -36,10 +43,11 @@ class AttendeeMailer extends Mailer $event = $message_object->event; $attendees = ($message_object->recipients == 'all') - ? $event->attendees // all attendees - : Attendee::where('ticket_id', '=', $message_object->recipients)->where('account_id', '=', $message_object->account_id)->get(); + ? $event->attendees // all attendees + : Attendee::where('ticket_id', '=', $message_object->recipients)->where('account_id', '=', + $message_object->account_id)->get(); - foreach($attendees as $attendee) { + foreach ($attendees as $attendee) { $data = [ 'attendee' => $attendee, @@ -61,4 +69,27 @@ class AttendeeMailer extends Mailer $message_object->sent_at = Carbon::now(); $message_object->save(); } + + public function SendAttendeeInvite($attendee) + { + + Log::info("Sending invite to: " . $attendee->email); + + $data = [ + 'attendee' => $attendee, + ]; + + Mail::queue('Mailers.TicketMailer.SendAttendeeInvite', $data, function ($message) use ($attendee) { + $message->to($attendee->email); + $message->subject('Your ticket for the event ' . $attendee->order->event->title); + + $file_name = $attendee->getReferenceAttribute(); + $file_path = public_path(config('attendize.event_pdf_tickets_path')) . '/' . $file_name . '.pdf'; + + $message->attach($file_path); + }); + + } + + } diff --git a/app/Mailers/OrderMailer.php b/app/Mailers/OrderMailer.php index a625bc06..1baefb29 100644 --- a/app/Mailers/OrderMailer.php +++ b/app/Mailers/OrderMailer.php @@ -3,34 +3,42 @@ namespace App\Mailers; use App\Models\Order; +use Log; +use Mail; -class OrderMailer extends Mailer +class OrderMailer { public function sendOrderNotification(Order $order) { - $this->sendTo($order->account->email, config('attendize.outgoing_email'), config('attendize.outgoing_email_name'), 'New order received on the event '.$order->event->title.' ['.$order->order_reference.']', 'Emails.OrderNotification', [ + $data = [ + 'order' => $order + ]; + + Mail::send('Emails.OrderNotification', $data, function($message) use ($order) { + $message->to($order->account->email); + $message->subject('New order received on the event '.$order->event->title.' ['.$order->order_reference.']'); + }); + + } + + public function sendOrderTickets($order) { + + Log::info("Sending ticket to: ".$order->email); + + $data = [ 'order' => $order, - ]); + ]; + + Mail::send('Mailers.TicketMailer.SendOrderTickets', $data, function($message) use ($order) { + $message->to($order->email); + $message->subject('Your tickets for the event '.$order->event->title); + + $file_name = $order->order_reference; + $file_path = public_path(config('attendize.event_pdf_tickets_path')).'/'.$file_name.'.pdf'; + + $message->attach($file_path); + }); + } - public function sendOrderConfirmation(Order $order) - { - $ticket_pdf = public_path($order->ticket_pdf_path); - - if (!file_exists($ticket_pdf)) { - $ticket_pdf = false; - } - - $this->sendTo($order->email, config('attendize.outgoing_email'), $order->event->organiser->name, 'Your tickets & order confirmation for the event '.$order->event->title.' ['.$order->order_reference.']', 'Emails.OrderConfirmation', [ - 'order' => $order, - 'email_logo' => $order->event->organiser->full_logo_path, - ], $ticket_pdf); - } - - public function sendTickets(Order $order) - { - // $this->sendTo($order->account->email, config('attendize.outgoing_email'), config('attendize.outgoing_email_name'), 'New order received on the event '. $order->event->title .' ['. $order->order_reference .']', 'Emails.OrderNotification', [ -// 'order' => $order -// ]); - } } diff --git a/app/Mailers/TicketMailer.php b/app/Mailers/TicketMailer.php deleted file mode 100644 index 0088f6c6..00000000 --- a/app/Mailers/TicketMailer.php +++ /dev/null @@ -1,71 +0,0 @@ -email); - - $data = [ - 'order' => $order, - ]; - - Mail::queue('Mailers.TicketMailer.SendOrderTickets', $data, function($message) use ($order) { - $message->to($order->email); - $message->subject('Your tickets for the event '.$order->event->title); - - $file_name = $order->order_reference; - $file_path = public_path(config('attendize.event_pdf_tickets_path')).'/'.$file_name.'.pdf'; - - $message->attach($file_path); - }); - - } - - public static function sendAttendeeTicket($attendee) { - - Log::info("Sending ticket to: ".$attendee->email); - - $data = [ - 'attendee' => $attendee, - ]; - - Mail::queue('Mailers.TicketMailer.SendAttendeeTicket', $data, function($message) use ($attendee) { - $message->to($attendee->email); - $message->subject('Your ticket for the event '.$attendee->order->event->title); - - $file_name = $attendee->getReferenceAttribute(); - $file_path = public_path(config('attendize.event_pdf_tickets_path')).'/'.$file_name.'.pdf'; - - $message->attach($file_path); - }); - - } - - public static function sendAttendeeInvite($attendee) { - - Log::info("Sending invite to: ".$attendee->email); - - $data = [ - 'attendee' => $attendee, - ]; - - Mail::queue('Mailers.TicketMailer.SendAttendeeInvite', $data, function($message) use ($attendee) { - $message->to($attendee->email); - $message->subject('Your ticket for the event '.$attendee->order->event->title); - - $file_name = $attendee->getReferenceAttribute(); - $file_path = public_path(config('attendize.event_pdf_tickets_path')).'/'.$file_name.'.pdf'; - - $message->attach($file_path); - }); - - } - -} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 55a2e769..daafd442 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -13,8 +13,8 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'event.name' => [ - 'EventListener', + 'App\Events\OrderCompletedEvent' => [ + 'App\Listeners\OrderCompletedListener', ], ]; diff --git a/config/app.php b/config/app.php index 819d5a37..b496214d 100644 --- a/config/app.php +++ b/config/app.php @@ -197,7 +197,7 @@ return [ 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'LaravelEvent' => Illuminate\Support\Facades\Event::class, // Changed Event to LaravelEvent + 'LaravelEvent' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Input' => Illuminate\Support\Facades\Input::class,