Skip to content

Commit

Permalink
PHP 8.2 Update (#34)
Browse files Browse the repository at this point in the history
* PHP 8.2/8.3 Update
* Removed Port/Spreadsheet

Co-authored-by: FBGER\dwinter <[email protected]>
  • Loading branch information
rettahc and FBGER\dwinter committed Aug 22, 2024
1 parent 4e7e055 commit 446e6fb
Show file tree
Hide file tree
Showing 8 changed files with 151 additions and 60 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/phpcs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ jobs:
phpcs:
runs-on: ubuntu-latest
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- uses: actions/checkout@v2
with:
fetch-depth: 0 # important!
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/phpunit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,10 @@ jobs:
strategy:
matrix:
php-version:
- "7.4"
- "8.0"
- "8.1"
- "8.2"
- "8.3"
include:
- php-versions: '8.1'
- php-versions: '8.3'
coverage: xdebug
composer-prefer: '--prefer-lowest --prefer-stable'
phpunit-flags: '--coverage-clover coverage.xml'
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/psalm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ jobs:
name: Psalm
runs-on: ubuntu-latest
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
- uses: actions/checkout@master

- name: Psalm
Expand Down
22 changes: 0 additions & 22 deletions .psalm/baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,6 @@
<InvalidScalarArgument>
<code>$limit</code>
</InvalidScalarArgument>
<MixedAssignment>
<code>$bar</code>
</MixedAssignment>
<MixedMethodCall>
<code>advance</code>
<code>finish</code>
<code>setRedrawFrequency</code>
</MixedMethodCall>
<UndefinedClass>
<code>ProgressBar</code>
</UndefinedClass>
</file>
<file src="src/Console/ImportCommandHelpRenderer.php">
<MixedAssignment>
Expand All @@ -29,14 +18,6 @@
<code>createTable</code>
</UndefinedInterfaceMethod>
</file>
<file src="src/Console/ImportCommandResultRenderer.php">
<MixedAssignment>
<code>$count</code>
</MixedAssignment>
<MixedOperand>
<code>$count</code>
</MixedOperand>
</file>
<file src="src/DependencyInjection/Configuration.php">
<PossiblyNullReference>
<code>scalarNode</code>
Expand All @@ -52,9 +33,6 @@
<MixedAssignment>
<code>$value</code>
</MixedAssignment>
<ReservedWord>
<code>$loader-&gt;load('services.yaml')</code>
</ReservedWord>
</file>
<file src="src/EntityImporter.php">
<MixedArgumentTypeCoercion>
Expand Down
14 changes: 7 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@
}
],
"require": {
"php": "^7.4|^8.0|^8.1",
"php": ">=8.2",
"ext-zlib": "*",
"doctrine/persistence": "^2.4|^3.0",
"guzzlehttp/guzzle": "^7.5",
"portphp/csv": "^2.0",
"portphp/spreadsheet": "^1.0",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/filesystem": "^4.4|^5.0|^6.0",
"symfony/framework-bundle": "^4.4|^5.0|^6.0",
"symfony/string": "^4.4|^5.0|^6.0",
"webmozart/assert" : "^1.11"
"symfony/config": "^6.0",
"symfony/filesystem": "^6.0",
"symfony/framework-bundle": "^6.0",
"symfony/string": "^6.0",
"webmozart/assert" : "^1.11",
"phpoffice/phpspreadsheet": "^2.1"
},
"require-dev": {
"fastbolt/test-helpers": "^0.1.1",
Expand Down
33 changes: 10 additions & 23 deletions src/Console/Command/ImportCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
use Fastbolt\EntityImporter\Console\ImportCommandResultRenderer;
use Fastbolt\EntityImporter\EntityImporterManager;
use Fastbolt\EntityImporter\Exceptions\ImporterDefinitionNotFoundException;
use Fastbolt\EntityImporter\Exceptions\InvalidInputFormatException;
use Fastbolt\EntityImporter\Exceptions\SourceUnavailableException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputArgument;
Expand All @@ -24,33 +26,16 @@
class ImportCommand extends Command
{
/**
* @var EntityImporterManager
*/
private EntityImporterManager $entityImporterManager;

/**
* @var ImportCommandHelpRenderer
*/
private ImportCommandHelpRenderer $helpRenderer;

/**
* @var ImportCommandResultRenderer
*/
private ImportCommandResultRenderer $resultRenderer;

/**
* @param EntityImporterManager $entityImporterManager
* @param EntityImporterManager $entityImporterManager
* @param ImportCommandHelpRenderer $helpRenderer
* @param ImportCommandResultRenderer $resultRenderer
*/
public function __construct(
EntityImporterManager $entityImporterManager,
ImportCommandHelpRenderer $helpRenderer,
ImportCommandResultRenderer $resultRenderer
private readonly EntityImporterManager $entityImporterManager,
private readonly ImportCommandHelpRenderer $helpRenderer,
private readonly ImportCommandResultRenderer $resultRenderer
) {
parent::__construct();

$this->entityImporterManager = $entityImporterManager;
$this->helpRenderer = $helpRenderer;
$this->resultRenderer = $resultRenderer;
}

/**
Expand All @@ -69,6 +54,8 @@ protected function configure(): void
* @param OutputInterface $output
*
* @return int
* @throws InvalidInputFormatException
* @throws SourceUnavailableException
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
Expand Down
2 changes: 1 addition & 1 deletion src/Reader/Factory/ApiReaderFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class ApiReaderFactory implements ReaderFactoryInterface
*/
public function __construct(?callable $clientFactory = null)
{
if (!$clientFactory) {
if ($clientFactory === null) {
$clientFactory = static function (): Client {
return new Client(['verify' => false]);
};
Expand Down
126 changes: 123 additions & 3 deletions src/Reader/XlsxReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@

namespace Fastbolt\EntityImporter\Reader;

use Port\Spreadsheet\SpreadsheetReader;
use PhpOffice\PhpSpreadsheet\IOFactory;
use SplFileObject;

/**
* @psalm-suppress PropertyNotSetInConstructor
*/
class XlsxReader extends SpreadsheetReader implements ReaderInterface
class XlsxReader implements ReaderInterface
{
/**
* Faulty rows
Expand All @@ -23,21 +23,63 @@ class XlsxReader extends SpreadsheetReader implements ReaderInterface
*/
protected ?array $errors = null;

/**
* @var array
*/
protected array $columnHeaders;

/**
* Total number of rows
*
* @var int
*/
protected int $count;

/**
* @var int|null
*/
protected ?int $headerRowNumber = null;

/**
* @var int
*/
protected int $pointer = 0;

/**
* @var array
*/
protected array $worksheet;

/**
* @param SplFileObject $file
* @param array<int,string> $columnHeaders
* @param ?int $headerRowNumber
*/
public function __construct(SplFileObject $file, array $columnHeaders, ?int $headerRowNumber)
{
parent::__construct($file, $headerRowNumber);
$reader = IOFactory::createReaderForFile($file->getPathName());
$reader->setReadDataOnly(true);

$spreadsheet = $reader->load($file->getPathname());

$this->worksheet = $spreadsheet->getActiveSheet()->toArray();

if (null !== $headerRowNumber) {
$this->setHeaderRowNumber($headerRowNumber);
}
$this->setColumnHeaders($columnHeaders);
}

/**
* @param array $columnHeaders
*
* @return void
*/
public function setColumnHeaders(array $columnHeaders): void
{
$this->columnHeaders = $columnHeaders;
}

/**
* @inheritDoc
*/
Expand All @@ -61,4 +103,82 @@ public function getErrors(): array
/** @psalm-var array<int,array<int,mixed>> */
return $this->errors;
}

/**
* @return mixed
*/
public function current(): mixed
{
/** @var array $row */
$row = $this->worksheet[$this->pointer];

// If the spreadsheet file has column headers, use them to construct an associative
// array for the columns in this line
if (!empty($this->columnHeaders) && count($this->columnHeaders) === count($row)) {
/** @var array<int, array-key> $headers */
$headers = array_values($this->columnHeaders);
return array_combine($headers, $row);
}

// Else just return the column values
return $row;
}

/**
* @param int $rowNumber
*
* @return void
*/
public function setHeaderRowNumber(int $rowNumber): void
{
$this->headerRowNumber = $rowNumber;
/**
* @psalm-suppress MixedAssignment
*/
$this->columnHeaders = $this->worksheet[$rowNumber];
}

/**
* @return array
*/
public function getColumnHeaders(): array
{
return $this->columnHeaders;
}

/**
* @return void
*/
public function next(): void
{
$this->pointer++;
}

/**
* @return int
*/
public function key(): int
{
return $this->pointer;
}

/**
* @return bool
*/
public function valid(): bool
{
return isset($this->worksheet[$this->pointer]);
}

/**
* @return void
*/
public function rewind(): void
{
if (null === $this->headerRowNumber) {
$this->pointer = 0;
} else {
$this->pointer = $this->headerRowNumber + 1;
}
}
}

0 comments on commit 446e6fb

Please sign in to comment.