<?php namespace Illuminate\Queue; use DateTime; use Carbon\Carbon; use Illuminate\Support\Arr; use InvalidArgumentException; use Illuminate\Container\Container; abstract class Queue { /** * The IoC container instance. * * @var \Illuminate\Container\Container */ protected $container; /** * The encrypter implementation. * * @var \Illuminate\Contracts\Encryption\Encrypter */ protected $encrypter; /** * Push a new job onto the queue. * * @param string $queue * @param string $job * @param mixed $data * @return mixed */ public function pushOn($queue, $job, $data = '') { return $this->push($job, $data, $queue); } /** * Push a new job onto the queue after a delay. * * @param string $queue * @param \DateTime|int $delay * @param string $job * @param mixed $data * @return mixed */ public function laterOn($queue, $delay, $job, $data = '') { return $this->later($delay, $job, $data, $queue); } /** * Push an array of jobs onto the queue. * * @param array $jobs * @param mixed $data * @param string $queue * @return mixed */ public function bulk($jobs, $data = '', $queue = null) { foreach ((array) $jobs as $job) { $this->push($job, $data, $queue); } } /** * Create a payload string from the given job and data. * * @param string $job * @param mixed $data * @param string $queue * @return string * * @throws \InvalidArgumentException */ protected function createPayload($job, $data = '', $queue = null) { if (is_object($job)) { $payload = json_encode([ 'job' => 'Illuminate\Queue\CallQueuedHandler@call', 'data' => [ 'commandName' => get_class($job), 'command' => serialize(clone $job), ], ]); } else { $payload = json_encode($this->createPlainPayload($job, $data)); } if (JSON_ERROR_NONE !== json_last_error()) { throw new InvalidArgumentException('Unable to create payload: '.json_last_error_msg()); } return $payload; } /** * Create a typical, "plain" queue payload array. * * @param string $job * @param mixed $data * @return array */ protected function createPlainPayload($job, $data) { return ['job' => $job, 'data' => $data]; } /** * Set additional meta on a payload string. * * @param string $payload * @param string $key * @param string $value * @return string * * @throws \InvalidArgumentException */ protected function setMeta($payload, $key, $value) { $payload = json_decode($payload, true); $payload = json_encode(Arr::set($payload, $key, $value)); if (JSON_ERROR_NONE !== json_last_error()) { throw new InvalidArgumentException('Unable to create payload: '.json_last_error_msg()); } return $payload; } /** * Calculate the number of seconds with the given delay. * * @param \DateTime|int $delay * @return int */ protected function getSeconds($delay) { if ($delay instanceof DateTime) { return max(0, $delay->getTimestamp() - $this->getTime()); } return (int) $delay; } /** * Get the current UNIX timestamp. * * @return int */ protected function getTime() { return Carbon::now()->getTimestamp(); } /** * Set the IoC container instance. * * @param \Illuminate\Container\Container $container * @return void */ public function setContainer(Container $container) { $this->container = $container; } }