Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PHP 8.2 Update #34

Merged
merged 6 commits into from
Aug 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}
}
}
Loading