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

4.5.8 Ready code #9416

Merged
merged 46 commits into from
Jan 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8e0bb04
docs: add changelog and upgrade for v4.5.8 (#9359)
paulbalandan Dec 31, 2024
82340aa
refactor: use more strict result on preg_match_all() result
samsonasik Jan 1, 2025
3c851f1
Merge pull request #9361 from samsonasik/refactor-more-strict
samsonasik Jan 2, 2025
046967a
fix: gather affected rows after query call failed (#9363)
michalsn Jan 3, 2025
91e788a
refactor: phpstan function.notFound (#9366)
neznaika0 Jan 4, 2025
db12ec3
refactor: Fix phpstan condNotBoolean (#9368)
neznaika0 Jan 4, 2025
a6d9716
refactor: Fix phpstan unset string key
neznaika0 Jan 4, 2025
536570b
Merge pull request #9369 from neznaika0/refactor/phpstan-unset-offset
samsonasik Jan 4, 2025
33110c5
refactor: Fix phpstan greaterOrEqual.invalid (#9370)
neznaika0 Jan 4, 2025
f61361d
refactor: Fix phpstan generator.returnType
neznaika0 Jan 5, 2025
d809c3c
Merge pull request #9378 from neznaika0/refactor/phpstan-generator-re…
samsonasik Jan 5, 2025
2fc2314
chore: Bump to PHPStan 2.0.5
samsonasik Jan 5, 2025
61741c5
Merge pull request #9379 from samsonasik/chore-bump-phpstan205
samsonasik Jan 5, 2025
08540f7
refactor: Fix phpstan function.inner (#9377)
neznaika0 Jan 6, 2025
cd27b6a
refactor: Fix phpstan class.notFound (#9376)
neznaika0 Jan 6, 2025
ac9c168
chore: Bump to Rector 2.0.6
samsonasik Jan 6, 2025
e5a60f3
Merge pull request #9380 from samsonasik/chore-bump-rector-206
samsonasik Jan 6, 2025
6d04e1d
refactor: Fix phpstan nullCoalesce
neznaika0 Jan 7, 2025
dd08f95
Merge pull request #9374 from neznaika0/refactor/phpstan-nullCoalesce
samsonasik Jan 8, 2025
3eb8a09
refactor: Fix phpstan expr.resultUnused (#9385)
neznaika0 Jan 8, 2025
72b7f8a
refactor: Fix phpstan return.type (#9375)
neznaika0 Jan 8, 2025
9de9856
refactor: Fix phpstan isset.offset (#9383)
neznaika0 Jan 8, 2025
42a00ff
refactor: Fix phpstan return.missing (#9382)
neznaika0 Jan 8, 2025
708fb6d
refactor: Fix phpstan always true (#9367)
neznaika0 Jan 10, 2025
5060bdc
style: enable `get_class_to_class_keyword` fixer
paulbalandan Jan 10, 2025
4ee48ac
chore: update 2025 for copyright (#9393)
ddevsr Jan 10, 2025
c39659b
chore: fix mergeable integration file
paulbalandan Jan 10, 2025
0ecfb1e
refactor: using property promotion on ResponseTraitTest
samsonasik Jan 10, 2025
e5f215c
refactor: regenerate baseline
samsonasik Jan 10, 2025
d03d306
Merge pull request #9396 from paulbalandan/mergeable-integration
samsonasik Jan 10, 2025
4c2e683
Merge pull request #9397 from samsonasik/refactor-constructor-promo
samsonasik Jan 10, 2025
49df643
Merge pull request #9394 from paulbalandan/get-class-to-class-keyword
samsonasik Jan 10, 2025
131c5eb
refactor: Fix phpstan method.unused (#9388)
neznaika0 Jan 10, 2025
e3a139d
refactor: Fix phpstan method.impossibleType (#9384)
neznaika0 Jan 10, 2025
69540b3
Update running.rst to fix the reference for adding host alias in wind…
curiousteam Jan 11, 2025
231b6b0
Merge pull request #9398 from curiousteam/patch-1
samsonasik Jan 11, 2025
155f1c1
refactor: Fix phpstan codeigniter.configArgumentInstanceof (#9390)
neznaika0 Jan 13, 2025
c3ac0f9
chore: add more trailing commas in more places (#9395)
paulbalandan Jan 13, 2025
a3704a1
refactor: Fix phpstan codeigniter.frameworkExceptionInstance (#9389)
neznaika0 Jan 13, 2025
d47a258
chore: Fix phpunit deprecations (#9402)
neznaika0 Jan 14, 2025
8ea3582
chore: fix wrong constraint in mergeable.yml
paulbalandan Jan 17, 2025
512cd92
Merge pull request #9413 from codeigniter4/paulbalandan-patch-1
samsonasik Jan 17, 2025
119330c
refactor: Use `strtolower` with `str_contains`/`str_**_with` as repla…
paulbalandan Jan 17, 2025
5f8aa24
Merge commit from fork
michalsn Jan 18, 2025
97a6d66
fix: ensure csrf token is string (#9365)
datlechin Jan 18, 2025
3abaf4b
Prep for 4.5.8 release (#9415)
paulbalandan Jan 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
51 changes: 22 additions & 29 deletions .github/mergeable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,33 @@

version: 2
mergeable:
- when: issues.opened
- when: issues.opened, issues.reopened
validate:
- do: description
and:
- must_include:
regex: '^### PHP Version'
- must_include:
regex: '^### CodeIgniter4 Version'
- do: author
and:
- must_exclude:
regex: 'kenjis'
- must_exclude:
regex: 'lonnieezell'
- must_exclude:
regex: 'MGatner'
- must_exclude:
regex: 'michalsn'
- must_exclude:
regex: 'paulbalandan'
- must_exclude:
regex: 'samsonasik'
- do: or
validate:
- do: and
validate:
- do: description
must_include:
regex: '### PHP Version'
- do: description
must_include:
regex: '### CodeIgniter4 Version'
- do: author
must_include:
regex: ^kenjis|lonnieezell|MGatner|michalsn|paulbalandan|samsonasik$
fail:
- do: comment
payload: |
Hi there! :wave:
payload:
body: |
Hi there, @@author! :wave:

It looks like you opened an issue without following the bug report template:
It looks like you opened an issue without following the bug report template:

Bug report ([open an issue](https://github.com/codeigniter4/CodeIgniter4/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=Bug%3A+))
* Bug report ([open an issue](https://github.com/codeigniter4/CodeIgniter4/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=Bug%3A+))
* For feature request or support question, please use the [forums](https://forum.codeigniter.com/forum-30.html).

If you are opening a feature request or support question, please do so in the [forums](https://forum.codeigniter.com/forum-30.html).
The current issue will be closed. This is a precaution to save maintainers' time, I hope you'll understand.

The current issue will be closed. This is a precaution to save maintainers' time, I hope you'll understand.

Sincerely, the mergeable bot 🤖
Sincerely, the mergeable bot 🤖
- do: close
6 changes: 4 additions & 2 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
__DIR__ . '/spark',
]);

$overrides = [];
$overrides = [
'modernize_strpos' => ['modernize_stripos' => true],
];

$options = [
'cacheFile' => 'build/.php-cs-fixer.cache',
Expand All @@ -53,5 +55,5 @@
return Factory::create(new CodeIgniter4(), $overrides, $options)->forLibrary(
'CodeIgniter 4 framework',
'CodeIgniter Foundation',
'[email protected]'
'[email protected]',
);
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Changelog

## [v4.5.8](https://github.com/codeigniter4/CodeIgniter4/tree/v4.5.8) (2025-01-19)
[Full Changelog](https://github.com/codeigniter4/CodeIgniter4/compare/v4.5.7...v4.5.8)

### Security

* **HTTP** *Validation of header name and value*: Fixed a potential vulnerability on lack of proper header validation
for its name and value. See the [security advisory](https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-x5mq-jjr3-vmx6)
for more information. Credits to @neznaika0 for reporting.
* **Security** fix: ensure csrf token is string by @datlechin in https://github.com/codeigniter4/CodeIgniter4/pull/9365

### Fixed Bugs

* fix: gather affected rows after query call failed by @michalsn in https://github.com/codeigniter4/CodeIgniter4/pull/9363

### Refactoring

* refactor: use more strict result check on preg_match_all() result by @samsonasik in https://github.com/codeigniter4/CodeIgniter4/pull/9361
* refactor: Fix phpstan if.condNotBoolean by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9368
* refactor: Fix phpstan when delete string key by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9369
* refactor: Fix phpstan greaterOrEqual.invalid by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9370
* refactor: Fix phpstan nullCoalesce by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9374
* refactor: Fix phpstan isset offset by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9383
* refactor: Fix phpstan return.missing by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9382
* refactor: Fix phpstan booleanAnd.rightAlwaysTrue by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9367
* refactor: Fix phpstan codeigniter.configArgumentInstanceof by @neznaika0 in https://github.com/codeigniter4/CodeIgniter4/pull/9390
* refactor: Use `strtolower` with `str_contains`/`str_**_with` as replacement for `stripos` by @paulbalandan in https://github.com/codeigniter4/CodeIgniter4/pull/9414

## [v4.5.7](https://github.com/codeigniter4/CodeIgniter4/tree/v4.5.7) (2024-12-31)
[Full Changelog](https://github.com/codeigniter4/CodeIgniter4/compare/v4.5.6...v4.5.7)

Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
The MIT License (MIT)

Copyright (c) 2014-2019 British Columbia Institute of Technology
Copyright (c) 2019-2024 CodeIgniter Foundation
Copyright (c) 2019-present CodeIgniter Foundation

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
10 changes: 5 additions & 5 deletions admin/create-new-changelog.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,20 @@ function replace_file_content(string $path, string $pattern, string $replace): v
replace_file_content(
$changelogIndex,
'/\.\. toctree::\n :titlesonly:\n/u',
".. toctree::\n :titlesonly:\n\n v{$version}"
".. toctree::\n :titlesonly:\n\n v{$version}",
);
// Replace {version}
$length = mb_strlen("Version {$version}");
$underline = str_repeat('#', $length);
replace_file_content(
$changelog,
'/#################\nVersion {version}\n#################/u',
"{$underline}\nVersion {$version}\n{$underline}"
"{$underline}\nVersion {$version}\n{$underline}",
);
replace_file_content(
$changelog,
'/{version}/u',
"{$version}"
"{$version}",
);

// Copy upgrading
Expand All @@ -72,15 +72,15 @@ function replace_file_content(string $path, string $pattern, string $replace): v
replace_file_content(
$upgradingIndex,
'/ backward_compatibility_notes\n/u',
" backward_compatibility_notes\n\n upgrade_{$versionWithoutDots}"
" backward_compatibility_notes\n\n upgrade_{$versionWithoutDots}",
);
// Replace {version}
$length = mb_strlen("Upgrading from {$versionCurrent} to {$version}");
$underline = str_repeat('#', $length);
replace_file_content(
$upgrading,
'/##############################\nUpgrading from {version} to {version}\n##############################/u',
"{$underline}\nUpgrading from {$versionCurrent} to {$version}\n{$underline}"
"{$underline}\nUpgrading from {$versionCurrent} to {$version}\n{$underline}",
);

// Commits
Expand Down
12 changes: 6 additions & 6 deletions admin/prepare-release.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,39 +33,39 @@ function replace_file_content(string $path, string $pattern, string $replace): v
replace_file_content(
'./system/CodeIgniter.php',
'/public const CI_VERSION = \'.*?\';/u',
"public const CI_VERSION = '{$version}';"
"public const CI_VERSION = '{$version}';",
);

// Updates version number in "conf.py".
replace_file_content(
'./user_guide_src/source/conf.py',
'/^version = \'.*?\'/mu',
"version = '{$minor}'"
"version = '{$minor}'",
);
replace_file_content(
'./user_guide_src/source/conf.py',
'/^release = \'.*?\'/mu',
"release = '{$version}'"
"release = '{$version}'",
);

// Updates version number in "phpdoc.dist.xml".
replace_file_content(
'./phpdoc.dist.xml',
'!<title>CodeIgniter v.*? API</title>!mu',
"<title>CodeIgniter v{$minor} API</title>"
"<title>CodeIgniter v{$minor} API</title>",
);
replace_file_content(
'./phpdoc.dist.xml',
'/<version number=".*?">/mu',
"<version number=\"{$version}\">"
"<version number=\"{$version}\">",
);

// Updates release date in changelogs.
$date = date('F j, Y');
replace_file_content(
"./user_guide_src/source/changelogs/v{$version}.rst",
'/^Release Date: .*/mu',
"Release Date: {$date}"
"Release Date: {$date}",
);

// Commits
Expand Down
4 changes: 2 additions & 2 deletions admin/starter/tests/unit/HealthTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public function testBaseUrlHasBeenSet(): void
$config = new App();
$this->assertTrue(
$validation->check($config->baseURL, 'valid_url'),
'baseURL "' . $config->baseURL . '" in .env is not valid URL'
'baseURL "' . $config->baseURL . '" in .env is not valid URL',
);
}

Expand All @@ -43,7 +43,7 @@ public function testBaseUrlHasBeenSet(): void
// BaseURL in app/Config/App.php is a valid URL?
$this->assertTrue(
$validation->check($reader->baseURL, 'valid_url'),
'baseURL "' . $reader->baseURL . '" in app/Config/App.php is not valid URL'
'baseURL "' . $reader->baseURL . '" in app/Config/App.php is not valid URL',
);
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"phpunit/phpcov": "^9.0.2 || ^10.0",
"phpunit/phpunit": "^10.5.16 || ^11.2",
"predis/predis": "^1.1 || ^2.0",
"rector/rector": "2.0.4",
"rector/rector": "2.0.6",
"shipmonk/phpstan-baseline-per-identifier": "^2.0"
},
"replace": {
Expand Down
2 changes: 1 addition & 1 deletion phpdoc.dist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<output>api/build/</output>
<cache>api/cache/</cache>
</paths>
<version number="4.5.7">
<version number="4.5.8">
<api format="php">
<source dsn=".">
<path>system</path>
Expand Down
1 change: 0 additions & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
failOnWarning="true"
cacheDirectory="build/.phpunit.cache">
<coverage
includeUncoveredFiles="true"
pathCoverage="false"
ignoreDeprecatedCodeUnits="true"
disableCodeCoverageIgnore="true">
Expand Down
2 changes: 1 addition & 1 deletion preload.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public function load(): void
$phpFiles = new RegexIterator(
$fullTree,
'/.+((?<!Test)+\.php$)/i',
RecursiveRegexIterator::GET_MATCH
RecursiveRegexIterator::GET_MATCH,
);

foreach ($phpFiles as $key => $file) {
Expand Down
2 changes: 1 addition & 1 deletion public/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
$message = sprintf(
'Your PHP version must be %s or higher to run CodeIgniter. Current version: %s',
$minPhpVersion,
PHP_VERSION
PHP_VERSION,
);

header('HTTP/1.1 503 Service Unavailable.', true, 503);
Expand Down
2 changes: 1 addition & 1 deletion rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
->withCache(
// Github action cache or local
is_dir('/tmp') ? '/tmp/rector' : null,
FileCacheStorage::class
FileCacheStorage::class,
)
// paths to refactor; solid alternative to CLI arguments
->withPaths([
Expand Down
2 changes: 1 addition & 1 deletion spark
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ if (version_compare(PHP_VERSION, $minPhpVersion, '<')) {
$message = sprintf(
'Your PHP version must be %s or higher to run CodeIgniter. Current version: %s',
$minPhpVersion,
PHP_VERSION
PHP_VERSION,
);

exit($message);
Expand Down
2 changes: 1 addition & 1 deletion system/API/ResponseTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ protected function format($data = null)
$mime = $this->request->negotiate(
'media',
$format->getConfig()->supportedResponseFormats,
false
false,
);
}

Expand Down
4 changes: 2 additions & 2 deletions system/Autoloader/Autoloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ public function sanitizeFilename(string $filename): string

throw new InvalidArgumentException(
'The file path contains special characters "' . $chars
. '" that are not allowed: "' . $filename . '"'
. '" that are not allowed: "' . $filename . '"',
);
}
if ($result === false) {
Expand Down Expand Up @@ -386,7 +386,7 @@ private function loadComposerNamespaces(ClassLoader $composer, array $composerPa
throw new RuntimeException(
'Your Composer version is too old.'
. ' Please update Composer (run `composer self-update`) to v2.0.14 or later'
. ' and remove your vendor/ directory, and run `composer update`.'
. ' and remove your vendor/ directory, and run `composer update`.',
);
}
// This method requires Composer 2.0.14 or later.
Expand Down
4 changes: 2 additions & 2 deletions system/Autoloader/FileLocator.php
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,9 @@ public function findQualifiedNameFromPath(string $path)
str_replace(
'/',
'\\',
mb_substr($path, mb_strlen($namespace['path']))
mb_substr($path, mb_strlen($namespace['path'])),
),
'\\'
'\\',
);
// Remove the file extension (.php)
$className = mb_substr($className, 0, -4);
Expand Down
4 changes: 2 additions & 2 deletions system/BaseModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ protected function createDataConverter(): void
$this->converter = new DataConverter(
$this->casts,
$this->castHandlers,
$this->db
$this->db,
);
}
}
Expand Down Expand Up @@ -1081,7 +1081,7 @@ public function updateBatch(?array $set = null, ?string $index = null, int $batc
if ($updateIndex === null) {
throw new InvalidArgumentException(
'The index ("' . $index . '") for updateBatch() is missing in the data: '
. json_encode($row)
. json_encode($row),
);
}

Expand Down
2 changes: 1 addition & 1 deletion system/Boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ protected static function checkMissingExtensions(): void

$message = sprintf(
'The framework needs the following extension(s) installed and loaded: %s.',
implode(', ', $missingExtensions)
implode(', ', $missingExtensions),
);

header('HTTP/1.1 503 Service Unavailable.', true, 503);
Expand Down
8 changes: 4 additions & 4 deletions system/CLI/CLI.php
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ public static function promptByKey($text, array $options, $validation = null): s

CLI::isZeroOptions($options);

if ($line = array_shift($text)) {
if (($line = array_shift($text)) !== null) {
CLI::write($line);
}

Expand Down Expand Up @@ -348,7 +348,7 @@ public static function promptByMultipleKeys(string $text, array $options): array
// return the prompt again if $input contain(s) non-numeric character, except a comma.
// And if max from $options less than max from input,
// it means user tried to access null value in $options
if ($pattern === 0 || $maxOptions < $maxInput) {
if ($pattern < 1 || $maxOptions < $maxInput) {
static::error('Please select correctly.');
CLI::newLine();

Expand Down Expand Up @@ -610,11 +610,11 @@ public static function color(string $text, string $foreground, ?string $backgrou
$nonColoredText = preg_replace(
$pattern,
'<<__colored_string__>>',
$text
$text,
);
$nonColoredChunks = preg_split(
'/<<__colored_string__>>/u',
$nonColoredText
$nonColoredText,
);

foreach ($nonColoredChunks as $i => $chunk) {
Expand Down
2 changes: 1 addition & 1 deletion system/CLI/Console.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public function showHeader(bool $suppress = false)
'CodeIgniter v%s Command Line Tool - Server Time: %s UTC%s',
CodeIgniter::CI_VERSION,
date('Y-m-d H:i:s'),
date('P')
date('P'),
), 'green');
CLI::newLine();
}
Expand Down
Loading
Loading