feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles

- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD)
  * DEV: Clés TEST Pierre (mode test)
  * REC: Clés TEST Client (mode test)
  * PROD: Clés LIVE Client (mode live)
- Ajout de la gestion des bases de données immeubles/bâtiments
  * Configuration buildings_database pour DEV/REC/PROD
  * Service BuildingService pour enrichissement des adresses
- Optimisations pages et améliorations ergonomie
- Mises à jour des dépendances Composer
- Nettoyage des fichiers obsolètes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
pierre
2025-11-09 18:26:27 +01:00
parent 21657a3820
commit 2f5946a184
812 changed files with 142105 additions and 25992 deletions

View File

@@ -2,6 +2,7 @@
namespace PhpOffice\PhpSpreadsheet\Reader;
use PhpOffice\PhpSpreadsheet\Cell\IValueBinder;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner;
@@ -19,7 +20,7 @@ abstract class BaseReader implements IReader
/**
* Read empty cells?
* Identifies whether the Reader should read data values for cells all cells, or should ignore cells containing
* Identifies whether the Reader should read data values for all cells, or should ignore cells containing
* null value or empty string.
*/
protected bool $readEmptyCells = true;
@@ -46,6 +47,19 @@ abstract class BaseReader implements IReader
*/
protected bool $ignoreRowsWithNoCells = false;
/**
* Allow external images. Use with caution.
* Improper specification of these within a spreadsheet
* can subject the caller to security exploits.
*/
protected bool $allowExternalImages = false;
/**
* Create a blank sheet if none are read,
* possibly due to a typo when using LoadSheetsOnly.
*/
protected bool $createBlankSheetIfNoneRead = false;
/**
* IReadFilter instance.
*/
@@ -56,6 +70,8 @@ abstract class BaseReader implements IReader
protected ?XmlScanner $securityScanner = null;
protected ?IValueBinder $valueBinder = null;
public function __construct()
{
$this->readFilter = new DefaultReadFilter();
@@ -109,11 +125,13 @@ abstract class BaseReader implements IReader
return $this;
}
/** @return null|string[] */
public function getLoadSheetsOnly(): ?array
{
return $this->loadSheetsOnly;
}
/** @param null|string|string[] $sheetList */
public function setLoadSheetsOnly(string|array|null $sheetList): self
{
if ($sheetList === null) {
@@ -144,6 +162,34 @@ abstract class BaseReader implements IReader
return $this;
}
/**
* Allow external images. Use with caution.
* Improper specification of these within a spreadsheet
* can subject the caller to security exploits.
*/
public function setAllowExternalImages(bool $allowExternalImages): self
{
$this->allowExternalImages = $allowExternalImages;
return $this;
}
public function getAllowExternalImages(): bool
{
return $this->allowExternalImages;
}
/**
* Create a blank sheet if none are read,
* possibly due to a typo when using LoadSheetsOnly.
*/
public function setCreateBlankSheetIfNoneRead(bool $createBlankSheetIfNoneRead): self
{
$this->createBlankSheetIfNoneRead = $createBlankSheetIfNoneRead;
return $this;
}
public function getSecurityScanner(): ?XmlScanner
{
return $this->securityScanner;
@@ -166,12 +212,21 @@ abstract class BaseReader implements IReader
if (((bool) ($flags & self::READ_DATA_ONLY)) === true) {
$this->setReadDataOnly(true);
}
if (((bool) ($flags & self::SKIP_EMPTY_CELLS) || (bool) ($flags & self::IGNORE_EMPTY_CELLS)) === true) {
if (((bool) ($flags & self::IGNORE_EMPTY_CELLS)) === true) {
$this->setReadEmptyCells(false);
}
if (((bool) ($flags & self::IGNORE_ROWS_WITH_NO_CELLS)) === true) {
$this->setIgnoreRowsWithNoCells(true);
}
if (((bool) ($flags & self::ALLOW_EXTERNAL_IMAGES)) === true) {
$this->setAllowExternalImages(true);
}
if (((bool) ($flags & self::DONT_ALLOW_EXTERNAL_IMAGES)) === true) {
$this->setAllowExternalImages(false);
}
if (((bool) ($flags & self::CREATE_BLANK_SHEET_IF_NONE_READ)) === true) {
$this->setCreateBlankSheetIfNoneRead(true);
}
}
protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
@@ -218,6 +273,8 @@ abstract class BaseReader implements IReader
/**
* Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns).
*
* @return array<int, array{worksheetName: string, lastColumnLetter: string, lastColumnIndex: int, totalRows: int, totalColumns: int, sheetState: string}>
*/
public function listWorksheetInfo(string $filename): array
{
@@ -229,17 +286,34 @@ abstract class BaseReader implements IReader
* possibly without parsing the whole file to a Spreadsheet object.
* Readers will often have a more efficient method with which
* they can override this method.
*
* @return string[]
*/
public function listWorksheetNames(string $filename): array
{
$returnArray = [];
$info = $this->listWorksheetInfo($filename);
foreach ($info as $infoArray) {
if (isset($infoArray['worksheetName'])) {
$returnArray[] = $infoArray['worksheetName'];
}
$returnArray[] = $infoArray['worksheetName'];
}
return $returnArray;
}
public function getValueBinder(): ?IValueBinder
{
return $this->valueBinder;
}
public function setValueBinder(?IValueBinder $valueBinder): self
{
$this->valueBinder = $valueBinder;
return $this;
}
protected function newSpreadsheet(): Spreadsheet
{
return new Spreadsheet();
}
}