Skip to content

Commit 9be6fec

Browse files
committed
Replace abandoned box/spout with maintained openspout/openspout v4
box/spout has been unmaintained since 2019. openspout/openspout is its active fork and the only package supporting PHP 8.5+. Migrates to the v4 API: Row::fromValues() replaces WriterEntityFactory::createRowFromArray(), new Writer() replaces WriterEntityFactory::createXLSXWriter(), and Style/ Border/BorderPart replace the removed StyleBuilder/BorderBuilder builders.
1 parent 5898853 commit 9be6fec

3 files changed

Lines changed: 116 additions & 98 deletions

File tree

app/Modules/Group/Actions/SubgroupMembersMakeExcel.php

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
use Carbon\Carbon;
55
use App\Modules\Group\Models\Group;
66
use Lorisleiva\Actions\ActionRequest;
7-
use Box\Spout\Common\Entity\Style\Color;
7+
use OpenSpout\Common\Entity\Row;
88
use App\Modules\Group\Models\GroupMember;
9-
use Box\Spout\Common\Entity\Style\Border;
9+
use OpenSpout\Common\Entity\Style\Border;
10+
use OpenSpout\Common\Entity\Style\BorderPart;
11+
use OpenSpout\Common\Entity\Style\Color;
12+
use OpenSpout\Common\Entity\Style\Style;
1013
use Lorisleiva\Actions\Concerns\AsController;
11-
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
12-
use Box\Spout\Writer\Common\Creator\Style\BorderBuilder;
13-
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
14+
use OpenSpout\Writer\XLSX\Writer;
1415

1516
class SubgroupMembersMakeExcel {
1617
use AsController;
@@ -47,7 +48,7 @@ private function writeAllSheet($writer, $group)
4748
$byPersonThenGroup = $allMemberships->groupBy(['person_id', 'group_id']);
4849

4950
// The 'Any active?' column is included to allow for easy filtering in Excel, but it redundant to whether the 'Active Memberships' column is empty or not.
50-
$headerRow = WriterEntityFactory::createRowFromArray(
51+
$headerRow = Row::fromValues(
5152
['Name', 'Email', 'Institution', 'Active Memberships', 'Retired Memberships', 'Any active?'],
5253
$this->getHeaderStyle()
5354
);
@@ -77,14 +78,14 @@ private function writeAllSheet($writer, $group)
7778
$active = collect($active)->unique()->values();
7879
$retired = collect($retired)->unique()->values();
7980

80-
return WriterEntityFactory::createRowFromArray([
81+
return Row::fromValues([
8182
$person->name,
8283
$person->email,
8384
($person->institution) ? $person->institution?->name : null,
8485
$active->join(', '),
8586
$retired->join(', '),
8687
$active->isEmpty() ? 'No' : 'Yes',
87-
], (new StyleBuilder())->setShouldWrapText(false)->build());
88+
], (new Style())->setShouldWrapText(false));
8889
})->all();
8990

9091
$writer->addRows($rows);
@@ -100,23 +101,23 @@ private function writeGroupSheet($writer, $group) {
100101

101102
$headerRow = $this->getGroupHeaderRow();
102103

103-
$noWrapStyle = (new StyleBuilder())->setShouldWrapText(false)->build();
104+
$noWrapStyle = (new Style())->setShouldWrapText(false);
104105

105106
$memberRows = $group->members->map(function ($member) use ($noWrapStyle) {
106107
$row = $this->getGroupMemberRow($member);
107108
$row->setStyle($noWrapStyle);
108109
return $row;
109110
});
110-
$writer
111-
->addRow(WriterEntityFactory::createRowFromArray([$group->name]))
112-
->addRow(WriterEntityFactory::createRowFromArray([]))
113-
->addRow($headerRow, $this->getHeaderStyle())
114-
->addRows($memberRows->toArray());
111+
112+
$writer->addRow(Row::fromValues([$group->name]));
113+
$writer->addRow(Row::fromValues([]));
114+
$writer->addRow($headerRow);
115+
$writer->addRows($memberRows->toArray());
115116
}
116117

117118
private function getGroupMemberRow(GroupMember $member)
118119
{
119-
return WriterEntityFactory::createRowFromArray($this->truncateValues([
120+
return Row::fromValues($this->truncateValues([
120121
$member->person->first_name,
121122
$member->person->last_name,
122123
$member->person->email,
@@ -156,7 +157,7 @@ private function truncateValues(Array $array, int $max = 10000): array
156157

157158
private function getGroupHeaderRow()
158159
{
159-
return WriterEntityFactory::createRowFromArray([
160+
return Row::fromValues([
160161
'first_name',
161162
'last_name',
162163
'email',
@@ -187,20 +188,19 @@ private function makeFileName(Group $group)
187188

188189
private function getXLSXWriter($fileName)
189190
{
190-
$writer = WriterEntityFactory::createXLSXWriter();
191+
$writer = new Writer();
191192
$writer->openToFile($fileName);
192193
return $writer;
193194
}
194195

195196
private function getHeaderStyle()
196197
{
197-
$border = (new BorderBuilder())->setBorderBottom(Color::BLACK, Border::WIDTH_THIN)->build();
198+
$border = new Border(new BorderPart(Border::BOTTOM, Color::BLACK, Border::WIDTH_THIN));
198199

199-
return (new StyleBuilder())
200+
return (new Style())
200201
->setFontBold()
201202
->setFontSize(14)
202-
->setBorder($border)
203-
->build();
203+
->setBorder($border);
204204
}
205205

206206

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"license": "MIT",
1010
"require": {
1111
"php": "^8.2",
12-
"box/spout": "^3.3",
12+
"openspout/openspout": "^4.0",
1313
"doctrine/dbal": "^3.1",
1414
"dompdf/dompdf": "^2.0",
1515
"guzzlehttp/guzzle": "^7.5",

composer.lock

Lines changed: 94 additions & 76 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)