-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Expand file tree
/
Copy pathQueueExport.php
More file actions
98 lines (83 loc) 路 2.65 KB
/
Copy pathQueueExport.php
File metadata and controls
98 lines (83 loc) 路 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
namespace Maatwebsite\Excel\Jobs;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use Maatwebsite\Excel\Exceptions\NoSheetsFoundException;
use Maatwebsite\Excel\Files\TemporaryFile;
use Maatwebsite\Excel\Jobs\Middleware\LocalizeJob;
use Maatwebsite\Excel\Writer;
use Throwable;
class QueueExport implements ShouldQueue
{
use ExtendedQueueable, Dispatchable, InteractsWithQueue;
/** Upper bound on how many times this job may be attempted. */
public $tries = 1;
/**
* @var object
*/
public $export;
/**
* @var string
*/
private $writerType;
/**
* @var TemporaryFile
*/
private $temporaryFile;
/**
* @param object $export
* @param TemporaryFile $temporaryFile
* @param string $writerType
*/
public function __construct($export, TemporaryFile $temporaryFile, string $writerType)
{
$this->export = $export;
$this->writerType = $writerType;
$this->temporaryFile = $temporaryFile;
}
/**
* Get the middleware the job should be dispatched through.
*
* @return array
*/
public function middleware()
{
return (method_exists($this->export, 'middleware')) ? $this->export->middleware() : [];
}
/**
* @param Writer $writer
*
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
public function handle(Writer $writer)
{
(new LocalizeJob($this->export))->handle($this, function () use ($writer) {
$writer->open($this->export);
$sheetExports = [$this->export];
if ($this->export instanceof WithMultipleSheets) {
$sheetExports = $this->export->sheets();
}
if (count($sheetExports) === 0) {
throw new NoSheetsFoundException('Your export did not return any sheet export instances, please make sure your sheets() method always at least returns one instance.');
}
// Pre-create the worksheets
foreach ($sheetExports as $sheetIndex => $sheetExport) {
$sheet = $writer->addNewSheet($sheetIndex);
$sheet->open($sheetExport);
}
// Write to temp file with empty sheets.
$writer->write($this->export, $this->temporaryFile, $this->writerType);
});
}
/**
* @param Throwable $e
*/
public function failed(Throwable $e)
{
if (method_exists($this->export, 'failed')) {
$this->export->failed($e);
}
}
}