Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
dbba802
WIP Contingency for Zipstream 3.0 (#3410)
oleibman May 23, 2023
1185451
Changes to NUMBERVALUE, VALUE, DATEVALUE, TIMEVALUE (#3575)
oleibman May 23, 2023
407479f
Non-Static Data Provider (#3585)
oleibman May 24, 2023
9a13f52
Redo Calculation of Color Tinting (#3580)
oleibman May 25, 2023
4f6d1f7
Accommodating Slash with preg_quote - Text Functions (#3582)
oleibman May 27, 2023
5a6d8b9
Accommodating Slash with preg_quote - Structured Reference Column Nam…
oleibman May 27, 2023
b819124
Accommodating Slash with preg_quote - Delimiters (#3584)
oleibman May 27, 2023
27b3fc3
Bump phpunit/phpunit from 9.6.7 to 9.6.8 (#3595)
dependabot[bot] Jun 1, 2023
27e8a1f
Bump mpdf/mpdf from 8.1.5 to 8.1.6 (#3596)
dependabot[bot] Jun 1, 2023
1c6e2db
Bump phpstan/phpstan-phpunit from 1.3.11 to 1.3.13 (#3597)
dependabot[bot] Jun 1, 2023
9b9e30c
Upgrade php-cs-fixer (#3602)
oleibman Jun 2, 2023
3aab263
Upgrade mitoteam/jpgraph (#3603)
oleibman Jun 2, 2023
a0a9b2b
HyperlinkBase Property, and Html Handling of Properties (#3589)
oleibman Jun 3, 2023
a2edbf8
Unzipped Gnumeric File (#3591)
oleibman Jun 3, 2023
e258918
Update reading-files.md (#3607)
jpachta Jun 8, 2023
a1d960b
Improvements for Data Validation (#3605)
oleibman Jun 8, 2023
eba7271
Changelog Updates 20230609 (#3612)
oleibman Jun 9, 2023
570660f
Column Widths, Especially for ODS (#3610)
oleibman Jun 14, 2023
fde2ccf
Minor update the change log
MarkBaker Jun 14, 2023
7d6cb09
Backport Security Patches
oleibman Sep 2, 2024
e27b17e
Don't Use Phpunit 10
oleibman Sep 3, 2024
00cd98f
WebService Test Requires Int Not String
oleibman Sep 3, 2024
59ee38f
Unit Tests Skip Nightly Add 8.3
oleibman Sep 3, 2024
fb42a10
Validate POST Input in Sample 45
oleibman Sep 5, 2024
7551a9f
Preparation for Php8.4
oleibman Sep 6, 2024
e69cfb9
Used Php8 Construct But Still Need to Support 7.4
oleibman Sep 6, 2024
8edc294
Make Csv Reader Consistent With Other Branches
oleibman Sep 6, 2024
ec0d4af
AMORDEGRC and Csv Reader
oleibman Sep 8, 2024
fa657fd
More Tests
oleibman Sep 13, 2024
8b9b378
Html Writer Validate Hyperlink Protocols
oleibman Sep 14, 2024
9c90ed6
Used Named Parameter but Still Need to Support Php7.4
oleibman Sep 14, 2024
d95bc29
Backport Security Patch
oleibman Sep 24, 2024
f0219ff
Restore 2 Disabled Tests
oleibman Sep 25, 2024
3a5a818
Update Changelog
oleibman Sep 29, 2024
15e028f
Backport PR #4189 Csv Method
oleibman Oct 15, 2024
31d7f79
Backport Security Patch
oleibman Nov 10, 2024
7ca7e32
Fix Changelog - Wrong Tag Was Applied
oleibman Nov 10, 2024
bedd300
Change Github Actions Version
oleibman Nov 10, 2024
2106f0a
Update GitHub Pages Only for Master Branch
oleibman Nov 12, 2024
bdffbdb
Upgrade Symfony/Process
oleibman Nov 13, 2024
c5f0f50
Upgrade PhpUnit
oleibman Nov 14, 2024
727cb70
Ignore Settings::libXmlLoaderOptions
oleibman Nov 22, 2024
77206da
Another Try to Suppress github-pages
oleibman Nov 23, 2024
345b63a
Fix Minor Break Handling Drawings
oleibman Nov 26, 2024
bb4b75d
Upgrade Dompdf, Tcpdf, Composer Package
oleibman Dec 8, 2024
0859772
Tweak to .gitattributes
oleibman Dec 8, 2024
f6ee1f2
Additional Context Options for http(s) Images
oleibman Dec 13, 2024
dfc2fe6
Restore Accidentally Disabled Test
oleibman Dec 15, 2024
320f690
Install Locale to Avoid Some Skipped Tests
oleibman Dec 23, 2024
a78ceaa
Add German Language Pack
oleibman Dec 23, 2024
a50ebfe
Backport Security Patches for Samples
oleibman Dec 26, 2024
02c8625
Backport Html Writer Security Patches
oleibman Dec 27, 2024
54238bd
Upgrade tcpdf to 6.8.0
oleibman Dec 28, 2024
893ea4f
Update License
oleibman Jan 5, 2025
51635f6
Remove Scrutinizer and Coverage from release1291 (#4304)
oleibman Jan 7, 2025
be65fbe
Change hash code for worksheet branch release1291 (#4306)
oleibman Jan 8, 2025
089ffdf
Backported Security Patch
oleibman Jan 12, 2025
b9da9aa
Tweak One Test
oleibman Jan 15, 2025
c9040d9
Upgrade mitoteam/jpgraph
oleibman Jan 16, 2025
3051663
Security Patch Control Characters in Protocol
oleibman Jan 24, 2025
ffb47b6
Update Changelog
oleibman Jan 26, 2025
8352c49
Backport 2 Changes to Writer/Xls/Parser
oleibman Feb 7, 2025
6a972b5
Allow composer/pcre 1 and 2, fixes #4346 (#4347)
sprankhub Feb 7, 2025
c80041b
Update Changelog For New Release
oleibman Feb 8, 2025
9924c6c
Update content-hash (composer update --lock)
oleibman Feb 8, 2025
8f4c541
Fix TEXT and TIMEVALUE Functions 1.29 Branch (#4352)
oleibman Feb 11, 2025
7628348
Allow php-cs-fixer to Handle Implicit Backslashes
oleibman Feb 11, 2025
ffbbf61
Allow Spreadsheet Serialization Branch release129 (#4405)
oleibman Mar 14, 2025
b94b4e9
Removing Columns/Rows Containing Merged Cells (#4473)
oleibman May 16, 2025
05b6c43
Allow Xlsx Reader to Specify ParseHuge Release1291 (#4515)
oleibman Jun 23, 2025
7c06eed
All Readers - Allow or Forbid Fetching of External Images Release129 …
oleibman Jul 23, 2025
5e3a6a8
Changelog Update Semantic Versioning Statement
oleibman Jul 26, 2025
c2cd0e6
Breaking Change When Loading External Images
oleibman Aug 3, 2025
2f39286
Prepare Changelog for New Release
oleibman Aug 10, 2025
fc0d8bd
Update react/promise (Php8.5) and setasign/fpdi (security) release129…
oleibman Aug 19, 2025
df6d824
Update Mpdf (Php8.5) release1291 (#4592)
oleibman Aug 21, 2025
bc37318
Branch release1291 Will Not Be Updated for Php 8.5 (#4606)
oleibman Aug 26, 2025
5d81305
Update Readme release1291 (#4612)
oleibman Aug 28, 2025
fa8257a
Prep Work for 1.30.1
oleibman Oct 26, 2025
e862463
Update README With New Branch Names
oleibman Nov 27, 2025
1ca2b80
Changes to WEBSERVICE R129 (#4758)
oleibman Dec 23, 2025
4ad82d2
Prepare Changelog for New Release
oleibman Jan 11, 2026
09cdde5
Instantiator Problem (#4778)
oleibman Jan 11, 2026
7919868
Update License 1.30.x
oleibman Mar 5, 2026
b6c44a4
Security Patches
oleibman Apr 5, 2026
87a0eb5
Option to Whitelist External Images r129 (#4854)
oleibman Apr 5, 2026
d28d482
Prepare Changelog for New Release
oleibman Apr 10, 2026
0297038
Security Patches
oleibman Apr 19, 2026
23b31c9
Bring fork up to remote 1.30.4 version
NiklavsE Apr 30, 2026
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
7 changes: 6 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@
/.gitattributes export-ignore
/.github export-ignore
/.gitignore export-ignore
/.php_cs.dist export-ignore
/.phpcs.xml.dist export-ignore
/.php-cs-fixer.dist.php export-ignore
/.scrutinizer.yml export-ignore
/CHANGELOG.PHPExcel.md export-ignore
/bin export-ignore
/composer.lock export-ignore
/docs export-ignore
/infra export-ignore
/mkdocs.yml export-ignore
/phpstan.neon.dist export-ignore
/phpstan-baseline.neon export-ignore
/phpstan-conditional.php export-ignore
/phpunit10.xml.dist export-ignore
/phpunit.xml.dist export-ignore
/samples export-ignore
/tests export-ignore
4 changes: 2 additions & 2 deletions .github/workflows/github-pages.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: GithHub Pages
on:
push:
tags:
- '*'
branches:
- 'master'

jobs:
github-pages:
Expand Down
99 changes: 42 additions & 57 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,17 @@ jobs:
- '8.0'
- '8.1'
- '8.2'

include:
- php-version: 'nightly'
experimental: true
- '8.3'
- '8.4'

name: PHP ${{ matrix.php-version }}

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Install locales
run: sudo apt-get update && sudo apt-get install -y language-pack-fr language-pack-de

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
Expand All @@ -35,15 +36,15 @@ jobs:
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: Delete composer lock file
id: composer-lock
if: ${{ matrix.php-version == '8.1' || matrix.php-version == '8.2' || matrix.php-version == 'nightly' }}
if: ${{ matrix.php-version == '8.1' || matrix.php-version == '8.2' || matrix.php-version == '8.3' || matrix.php-version == '8.4' || matrix.php-version == 'nightly'}}
run: |
rm composer.lock
echo "flags=--ignore-platform-reqs" >> $GITHUB_OUTPUT
Expand All @@ -66,19 +67,37 @@ jobs:
- name: "Run PHPUnit tests 2 (Experimental: ${{ matrix.experimental }})"
env:
FAILURE_ACTION: "${{ matrix.experimental == true }}"
if: ${{ matrix.php-version == '8.1' || matrix.php-version == '8.2' || matrix.php-version == 'nightly' }}
run: vendor/bin/phpunit -c phpunit10.xml.dist --display-incomplete --display-skipped --display-deprecations --display-errors --display-notices --display-warnings || $FAILURE_ACTION
if: ${{ matrix.php-version == '8.1' || matrix.php-version == '8.2' || matrix.php-version == '8.3' || matrix.php-version == '8.4' || matrix.php-version == 'nightly'}}
run: vendor/bin/phpunit --verbose || $FAILURE_ACTION

find-polyfill:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: none

- name: Find code that might require polyfill
run: php ./bin/findpolyfill.php

php-cs-fixer:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.1
php-version: 8.3
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: none
tools: cs2pr
Expand All @@ -88,7 +107,7 @@ jobs:
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
Expand All @@ -104,12 +123,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.1
php-version: 8.3
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: none
tools: cs2pr
Expand All @@ -119,7 +138,7 @@ jobs:
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
Expand All @@ -135,12 +154,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.1
php-version: 8.3
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: none
tools: cs2pr
Expand All @@ -150,7 +169,7 @@ jobs:
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
Expand All @@ -166,12 +185,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.1
php-version: 8.3
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: none
tools: cs2pr
Expand All @@ -181,7 +200,7 @@ jobs:
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
Expand All @@ -193,46 +212,11 @@ jobs:
- name: Static analysis with PHPStan
run: ./vendor/bin/phpstan analyse

coverage:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@v2
with:
php-version: 8.1
extensions: ctype, dom, gd, iconv, fileinfo, libxml, mbstring, simplexml, xml, xmlreader, xmlwriter, zip, zlib
coverage: pcov

- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache composer dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: Install dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader

- name: Coverage
run: |
./vendor/bin/phpunit --coverage-clover coverage-clover.xml
composer global require scrutinizer/ocular
~/.composer/vendor/bin/ocular code-coverage:upload --format=php-clover coverage-clover.xml

release:
runs-on: ubuntu-latest
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
ref: ${{ github.ref }} # Otherwise our annotated tag is not fetched and we cannot get correct version

Expand All @@ -244,3 +228,4 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
bodyFile: release-body.txt
makeLatest: false
35 changes: 16 additions & 19 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

$finder = PhpCsFixer\Finder::create()
->exclude('vendor')
->notPath('src/PhpSpreadsheet/Writer/ZipStream3.php')
->in(__DIR__);

$config = new PhpCsFixer\Config();
$config
->setRiskyAllowed(true)
->setFinder($finder)
->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect(null, 600))
->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer' . preg_replace('~\W~', '-', __DIR__))
->setRules([
'align_multiline_comment' => true,
Expand All @@ -17,17 +19,16 @@
'binary_operator_spaces' => true,
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => true,
'blank_line_before_statement' => true,
'braces' => true,
'blank_line_before_statement' => false,
'blank_lines_before_namespace' => ['max_line_breaks' => 2, 'min_line_breaks' => 2], // we want 1 blank line before namespace
'cast_spaces' => true,
'class_attributes_separation' => ['elements' => ['method' => 'one', 'property' => 'one']], // const are often grouped with other related const
'class_definition' => false,
'class_keyword_remove' => false, // ::class keyword gives us better support in IDE
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'combine_nested_dirname' => true,
'comment_to_phpdoc' => false, // interferes with annotations
'compact_nullable_typehint' => true,
'compact_nullable_type_declaration' => true,
'concat_space' => ['spacing' => 'one'],
'constant_case' => true,
'date_time_immutable' => false, // Break our unit tests
Expand All @@ -41,7 +42,6 @@
'elseif' => true,
'encoding' => true,
'ereg_to_preg' => true,
'escape_implicit_backslashes' => true,
'explicit_indirect_variable' => false, // I feel it makes the code actually harder to read
'explicit_string_variable' => false, // I feel it makes the code actually harder to read
'final_class' => false, // We need non-final classes
Expand All @@ -51,10 +51,9 @@
'fopen_flag_order' => true,
'fopen_flags' => true,
'full_opening_tag' => true,
'fully_qualified_strict_types' => true,
'fully_qualified_strict_types' => false,
'function_declaration' => true,
'function_to_constant' => true,
'function_typehint_space' => true,
'general_phpdoc_annotation_remove' => ['annotations' => ['access', 'category', 'copyright']],
'global_namespace_import' => true,
'header_comment' => false, // We don't use common header in all our files
Expand Down Expand Up @@ -83,14 +82,12 @@
'native_constant_invocation' => false, // Micro optimization that look messy
'native_function_casing' => true,
'native_function_invocation' => false, // I suppose this would be best, but I am still unconvinced about the visual aspect of it
'native_function_type_declaration_casing' => true,
'new_with_braces' => true,
'new_with_parentheses' => ['anonymous_class' => true, 'named_class' => true],
'no_alias_functions' => true,
'no_alternative_syntax' => true,
'no_binary_string' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace
'no_break_comment' => true,
'no_closing_tag' => true,
'no_empty_comment' => true,
Expand All @@ -109,19 +106,17 @@
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => true,
'no_spaces_inside_parenthesis' => true,
'no_superfluous_elseif' => false, // Might be risky on a huge code base
'no_superfluous_phpdoc_tags' => ['allow_mixed' => true],
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
//'no_superfluous_phpdoc_tags' => ['allow_mixed' => true],
'no_trailing_comma_in_singleline' => ['elements' => ['arguments', 'array_destructuring', 'array', 'group_import']],
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unneeded_braces' => true,
'no_unneeded_final_method' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_cast' => true,
'no_unset_on_property' => true,
'no_unset_on_property' => false,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
Expand Down Expand Up @@ -177,7 +172,7 @@
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => true,
'phpdoc_types_order' => true,
'phpdoc_types_order' => false,
'phpdoc_var_annotation_correct_order' => true,
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
Expand All @@ -195,27 +190,29 @@
'simple_to_complex_string_variable' => false, // Would differ from TypeScript without obvious advantages
'simplified_null_return' => false, // Even if technically correct we prefer to be explicit
'single_blank_line_at_eof' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => true,
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'single_line_comment_style' => true,
'single_line_throw' => false, // I don't see any reason for having a special case for Exception
'single_quote' => true,
'single_quote' => false,
'single_trait_insert_per_statement' => true,
'space_after_semicolon' => true,
'spaces_inside_parentheses' => ['space' => 'none'],
'standardize_increment' => true,
'standardize_not_equals' => true,
'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()`
'strict_comparison' => false, // No, too dangerous to change that
'strict_param' => false, // No, too dangerous to change that
'string_implicit_backslashes' => ['single_quoted' => 'unescape', 'double_quoted' => 'escape', 'heredoc' => 'escape'], // was escape_implicit_backslashes
'string_line_ending' => true,
'switch_case_semicolon_to_colon' => true,
'switch_case_space' => true,
'ternary_operator_spaces' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline' => true,
'trim_array_spaces' => true,
'type_declaration_spaces' => ['elements' => ['function', 'property']], // was function_typehint_space
'unary_operator_spaces' => true,
'visibility_required' => ['elements' => ['property', 'method']], // not const
'void_return' => true,
Expand Down
12 changes: 12 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Read the Docs configuration file for MkDocs projects
# See https://docs.readthedocs.io/en/stable/config-file/v2.html

version: 2

build:
os: ubuntu-22.04
tools:
python: "3"

mkdocs:
configuration: mkdocs.yml
Loading
Loading