Skip to content

Instantly share code, notes, and snippets.

@Ahed91
Created September 5, 2018 10:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Ahed91/7534b42b444744cda018da0318091362 to your computer and use it in GitHub Desktop.
Save Ahed91/7534b42b444744cda018da0318091362 to your computer and use it in GitHub Desktop.
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Mail;
class DispatchLumenJob implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $job_class;
protected $data;
public function __construct($job_class, $data = [])
{
$this->job_class = $job_class;
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$job_class_name = $this->job_class;
dispatch(new $job_class_name(...$this->data));
}
}
<?php
function dispatchLumen($job_class, $job_arguments) {
dispatch(new \App\Jobs\DispatchLumenJob($job_class, $job_arguments));
}
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Queue;
class SendEmail implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$items_limit = 1;
$delay = 0;
$data_to_process = [];
$data_to_dispatch = [];
if (count($this->data) > $items_limit) {
$data_to_process = array_slice($this->data, 0, $items_limit);
$data_to_dispatch = array_slice($this->data, $items_limit);
Queue::later($delay, new SendEmail($data_to_dispatch));
} else {
$data_to_process = $this->data;
}
foreach($data_to_process as $item) {
$data = [
'data' => $item['data'],
'title' => $item['title'],
'lang' => $item['lang'],
];
\Mailman::make('emailsV2.' . $item['email_class'], $data)
->to($item['email'])
->subject($item['title'])
->setLocale($item['lang'])
->setCss($item['css'])
->send();
}
}
}
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Queue;
class SendPush implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$items_limit = 100;
$delay = 10;
$data_to_process = [];
$data_to_dispatch = [];
if (count($this->data) > $items_limit) {
$data_to_process = array_slice($this->data, 0, $items_limit);
$data_to_dispatch = array_slice($this->data, $items_limit);
Queue::later($delay, new SendPush($data_to_dispatch));
} else {
$data_to_process = $this->data;
}
foreach($data_to_process as $item) {
send_push([$item['device_token']], $item['payload']);
}
}
}
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Queue;
class SendSMS implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$items_limit = 100;
$delay = 10;
$data_to_process = [];
$data_to_dispatch = [];
if (count($this->data) > $items_limit) {
$data_to_process = array_slice($this->data, 0, $items_limit);
$data_to_dispatch = array_slice($this->data, $items_limit);
Queue::later($delay, new SendSMS($data_to_dispatch));
} else {
$data_to_process = $this->data;
}
foreach($data_to_process as $item) {
send_sms($item['message'], $item['mobile']);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment