-
-
Notifications
You must be signed in to change notification settings - Fork 24
Zet -> Contributte #61
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
Zet -> Contributte #61
Conversation
This commit implements issue #53 by migrating the entire codebase to use the Contributte namespace instead of the previous Zet\FileUpload namespace. Changes include: - Updated all PHP source files in src/ with new namespace declarations - Updated all test files in tests/ with new namespace references - Migrated composer.json from classmap to PSR-4 autoloading - Updated phpstan.neon configuration with new namespace - Updated ruleset.xml with new namespace for coding standard - Updated documentation in .docs/README.md - Fixed PHP 8.4 compatibility issue with nullable parameter syntax - Fixed deprecated access to ClassType::$methods property All changes have been validated with PHPStan (level 8) and pass successfully.
WalkthroughThe pull request updates the package namespace from Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60–90 minutes Areas requiring extra attention:
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (10)
🧰 Additional context used🧬 Code graph analysis (5)tests/Fixtures/Template/Renderer/InvalidRenderer.php (1)
tests/Fixtures/Filter/ValidFilter.php (1)
tests/Toolkit/Container.php (1)
tests/Fixtures/Model/ValidUploadModel.php (2)
tests/Fixtures/Model/InvalidUploadModel.php (1)
🔇 Additional comments (10)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (7)
tests/cases/FileUploadExtension.phpt (2)
36-36: Update class references in test configuration to use the new namespace.The test configuration strings still reference
Zet\FileUpload\Filter\ImageFilter, which should be updated toContributte\FileUpload\Filter\ImageFilterto match the namespace migration.Apply this diff to update the class references:
fileUpload: maxFiles: 10 maxFileSize: 2M - fileFilter: Zet\FileUpload\Filter\ImageFilter + fileFilter: Contributte\FileUpload\Filter\ImageFilter NEON));The same change should be applied to lines 50 and 93.
Also applies to: 50-50, 93-93
202-202: Update renderer reference in test configuration to use the new namespace.The test configuration string still references
Zet\FileUpload\Template\Renderer\Bootstrap4Renderer, which should be updated toContributte\FileUpload\Template\Renderer\Bootstrap4Rendererto match the namespace migration.Apply this diff:
fileUpload: - renderer: Zet\FileUpload\Template\Renderer\Bootstrap4Renderer + renderer: Contributte\FileUpload\Template\Renderer\Bootstrap4Renderer NEON));src/Template/Renderer/Bootstrap4Renderer.php (1)
11-11: Update @Package annotation to match the new namespace.The
@packagedoc comment still references the oldZet\FileUpload\Template\Renderernamespace and should be updated toContributte\FileUpload\Template\Renderer.Apply this diff:
* @author Zechy <[email protected]> - * @package Zet\FileUpload\Template\Renderer + * @package Contributte\FileUpload\Template\Renderer */src/Template/Renderer/Html5Renderer.php (1)
10-10: Update outdated @Package annotation.The
@packageannotation still references the oldZet\FileUpload\Template\Renderernamespace and should be updated to match the new namespace.Apply this diff to update the annotation:
* @author Zechy <[email protected]> - * @package Zet\FileUpload\Template\Renderer + * @package Contributte\FileUpload\Template\Renderer */src/Template/Renderer/BaseRenderer.php (1)
14-14: Update the outdated @Package docblock.The @Package annotation still references the old
Zet\FileUpload\Template\Renderernamespace. It should be updated toContributte\FileUpload\Template\Rendererfor consistency.Apply this diff:
- * @package Zet\FileUpload\Template\Renderer + * @package Contributte\FileUpload\Template\Renderersrc/Model/UploadController.php (1)
65-89: Update exception namespace strings to Contributte.Line 66 and Line 88 still surface the old
\Zet\...identifiers, which will confuse users diagnosing errors after the namespace migration. Please align the messages with the new Contributte classes.Apply this diff:
- throw new UnexpectedValueException( - 'The file filter class does not implement the interface \\Zet\\FileUpload\\Filter\\IMimeTypeFilter.' - ); + throw new UnexpectedValueException( + 'The file filter class does not implement the interface \\Contributte\\FileUpload\\Filter\\IMimeTypeFilter.' + ); ... - throw new InvalidStateException( - 'The renderer must be an instance of the class `\\Zet\\FileUpload\\Template\\BaseRenderer`.' - ); + throw new InvalidStateException( + 'The renderer must be an instance of the class `\\Contributte\\FileUpload\\Template\\Renderer\\BaseRenderer`.' + );src/FileUploadControl.php (1)
309-312: Fix stale namespace in exception message.Line 311 still references
\Zet\...even though the interface moved under Contributte. Please update it to avoid misleading diagnostics.Apply this diff:
- throw new InvalidStateException( - 'The passed model is not an instance of \\Zet\\FileUpload\\Model\\IUploadModel.' - ); + throw new InvalidStateException( + 'The passed model is not an instance of \\Contributte\\FileUpload\\Model\\IUploadModel.' + );
🧹 Nitpick comments (1)
.docs/README.md (1)
20-20: Minor: Hard tab detected.Static analysis detected a hard tab character. Consider replacing with spaces for consistency.
Apply this diff:
- maxFiles: 10 + maxFiles: 10
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (31)
.docs/README.md(11 hunks)composer.json(2 hunks)phpstan.neon(1 hunks)ruleset.xml(1 hunks)src/Exception/InvalidArgumentException.php(1 hunks)src/Exception/InvalidFileException.php(1 hunks)src/Exception/InvalidValueException.php(1 hunks)src/Exception/LogicalException.php(1 hunks)src/FileUploadControl.php(3 hunks)src/FileUploadExtension.php(3 hunks)src/Filter/ArchiveFilter.php(1 hunks)src/Filter/AudioFilter.php(1 hunks)src/Filter/BaseFilter.php(1 hunks)src/Filter/DocumentFilter.php(1 hunks)src/Filter/IMimeTypeFilter.php(1 hunks)src/Filter/ImageFilter.php(1 hunks)src/Model/BaseUploadModel.php(1 hunks)src/Model/DefaultFile.php(1 hunks)src/Model/IUploadModel.php(1 hunks)src/Model/UploadController.php(2 hunks)src/Template/JavascriptBuilder.php(1 hunks)src/Template/Renderer/BaseRenderer.php(2 hunks)src/Template/Renderer/Bootstrap3Renderer.php(1 hunks)src/Template/Renderer/Bootstrap4Renderer.php(1 hunks)src/Template/Renderer/Html5Renderer.php(1 hunks)src/Template/Renderer/IUploadRenderer.php(1 hunks)tests/cases/FileUploadExtension.phpt(1 hunks)tests/cases/Model/DefaultFile.phpt(1 hunks)tests/fixtures/Filter/ValidFilter.php(1 hunks)tests/fixtures/Model/ValidUploadModel.php(1 hunks)tests/toolkit/Container.php(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (7)
tests/toolkit/Container.php (1)
src/FileUploadExtension.php (1)
FileUploadExtension(24-102)
tests/fixtures/Model/ValidUploadModel.php (1)
src/Model/BaseUploadModel.php (1)
BaseUploadModel(14-53)
tests/fixtures/Filter/ValidFilter.php (1)
src/Filter/BaseFilter.php (1)
BaseFilter(14-61)
src/Model/UploadController.php (3)
src/FileUploadControl.php (1)
FileUploadControl(26-588)src/Template/JavascriptBuilder.php (1)
JavascriptBuilder(18-140)src/Template/Renderer/BaseRenderer.php (1)
BaseRenderer(16-141)
src/Template/JavascriptBuilder.php (2)
src/Model/UploadController.php (1)
UploadController(27-230)src/Template/Renderer/BaseRenderer.php (1)
BaseRenderer(16-141)
src/Template/Renderer/BaseRenderer.php (1)
src/FileUploadControl.php (1)
FileUploadControl(26-588)
src/FileUploadControl.php (1)
src/Model/UploadController.php (1)
UploadController(27-230)
🪛 markdownlint-cli2 (0.18.1)
.docs/README.md
20-20: Hard tabs
Column: 1
(MD010, no-hard-tabs)
🔇 Additional comments (27)
src/Model/IUploadModel.php (1)
3-3: LGTM! Clean namespace migration.The namespace update from
Zet\FileUpload\ModeltoContributte\FileUpload\Modelis correctly applied.src/Model/BaseUploadModel.php (1)
3-3: LGTM! Clean namespace migration.The namespace update from
Zet\FileUpload\ModeltoContributte\FileUpload\Modelis correctly applied.tests/toolkit/Container.php (1)
8-8: LGTM! Import statement correctly updated.The import statement correctly references the new
Contributte\FileUpload\FileUploadExtensionnamespace.tests/cases/FileUploadExtension.phpt (1)
13-16: LGTM! Import statements correctly updated.All import statements correctly reference the new
Contributte\FileUploadnamespace.phpstan.neon (1)
8-8: LGTM! PHPStan configuration correctly updated.The error suppression rule correctly references the new
Contributte\FileUploadnamespace.src/Template/Renderer/Bootstrap4Renderer.php (1)
3-3: LGTM! Namespace correctly updated.The namespace update from
Zet\FileUpload\Template\RenderertoContributte\FileUpload\Template\Rendereris correctly applied.tests/fixtures/Filter/ValidFilter.php (1)
5-5: LGTM! Import statement correctly updated.The import statement correctly references the new
Contributte\FileUpload\Filter\BaseFilternamespace.src/Filter/ArchiveFilter.php (1)
3-3: LGTM! Clean namespace migration.The namespace update from
Zet\FileUpload\FiltertoContributte\FileUpload\Filteris correctly applied.src/Exception/InvalidValueException.php (1)
3-3: Namespace migration looks good.The namespace has been correctly updated from
Zet\FileUpload\ExceptiontoContributte\FileUpload\Exceptionas part of the project-wide namespace migration.tests/fixtures/Model/ValidUploadModel.php (1)
7-7: Import statement correctly updated.The base class import has been properly migrated to the new
Contributte\FileUpload\Model\BaseUploadModelnamespace.src/Filter/AudioFilter.php (1)
3-3: Namespace migration is correct.The filter namespace has been properly updated to
Contributte\FileUpload\Filter.src/Filter/DocumentFilter.php (1)
3-3: Namespace update looks good.The document filter namespace has been correctly migrated to
Contributte\FileUpload\Filter.tests/cases/Model/DefaultFile.phpt (1)
5-5: Test import correctly updated.The DefaultFile import has been properly migrated to the
Contributte\FileUpload\Modelnamespace.src/Template/Renderer/Html5Renderer.php (1)
3-3: Namespace correctly updated.The renderer namespace has been properly migrated to
Contributte\FileUpload\Template\Renderer.src/Exception/LogicalException.php (1)
3-3: Namespace migration is correct.The exception namespace has been properly updated to
Contributte\FileUpload\Exception.src/Filter/ImageFilter.php (1)
3-3: Namespace correctly migrated.The image filter namespace has been properly updated to
Contributte\FileUpload\Filter.src/Exception/InvalidFileException.php (1)
3-3: LGTM! Clean namespace migration.The namespace change is correct and consistent with the broader migration from Zet to Contributte.
src/Exception/InvalidArgumentException.php (1)
3-3: LGTM! Namespace update is correct.The namespace migration is properly applied.
src/Template/JavascriptBuilder.php (1)
3-3: LGTM! Namespace and imports updated consistently.The namespace declaration and import statements have been properly updated to use the Contributte namespace throughout.
Also applies to: 10-11
.docs/README.md (1)
11-11: LGTM! Documentation updated comprehensively.All namespace references in the documentation have been properly updated from
Zet\FileUploadtoContributte\FileUpload, including configuration examples, class references, and usage instructions.Also applies to: 20-20, 34-36, 44-44, 100-100, 113-113, 119-119, 141-141, 216-216, 308-308, 354-354
src/Template/Renderer/IUploadRenderer.php (1)
3-3: LGTM! Interface namespace migrated correctly.The interface's public API is preserved while the namespace is properly updated.
src/Template/Renderer/Bootstrap3Renderer.php (1)
3-3: LGTM! Namespace update applied correctly.The renderer's namespace has been updated while preserving all functionality.
src/FileUploadExtension.php (3)
3-3: LGTM! Namespace and imports updated consistently.All namespace declarations and imports have been properly migrated to the Contributte namespace.
Also applies to: 12-17
94-94: Nice improvement! Using proper method access.The change from array access (
$class->methods['initialize']) to the proper method accessor ($class->getMethod('initialize')) is a good improvement. This is more robust and follows better practices for working withClassTypeobjects.
96-99: LGTM! Registration call updated correctly.The FileUploadControl registration call has been properly updated to use the new Contributte namespace.
src/Template/Renderer/BaseRenderer.php (2)
3-3: LGTM! Namespace and imports updated correctly.The namespace declaration and imports have been properly migrated to the Contributte namespace.
Also applies to: 8-8
76-79: LGTM! Modern nullable type syntax applied.The update from
Translator $translator = nullto?Translator $translator = nulluses modern PHP 7.1+ nullable type syntax, which is a nice improvement. The behavior remains the same.
composer.json
Outdated
| "php": ">=7.2.0 <8.5", | ||
| "ext-json": "*", | ||
| "latte/latte": "^2.10", | ||
| "latte/latte": "^2.10 || ^3.0", | ||
| "nette/application": "^3.1", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Questionable PHP upper bound
Moving from >=7.2.0 to >=7.2.0 <8.5 drops support for every future PHP release, which will force Composer to refuse installs as soon as PHP 8.5 lands. Unless we already know 8.5 is incompatible, we should keep the requirement open-ended (or document the incompatibility) so consumers aren’t surprised by an artificial block.
🤖 Prompt for AI Agents
In composer.json around lines 14 to 17, the PHP requirement currently pins an
upper bound ("php": ">=7.2.0 <8.5") which will block installs on future PHP
releases; remove the artificial "<8.5" upper bound (or if 8.5+ is truly
incompatible, replace it with a clear comment in README and a composer
"conflict" entry documenting the incompatibility) so the package does not refuse
installs on future PHP versions.
This commit modernizes the development and CI infrastructure following Contributte best practices (based on contributte/doctrine-orm): .gitignore: - Updated IDE ignore path format (/.idea instead of .idea) - Added coverage.html to ignore list Makefile: - Added qa target that runs phpstan + cs - Updated cs/csf targets to use phpcs/phpcbf with ruleset.xml - Added conditional logic for GitHub Actions (checkstyle format) - Simplified phpstan target (removed -l 8 as it's in config) - Merged coverage targets into single target with conditional logic phpstan.neon: - Reorganized configuration (includes first, then parameters) - Set phpVersion to 70200 (minimum supported version) - Added paths and scanDirectories configuration - Changed level from max to 8 for better compatibility - Added vendor scanning for Nette and Tracy - Simplified ignoreErrors using identifier for class.notFound ruleset.xml: - Simplified ruleset configuration - Removed redundant configuration options - Kept only essential TypeNameMatchesFileName rule .github/workflows/main.yaml: - Added workflow_dispatch trigger for manual runs - Updated all actions to latest versions (v4 for checkout/cache) - Updated GitHub Actions output format (deprecated set-output) - Updated PHP versions for testing (7.2-8.3) - Set coverage to "none" for non-coverage jobs - Changed coverage target from "coverage-clover" to "coverage" - Updated QA/PHPStan to use PHP 8.2 - Added explicit coverage: "pcov" for coverage job All changes validated with PHPStan level 8 - passing successfully.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
phpstan.neon (1)
8-8: Verify the level downgrade is intentional.The PHPStan level has been downgraded from
maxto8. Levelmaxrepresents the highest available strictness and evolves with PHPStan releases, while level8is fixed. This change reduces analysis strictness and may allow issues that would have been caught bymaxto pass through.If the downgrade is due to compatibility or noise issues, please document the reasoning.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
.github/workflows/main.yaml(14 hunks).gitignore(1 hunks)Makefile(1 hunks)phpstan.neon(1 hunks)ruleset.xml(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- ruleset.xml
🧰 Additional context used
🪛 checkmake (0.2.2)
Makefile
[warning] 1-1: Missing required phony target "all"
(minphony)
[warning] 1-1: Missing required phony target "clean"
(minphony)
[warning] 1-1: Missing required phony target "test"
(minphony)
🪛 GitHub Actions: build
Makefile
[error] 10-10: Makefile target 'cs' failed (exit code 3).
🔇 Additional comments (13)
.gitignore (2)
2-2: Good practice: Root-anchored ignore pattern.Anchoring
.ideato the repository root (/.idea) is more precise and follows gitignore best practices.
10-10: LGTM: Aligns with coverage output changes.The addition of
/coverage.htmlcorrectly aligns with the Makefile's updated coverage target, which outputs tocoverage.htmlin local development mode.phpstan.neon (3)
1-6: Good addition: Enhanced static analysis rules.Adding deprecation rules, Nette-specific rules, and strict rules strengthens the static analysis coverage and helps catch more potential issues.
9-16: Well-configured analysis scope.The explicit
phpVersion,paths, andscanDirectoriesconfigurations are appropriate:
- PHP 7.2.0 aligns with the project's minimum version requirement
- Limiting paths to
srcimproves analysis performance- Including
vendor/netteandvendor/tracydirectories ensures proper analysis of framework-specific code
23-23: Correct namespace update.The error message has been properly updated to reflect the namespace migration from
Zet\FileUploadtoContributte\FileUpload, aligning with the PR objectives..github/workflows/main.yaml (4)
12-12: Good addition: Manual workflow trigger.Adding
workflow_dispatchenables manual workflow runs, which is helpful for testing and debugging CI/CD pipelines.
27-27: Excellent CI/CD improvements.These changes significantly improve the workflow:
- Expanded PHP version matrix (7.2-8.3) ensures broad compatibility testing
- Upgraded GitHub Actions to v4 brings security updates and new features
- The test matrix now includes PHP 8.2 and 8.3 while maintaining support for older versions down to 7.2
These updates align well with the modernized codebase and tooling.
Also applies to: 33-33, 44-44, 87-87, 93-93, 104-104, 144-148, 155-155, 166-166, 206-206, 214-214, 225-225
63-63: Correct migration to GITHUB_OUTPUT.Properly updated from the deprecated
set-outputcommand to the recommended$GITHUB_OUTPUTenvironment file approach.Also applies to: 123-123, 185-185, 244-244
55-56: Well-optimized coverage configuration.The coverage settings are properly configured:
- Setting
coverage: "none"for non-coverage jobs improves performance- Using
coverage: "pcov"for the coverage job provides fast, accurate coverage measurement- The
make coveragecommand aligns with the updated Makefile targetsAlso applies to: 115-116, 177-178, 236-237, 257-257
Makefile (4)
1-1: Convenient QA target added.The new
qatarget provides a convenient way to run both PHPStan and coding standards checks together, useful for pre-commit validation.Also applies to: 6-7
19-19: Good practice: Configuration from phpstan.neon.Removing the
-l 8flag allows PHPStan to use the level configured inphpstan.neon, providing a single source of truth for configuration.
24-29: Cleaner coverage target consolidation.The consolidated
coveragetarget with conditional output (XML for CI, HTML for local) is cleaner than separate targets and aligns well with the updated CI workflow.
8-13: The original review comment is incorrect and should be disregarded.The Makefile's
cstarget (lines 8-13) is correctly implemented. The review comment makes unfounded assertions about pipeline failures and coding violations without evidence. Here's why:
No actual pipeline failure demonstrated: The review comment claims the pipeline fails with exit code 3, but provides no evidence of this failure or its cause.
phpcs is properly declared: phpcs is provided through the
ninjify/qa ^0.12dev dependency, which is a legitimate QA metapackage. Thedealerdirect/phpcodesniffer-composer-installerplugin is also correctly configured in composer.json.Makefile is correctly structured: The conditional logic for
--report=checkstyleoutput in GitHub Actions is appropriate and standard practice for CI pipelines.ruleset.xml exists: The configuration file is present in the repository, indicating the cs target is properly set up.
No action is required. The code shown is correct as-is.
Likely an incorrect or invalid review comment.
Replace ninjify packages with contributte/qa for QA tooling: composer.json: - Replaced ninjify/nunjuck and ninjify/qa with contributte/qa ^0.3 - Added explicit nette/tester ^2.5 dependency (was transitive before) ruleset.xml: - Updated to use contributte/qa/ruleset-8.2.xml instead of ninjify/coding-standard/contributte.xml This aligns with current Contributte standards and provides the same coding standard rules with updated dependencies. PHPStan: ✅ Passing (level 8) CodeSniffer: Working (pre-existing style violations noted)
This commit modernizes the codebase to PHP 8.2+ and fixes all QA violations: PHP Version & Dependencies: - Bumped minimum PHP requirement from 7.2 to 8.2 - Updated Nette dependencies to latest versions compatible with PHP 8.2+ - nette/utils: ^3.2 → ^4.0 - nette/http: ^3.1 → ^3.3 - nette/application: ^3.1 → ^3.2 - nette/caching: ^3.1 → ^3.3 - nette/di: ^3.0 → ^3.2 - nette/forms: ^3.1 → ^3.2 - latte/latte: ^2.10 || ^3.0 → ^3.0 - Replaced nette/tester with contributte/tester ^0.3 - Updated phpstan.neon: phpVersion from 70200 to 80200 CI/CD Updates: - Updated test matrix to PHP 8.2, 8.3, 8.4 - Removed PHP 7.x and 8.0/8.1 from CI Code Quality Fixes: - Added native type hints to all properties (int, string, array, bool, etc.) - Fixed FileUploadControl::getValue() return type to be covariant with parent - Fixed Stringable handling in JavascriptBuilder translation - Made $filter and $renderer nullable in UploadController - Converted if-else to ternary operator in BaseFilter - Fixed string interpolation to use sprintf() in renderer templates - Added proper PHPDoc annotations for traversable types - Fixed namespace declarations in test fixtures - Alphabetically sorted use statements - Removed useless PHPDoc comments phpstan.neon: - Updated ignoreErrors to use identifier-based ignoring - Removed class.notFound ignore (no longer needed with PHP 8.2+) ruleset.xml: - Added tests/toolkit to rootNamespaces mapping All QA checks passing: ✅ PHPStan: Level 8 - No errors ✅ CodeSniffer: All violations fixed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
src/Model/UploadController.php (2)
47-65: Update error message to reflect new namespace.The error message on line 58 still references the old
Zet\FileUploadnamespace. This should be updated to match the newContributte\FileUploadnamespace for consistency.Apply this diff:
throw new UnexpectedValueException( - 'The file filter class does not implement the interface \\Zet\\FileUpload\\Filter\\IMimeTypeFilter.' + 'The file filter class does not implement the interface \\Contributte\\FileUpload\\Filter\\IMimeTypeFilter.' );
72-86: Update error message to reflect new namespace and path.The error message on line 80 still references the old
Zet\FileUploadnamespace. Additionally, the correct path should beContributte\FileUpload\Template\Renderer\BaseRenderer(note theRenderersubdirectory).Apply this diff:
throw new InvalidStateException( - 'The renderer must be an instance of the class `\\Zet\\FileUpload\\Template\\BaseRenderer`.' + 'The renderer must be an instance of the class `\\Contributte\\FileUpload\\Template\\Renderer\\BaseRenderer`.' );src/FileUploadControl.php (1)
262-279: Update error message to reflect new namespace.The error message on line 275 still references the old
Zet\FileUploadnamespace. This should be updated to match the newContributte\FileUploadnamespace for consistency.Apply this diff:
throw new InvalidStateException( - 'The passed model is not an instance of \\Zet\\FileUpload\\Model\\IUploadModel.' + 'The passed model is not an instance of \\Contributte\\FileUpload\\Model\\IUploadModel.' );
♻️ Duplicate comments (1)
composer.json (1)
14-14: PHP 8.2 requirement is appropriate.The requirement is correctly open-ended without an upper bound, allowing future PHP versions. The past review concern about a PHP upper bound appears to have been resolved.
🧹 Nitpick comments (5)
composer.json (1)
34-41: PSR-4 autoloading is a good modernization.The migration from classmap to PSR-4 autoloading aligns with modern PHP standards and should improve IDE support and autoloading performance.
src/Template/Renderer/BaseRenderer.php (2)
36-48: Property typing improvements enhance type safety.The explicit array type with default values and the strongly-typed properties improve IDE support and runtime type checking.
Also applies to: 50-53
97-114: Strict comparisons improve type safety.Using
===instead of==prevents type coercion bugs and aligns with modern PHP best practices..github/workflows/main.yaml (1)
33-33: GitHub Actions modernization looks good.The upgrades from v2 to v4 for checkout and cache actions, plus the migration from deprecated
set-outputtoGITHUB_OUTPUT, align with current GitHub Actions best practices.Also applies to: 44-44, 63-63, 93-93, 104-104, 123-123, 155-155, 166-166, 185-185, 214-214, 225-225, 244-244
src/FileUploadControl.php (1)
529-555: Fix comment placement after closing brace.The new
checkSettings()method properly validates file size limits. However, the comment lines 553-555 appear after the closing brace ofcheckSettings(), which creates unusual formatting. These section marker comments typically appear before method definitions or as separators between sections.Consider moving the comment lines before line 529 or after line 526 to maintain conventional comment placement:
+ // -------------------------------------------------------------------- + // Setters \ Getters + // -------------------------------------------------------------------- + /** * Ověření nastavených direktiv, zda nepřekročují nastavení serveru. * * @throws InvalidValueException */ private function checkSettings(): void { ... } - // -------------------------------------------------------------------- - // Setters \ Getters - // --------------------------------------------------------------------
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (30)
.github/workflows/main.yaml(14 hunks)composer.json(1 hunks)phpstan.neon(1 hunks)ruleset.xml(1 hunks)src/Exception/InvalidFileException.php(1 hunks)src/Exception/InvalidValueException.php(1 hunks)src/FileUploadControl.php(8 hunks)src/FileUploadExtension.php(2 hunks)src/Filter/ArchiveFilter.php(1 hunks)src/Filter/AudioFilter.php(1 hunks)src/Filter/BaseFilter.php(3 hunks)src/Filter/DocumentFilter.php(1 hunks)src/Filter/IMimeTypeFilter.php(2 hunks)src/Filter/ImageFilter.php(1 hunks)src/Model/BaseUploadModel.php(4 hunks)src/Model/DefaultFile.php(3 hunks)src/Model/IUploadModel.php(2 hunks)src/Model/UploadController.php(2 hunks)src/Template/JavascriptBuilder.php(5 hunks)src/Template/Renderer/BaseRenderer.php(5 hunks)src/Template/Renderer/Bootstrap3Renderer.php(5 hunks)src/Template/Renderer/Bootstrap4Renderer.php(4 hunks)src/Template/Renderer/Html5Renderer.php(5 hunks)src/Template/Renderer/IUploadRenderer.php(2 hunks)tests/fixtures/Filter/InvalidFilter.php(1 hunks)tests/fixtures/Filter/ValidFilter.php(1 hunks)tests/fixtures/Model/InvalidUploadModel.php(1 hunks)tests/fixtures/Model/ValidUploadModel.php(1 hunks)tests/fixtures/Template/Renderer/InvalidRenderer.php(1 hunks)tests/toolkit/Container.php(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (9)
- src/Filter/DocumentFilter.php
- src/FileUploadExtension.php
- src/Template/Renderer/Html5Renderer.php
- src/Exception/InvalidValueException.php
- src/Template/Renderer/Bootstrap3Renderer.php
- tests/toolkit/Container.php
- src/Filter/AudioFilter.php
- src/Template/Renderer/Bootstrap4Renderer.php
- src/Template/JavascriptBuilder.php
🧰 Additional context used
🧬 Code graph analysis (11)
tests/fixtures/Model/ValidUploadModel.php (3)
src/Model/BaseUploadModel.php (4)
BaseUploadModel(12-50)remove(33-36)rename(45-48)save(23-26)src/Model/IUploadModel.php (3)
remove(35-35)rename(28-28)save(19-19)tests/fixtures/Model/InvalidUploadModel.php (3)
remove(11-14)rename(16-19)save(25-34)
src/Model/IUploadModel.php (3)
src/Model/BaseUploadModel.php (3)
save(23-26)rename(45-48)remove(33-36)tests/fixtures/Model/InvalidUploadModel.php (3)
save(25-34)rename(16-19)remove(11-14)tests/fixtures/Model/ValidUploadModel.php (3)
save(26-35)rename(17-20)remove(12-15)
src/Model/BaseUploadModel.php (3)
src/Model/IUploadModel.php (3)
save(19-19)remove(35-35)rename(28-28)tests/fixtures/Model/InvalidUploadModel.php (3)
save(25-34)remove(11-14)rename(16-19)tests/fixtures/Model/ValidUploadModel.php (3)
save(26-35)remove(12-15)rename(17-20)
tests/fixtures/Model/InvalidUploadModel.php (3)
src/Model/BaseUploadModel.php (3)
remove(33-36)rename(45-48)save(23-26)src/Model/IUploadModel.php (3)
remove(35-35)rename(28-28)save(19-19)tests/fixtures/Model/ValidUploadModel.php (3)
remove(12-15)rename(17-20)save(26-35)
src/Filter/IMimeTypeFilter.php (1)
src/Filter/BaseFilter.php (2)
checkType(23-29)getAllowedTypes(34-37)
tests/fixtures/Template/Renderer/InvalidRenderer.php (1)
tests/toolkit/Tests.php (1)
Tests(5-12)
src/Filter/BaseFilter.php (6)
src/Filter/ArchiveFilter.php (1)
getMimeTypes(17-25)src/Filter/AudioFilter.php (1)
getMimeTypes(17-25)src/Filter/DocumentFilter.php (1)
getMimeTypes(17-29)src/Filter/ImageFilter.php (1)
getMimeTypes(17-25)tests/fixtures/Filter/InvalidFilter.php (1)
getMimeTypes(11-16)tests/fixtures/Filter/ValidFilter.php (1)
getMimeTypes(13-18)
tests/fixtures/Filter/ValidFilter.php (1)
src/Filter/BaseFilter.php (1)
BaseFilter(12-57)
src/Model/UploadController.php (4)
src/Exception/InvalidFileException.php (1)
InvalidFileException(10-13)src/FileUploadControl.php (1)
FileUploadControl(25-571)src/Template/JavascriptBuilder.php (1)
JavascriptBuilder(16-121)src/Template/Renderer/BaseRenderer.php (1)
BaseRenderer(13-129)
src/FileUploadControl.php (5)
src/Exception/InvalidValueException.php (1)
InvalidValueException(10-13)src/Model/BaseUploadModel.php (2)
BaseUploadModel(12-50)remove(33-36)src/Model/DefaultFile.php (1)
DefaultFile(11-80)src/Model/UploadController.php (1)
UploadController(26-222)src/Model/IUploadModel.php (1)
remove(35-35)
src/Template/Renderer/BaseRenderer.php (7)
src/FileUploadControl.php (2)
FileUploadControl(25-571)__construct(121-139)src/Model/UploadController.php (1)
__construct(37-40)src/Template/JavascriptBuilder.php (1)
__construct(27-37)src/Template/Renderer/Bootstrap3Renderer.php (3)
buildDefaultTemplate(24-73)buildFileContainerTemplate(78-113)buildFileError(118-128)src/Template/Renderer/Bootstrap4Renderer.php (3)
buildDefaultTemplate(24-70)buildFileContainerTemplate(75-111)buildFileError(116-126)src/Template/Renderer/Html5Renderer.php (3)
buildDefaultTemplate(67-103)buildFileContainerTemplate(108-138)buildFileError(143-154)src/Template/Renderer/IUploadRenderer.php (3)
buildDefaultTemplate(16-16)buildFileContainerTemplate(21-21)buildFileError(26-26)
🪛 PHPMD (2.15.0)
src/Model/BaseUploadModel.php
23-23: Avoid unused parameters such as '$params'. (undefined)
(UnusedFormalParameter)
33-33: Avoid unused parameters such as '$uploaded'. (undefined)
(UnusedFormalParameter)
45-45: Avoid unused parameters such as '$upload'. (undefined)
(UnusedFormalParameter)
🔇 Additional comments (42)
src/Template/Renderer/IUploadRenderer.php (1)
10-28: Interface structure is solid.The interface methods are well-defined with clear return types. No issues with the structure or signatures.
tests/fixtures/Filter/InvalidFilter.php (1)
8-10: LGTM! PHPDoc improves type clarity.The added PHPDoc annotation explicitly documents the array structure, which aids static analysis tools and improves code maintainability.
src/Filter/ArchiveFilter.php (1)
3-3: LGTM! Namespace migration is consistent.The namespace change from
Zet\FileUpload\FiltertoContributte\FileUpload\Filteraligns with the PR's objective to migrate the project namespace.tests/fixtures/Filter/ValidFilter.php (2)
5-5: LGTM! Import updated for namespace migration.The import path correctly references the new
Contributte\FileUpload\Filter\BaseFilterlocation, consistent with the namespace migration.
10-12: LGTM! PHPDoc enhances type documentation.The added PHPDoc annotation provides explicit array structure information for static analysis.
tests/fixtures/Template/Renderer/InvalidRenderer.php (1)
3-3: LGTM! Fixture namespace reorganization.The namespace change to
Tests\Fixtures\Template\Rendererimproves test fixture organization without affecting functionality.phpstan.neon (4)
1-5: LGTM! Stricter analysis rules added.The inclusion of deprecation rules, Nette-specific rules, and strict rules strengthens static analysis coverage.
8-9: LGTM! Analysis level and PHP version updated.Level 8 provides strong type checking while remaining practical, and PHP 8.2 aligns with the project's minimum requirement.
11-16: LGTM! Explicit paths and vendor scanning improve analysis.Specifying the
srcpath and scanning vendor directories helps PHPStan resolve dependencies and analyze the codebase more accurately.
23-24: Identifier-based ignore is more maintainable.Switching from message-pattern matching to identifier-based ignores (
assign.propertyType) is more precise and resilient to message text changes.src/Filter/BaseFilter.php (3)
3-3: LGTM! Namespace migration is consistent.The namespace update from
Zet\FileUpload\FiltertoContributte\FileUpload\Filteraligns with the project-wide migration.
23-28: LGTM! Ternary refactor maintains behavior.The refactored
checkType()implementation uses a ternary expression for a more compact representation while preserving the original logic (mimetype check with extension fallback).
39-45: LGTM! Abstract method reordered.The
getMimeTypes()abstract method has been repositioned in the file without changing its signature or semantics.src/Model/DefaultFile.php (4)
3-3: LGTM! Namespace migration is consistent.The namespace change to
Contributte\FileUpload\Modelaligns with the project-wide migration.
21-21: LGTM! Typed property improves type safety.Adding the
arraytype to$onDeleteprevents accidental assignment of non-array values.
26-36: LGTM! Private properties now strongly typed.The addition of explicit types (
string,string,mixed) to private properties improves type safety and aligns with PHP 8.2 capabilities.
70-78: LGTM! Accessor methods with explicit types.The
mixedtype for identifier methods is appropriate for flexible ID handling (int, string, etc.).src/Filter/IMimeTypeFilter.php (3)
3-3: LGTM! Namespace migration is consistent.The namespace update to
Contributte\FileUpload\Filteraligns with the project-wide migration.
20-20: LGTM! Explicit return type strengthens interface contract.Adding the
: boolreturn type makes the interface contract more explicit and enables better type checking.
25-25: LGTM! String return type clarifies interface contract.The
: stringreturn type explicitly documents the expected return value fromgetAllowedTypes().src/Model/IUploadModel.php (1)
3-3: LGTM: Interface modernization looks good.The namespace migration and type hint additions are correct. The use of
mixedreturn types forsaveandrenameappropriately reflects the flexible contract, whilevoidforremoveis properly constrained.Also applies to: 19-19, 28-28, 35-35
src/Model/BaseUploadModel.php (1)
3-3: LGTM: Base implementation correctly matches interface.The namespace migration and type hints properly align with
IUploadModel. The PHPMD warnings about unused parameters are false positives—this is a base class providing default/stub implementations that subclasses are expected to override, so the parameters must be present to satisfy the interface contract.Also applies to: 23-23, 33-33, 45-45
ruleset.xml (1)
4-4: LGTM: Ruleset properly updated for namespace migration.The coding standard reference, namespace mappings, and exclusions correctly reflect the migration to Contributte namespace and updated QA tooling.
Also applies to: 10-10, 19-19
src/Template/Renderer/BaseRenderer.php (1)
77-87: New abstract methods formalize the template builder contract.These methods establish a clear contract for renderer implementations. The relevant code snippets confirm that existing renderers (Bootstrap3Renderer, Bootstrap4Renderer, Html5Renderer) already implement these methods, ensuring compatibility.
Note: This is a breaking change for any third-party renderer implementations, but it's appropriate given the major version migration.
src/Filter/ImageFilter.php (1)
3-3: LGTM: Namespace migration.Simple namespace update with no functional changes.
src/Exception/InvalidFileException.php (1)
3-3: LGTM: Namespace migration.Simple namespace update for exception class.
.github/workflows/main.yaml (2)
12-12: Manual workflow trigger added.The
workflow_dispatchtrigger allows manual execution of the workflow, which is useful for testing and debugging.
27-27: PHP version matrix properly updated for 8.2+ requirement.The test matrices correctly reflect the new minimum PHP version (8.2) and include forward compatibility testing for PHP 8.3 and 8.4. The
--prefer-lowesttest on PHP 8.2 ensures minimum dependency versions remain compatible.Also applies to: 87-87, 144-150, 206-206
tests/fixtures/Model/InvalidUploadModel.php (3)
11-14: LGTM! Type hints align with interface.The method signature correctly matches
IUploadModel::remove(mixed $uploaded): void.
16-19: LGTM! Type hints align with interface.The method signature correctly matches
IUploadModel::rename(mixed $upload, string $newName): mixed. Note that this fixture returns void (implicitly null), which is compatible with mixed.
21-34: LGTM! Enhanced type safety with explicit return type.The
array|falsereturn type is more specific than the interface'smixedreturn type, which provides better type safety for this test fixture. The explicitfalsereturn on failure improves clarity.tests/fixtures/Model/ValidUploadModel.php (4)
5-5: LGTM! Namespace correctly updated.The import path correctly reflects the namespace migration from
Zet\FileUploadtoContributte\FileUpload.
12-15: LGTM! Type hints align with parent class.The method signature correctly matches
BaseUploadModel::remove(mixed $uploaded): void.
17-20: LGTM! Type hints align with parent class.The method signature correctly matches
BaseUploadModel::rename(mixed $upload, string $newName): mixed. This fixture returns void (implicitly null), which is compatible with mixed.
22-35: LGTM! Enhanced type safety with explicit return type.The
array|falsereturn type provides better type safety than the parent'smixedreturn type. The explicitfalsereturn on failure is clear and correct.src/Model/UploadController.php (1)
3-9: LGTM! Namespace migration and type hints correctly applied.The namespace and imports are properly updated to
Contributte\FileUpload, and property type hints improve type safety throughout the class.Also applies to: 29-35
src/FileUploadControl.php (6)
3-9: LGTM! Namespace migration correctly applied.The namespace, imports, and filter constant values are properly updated to
Contributte\FileUpload.Also applies to: 34-49
51-114: LGTM! Comprehensive type hints improve type safety.All properties now have explicit type hints, which aligns with the PHP 8.2+ requirement and improves code safety.
145-151: LGTM! Destructor properly cleans up cache.The destructor ensures cache cleanup when the control is destroyed, preventing cache pollution. This is a good practice.
157-199: LGTM! Modern PHP syntax improves readability.The union type
array|stdClassfor configuration and the use of the null coalescing assignment operator??=align with PHP 8.2+ features and improve code clarity.
471-476: LGTM! Mixed type appropriate for flexible configuration.Using
mixedfor the value parameter allows for flexible configuration values while maintaining type safety.
519-526: LGTM! Simplified implementation with explicit return type.The
getValue()method now has an explicit?arrayreturn type and a cleaner implementation. The logic correctly returns null when the cache value is not an array.
| "latte/latte": "^3.0", | ||
| "nette/application": "^3.2", | ||
| "nette/caching": "^3.3", | ||
| "nette/di": "^3.2", | ||
| "nette/forms": "^3.2", | ||
| "nette/http": "^3.3", | ||
| "nette/utils": "^4.0" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Verify compatibility with major dependency upgrades.
The dependency updates include significant version jumps that may introduce breaking changes:
latte/latte: ^2.10 → ^3.0 (major version bump)nette/utils: ^3.x → ^4.0 (major version bump)- Other nette packages updated to newer minor versions
🏁 Script executed:
#!/bin/bash
# Verify that the codebase uses APIs compatible with the new dependency versions
echo "=== Checking for deprecated Latte 3.0 API usage ==="
# Look for common Latte 2.x patterns that changed in 3.0
rg -n "\\baddFilter\\(|\\bsetTempDirectory\\(|\\bsetAutoRefresh\\(" --type php
echo ""
echo "=== Checking for deprecated Nette Utils 4.0 API usage ==="
# Look for removed/changed APIs in nette/utils 4.0
rg -n "Nette\\\\Utils\\\\(Finder|MimeTypeDetector|FileSystem::copy)" --type php
echo ""
echo "=== Checking Strings::webalize usage (signature may have changed) ==="
rg -nC3 "Strings::webalize" --type phpLength of output: 527
---
🌐 Web query:
```web
Nette Utils 4.0 migration breaking changes Strings::webalize
💡 Result:
Short answer — main breaking change to Strings::webalize in Nette Utils 4.0:
- webalize now strictly converts UTF‑8 to a URL‑safe form by removing diacritics and replacing every character except ASCII letters (a–z) and digits with hyphens. Non‑ASCII letters are transliterated to ASCII; only a-z0-9 remain (you can whitelist extra characters with the second parameter). The method signature is webalize(string $s, ?string $charlist = null, bool $lower = true) and the function requires ext‑intl. (api.nette.org)
Notes for migration:
- If your code relied on keeping non‑ASCII characters, different separators, or locale‑specific behavior, update calls to pass an explicit $charlist or post‑process the result. (doc.nette.org)
- Check the 4.0 upgrade notes for other unrelated breaking changes when migrating from 3.x. (doc.nette.org)
If you want, tell me an example input you use and I’ll show how to adapt it to the 4.0 behaviour.
Citations:
- 1: https://api.nette.org/utils/master/Nette/Utils/Strings.html?utm_source=openai
- 2: https://doc.nette.org/en/utils/strings?utm_source=openai
- 3: https://doc.nette.org/en/utils/upgrading?utm_source=openai
</thinking>
🏁 Script executed:
#!/bin/bash
# Check for PHP version requirements and ext-intl in composer.json
echo "=== Checking composer.json for PHP and ext-intl requirements ==="
cat composer.json | grep -A5 -B5 "php\|ext-intl"
echo ""
echo "=== Check for Latte 3.0 specific migration issues ==="
# Look for common Latte template patterns that might have changed
rg -n "\\{\\|\\|\\||\\$control\\.|\\binclude\\(|extends\\(|macro\\b" --type php --max-count 10
echo ""
echo "=== Check for any explicit ext-intl usage or requirements ==="
rg -n "ext-intl|intl|Locale|Collator|NumberFormatter" --type phpLength of output: 8098
🏁 Script executed:
#!/bin/bash
# Check for PHP version requirements and ext-intl in composer.json
echo "=== Checking composer.json for PHP and ext-intl requirements ==="
cat composer.json | grep -E "php|ext-intl|require"
echo ""
echo "=== Check for Latte 3.0 specific API changes ==="
# Look for Engine initialization and common patterns
rg -n "Engine|Loader|TemplateFactory|\\$latte\\s*=" --type php -C2 | head -40
echo ""
echo "=== Check for any explicit intl extension references ==="
rg -n "ext-intl|extension_loaded.*intl|function_exists.*intl" --type phpLength of output: 1078
---
🌐 Web query:
```web
Latte 3.0 release breaking changes migration guide
💡 Result:
Here’s a concise migration checklist for moving from Latte 2 → Latte 3 (breaking changes + actions). Key sources: Latte docs (Migration from Latte 2) and Nette migration notes. [1][2]
Quick prerequisites
- Install Latte 2.11 (transition release) and run its linter: vendor/bin/latte-lint . Fix warnings, then upgrade to Latte 3 and lint again. [1]
Template syntax changes (fix in templates)
- Filter arguments: use comma separators. Example: |filter: arg, arg (was : ). [1]
- Labels/translate:
- {label foo} must be paired: {label foo}...{/label} (unpaired become {label /}).
- {_ 'text'} is always unpaired; paired translation becomes {translate}...{/translate}. [1]
- Pseudo-strings & attributes: quote interpolations or use compound brackets:
- {block "foo-$var"} or {block foo-{$var}} (instead of {block foo-$var}).
- n:block="foo-{$var}" for attributes. [1]
- Include/file syntax: use {include file "abc"} (or {include file "abc.latte"}) — beware ambiguity when string contains a period. Replace {includeblock file.latte} with {include file.latte with blocks} or {import}. [1]
- Void elements: n:inner-xxx, n:tag-xxx and n:ifcontent cannot be used on void HTML elements. Use non-void containers. [1]
- n:inner-snippet must be written without inner- (i.e. n:snippet). [1]
- Close </script> and </style> tags explicitly. [1]
- Removed magic $iterations variable (use $iterator instead). [1]
- {do ...} and {php ...} may only contain expressions; for raw PHP use RawPhpExtension. [1]
API / extensions / add-ons
- Custom tags API completely changed — rewrite Latte 2 add-ons (macros) to new Latte 3 extensions. Foreign add-ons that add tags must be updated by their authors. [1]
- Dynamic filter replacement: Engine::addFilter(null, ...) → use filter loader and Engine::addFilterLoader() which must always return a callable. [1]
- Nette integration: old onCompile UIMacros installation is replaced by new UIExtension:
- Old:
$latte->onCompile[] = function ($latte) {
Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
}; - New:
$latte->addExtension(new Nette\Bridges\ApplicationLatte\UIExtension($control));
[1]
- Old:
Testing & tooling
- Use latte-lint after changes (run both on transition 2.11 and after upgrading to 3.0). [1]
- When using Nette, follow Nette migration guidance (typehints, renamed interfaces, update related packages). Use Nette TypeFixer for automatic fixes where appropriate. [2]
Practical migration steps (minimal)
- Run tests / back up code.
- Install Latte 2.11, run vendor/bin/latte-lint and fix all deprecation/warning messages. [1]
- Fix template syntax items listed above (filters, labels, includes, pseudo-strings, snippets, void elements, closing tags, $iterations). [1]
- Rewrite any custom macros/add-ons to the new extension/tag API; replace dynamic filters with addFilterLoader. [1]
- Upgrade to Latte 3.0, run latte-lint again and full test-suite. [1]
- If using Nette, follow Nette 3 migration steps (update dependent packages, adjust typehints and UI integration). [2]
References
- Migration from Latte 2 to 3 — Latte docs. [1]
- Migrating to Version 3.0 — Nette docs (general Nette migration guidance). [2]
If you want, I can:
- run latte-lint on a repository (instructions), or
- produce automated search-and-replace snippets for the most common syntax changes (filters, include syntax, pseudo-strings). Which would you prefer?
---
🏁 Script executed:
```shell
#!/bin/bash
# Check for Latte template files
echo "=== Looking for Latte template files ==="
fd -e latte -e phtml | head -20
echo ""
echo "=== Check for any FileSystem usage (may have changed in nette/utils 4.0) ==="
rg -n "FileSystem::" --type php -C2
echo ""
echo "=== Check for nette/forms usage (3.2 may have changes) ==="
rg -n "Forms\\|Form::" --type php | head -20
Length of output: 1647
🏁 Script executed:
#!/bin/bash
# Check Latte template syntax
echo "=== Content of Latte template file ==="
cat src/Template/js.latte
echo ""
echo "=== Check if template uses potentially problematic Latte 2.x syntax ==="
# Look for filter args with colons, dynamic blocks, {include} with period in filename
rg -n "\\|.*:|\\{label|\\{_|\\{include|includeblock|\\$iterations|\\{do |\\{php " src/Template/js.latteLength of output: 3873
🌐 Web query:
Nette Utils 4.0 FileSystem::delete FileSystem::rename breaking changes
💡 Result:
Short summary of breaking changes in Nette Utils 4.0 for FileSystem::delete / FileSystem::rename
-
FileSystem::delete(string $path)
- Behavior: now explicitly "Deletes a file or directory if exists" — i.e. it will not throw if the path does not exist. (Docs/API for 4.0). [1][2]
-
FileSystem::rename(string $origin, string $target, bool $overwrite = true)
- Signature/semantics: the method now uses an explicit $overwrite named argument (default true). When $overwrite is false and the target exists the method throws Nette\InvalidStateException; when $overwrite is true it overwrites. This replaces older flag-style / less explicit behavior and aligns with copy() which has the same $overwrite semantics. (Docs/API and 4.0 announcement). [1][2][3]
Migration note
- Replace any code that relied on exceptions from delete() for missing paths (check existence yourself if you need that behavior).
- Update calls that used positional flags or different semantics for rename/copy to the new signature and consider using the named argument $overwrite: false to prevent overwriting (or true to allow it). [2][3]
Sources
- Nette Utils API — FileSystem (4.x). [API docs]. [1]
- Nette Documentation — File system (Utils) (upgrading / class docs). [2]
- Nette blog post / 4.0 announcement (notes about named arguments / Finder being moved into utils). [3]
Add ext-intl to composer.json requirements.
Nette Utils 4.0 now requires ext-intl, but it's missing from the require section. This will cause runtime failures when Strings::webalize() is called (src/Model/BaseUploadModel.php:47). Add "ext-intl": "*" to composer.json.
Review FileSystem API changes in test fixtures.
FileSystem::delete() no longer throws if the path doesn't exist, and FileSystem::rename() now uses an explicit $overwrite parameter (default true). Test fixtures in ValidUploadModel.php and InvalidUploadModel.php (lines 14, 18–19) use these methods; verify the new behavior is acceptable for your tests.
Verify webalize() behavioral change.
Strings::webalize() in Nette Utils 4.0 is stricter and only keeps ASCII a-z, 0-9, transliterating non-ASCII characters. If filenames with non-ASCII characters are important, confirm this stricter filtering is acceptable for the rename functionality.
Latte 3.0 compatibility is OK. The template file (src/Template/js.latte) uses compatible filter syntax and contains no deprecated Latte 2.x patterns.
🤖 Prompt for AI Agents
In composer.json around lines 16–22 add the ext-intl requirement and adjust
tests and code for Nette Utils 4.0: add "ext-intl": "*" to the require section;
in test fixtures (ValidUploadModel.php and InvalidUploadModel.php, around lines
14 and 18–19) update FileSystem calls to the new behavior by not relying on
FileSystem::delete() to throw when a path is missing and by passing the explicit
$overwrite argument to FileSystem::rename() where needed; finally review and, if
necessary, adapt the rename logic or tests to account for Strings::webalize()
stricter transliteration (convert or normalize non-ASCII filenames before
calling webalize, or update expected test outputs to the new ASCII-only
results).
| <?php declare(strict_types = 1); | ||
|
|
||
| namespace Zet\FileUpload\Template\Renderer; | ||
| namespace Contributte\FileUpload\Template\Renderer; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Namespace migration looks good.
The namespace update from Zet\FileUpload\Template\Renderer to Contributte\FileUpload\Template\Renderer is consistent with the PR objectives.
Verify that all implementations and usages of IUploadRenderer have been updated to reference the new namespace:
🏁 Script executed:
#!/bin/bash
# Description: Find all implementations and usages of IUploadRenderer to ensure they reference the new namespace.
# Search for class implementations
ast-grep --pattern 'class $_ implements $$$IUploadRenderer$$$'
# Search for usage in type hints and instantiations
rg -nP --type=php -C3 'IUploadRenderer'Length of output: 1955
---
🏁 Script executed:
```shell
#!/bin/bash
# Verify namespace declarations in renderer implementations
echo "=== BaseRenderer namespace ==="
head -n 10 src/Template/Renderer/BaseRenderer.php
echo -e "\n=== Html5Renderer namespace ==="
head -n 10 src/Template/Renderer/Html5Renderer.php
echo -e "\n=== Search for old namespace (Zet\\FileUpload) ==="
rg -nP --type=php 'Zet\\\\FileUpload'
Length of output: 903
---
🏁 Script executed:
```shell
#!/bin/bash
# Check context of old namespace references to confirm they're in error messages
echo "=== FileUploadControl.php:275 ==="
sed -n '270,280p' src/FileUploadControl.php
echo -e "\n=== UploadController.php:58 ==="
sed -n '53,63p' src/Model/UploadController.php
echo -e "\n=== UploadController.php:80 ==="
sed -n '75,85p' src/Model/UploadController.php
Length of output: 1074
Update error message strings to reference new namespace.
The namespace migration for IUploadRenderer and its implementations is correct. However, error messages in exception strings still reference the old namespace and should be updated for consistency:
src/FileUploadControl.php:275: Update error message from\Zet\FileUpload\Model\IUploadModelto\Contributte\FileUpload\Model\IUploadModelsrc/Model/UploadController.php:58: Update error message from\Zet\FileUpload\Filter\IMimeTypeFilterto\Contributte\FileUpload\Filter\IMimeTypeFiltersrc/Model/UploadController.php:80: Update error message from\Zet\FileUpload\Template\BaseRendererto\Contributte\FileUpload\Template\BaseRenderer
🤖 Prompt for AI Agents
In src/Template/Renderer/IUploadRenderer.php around line 3 and related
locations, update the hardcoded exception message namespaces to the new package
namespace: in src/FileUploadControl.php at ~line 275 change any occurrence of
"\Zet\FileUpload\Model\IUploadModel" to
"\Contributte\FileUpload\Model\IUploadModel"; in src/Model/UploadController.php
at ~line 58 change "\Zet\FileUpload\Filter\IMimeTypeFilter" to
"\Contributte\FileUpload\Filter\IMimeTypeFilter"; and in
src/Model/UploadController.php at ~line 80 change
"\Zet\FileUpload\Template\BaseRenderer" to
"\Contributte\FileUpload\Template\BaseRenderer" so all thrown exception messages
reference the new namespace consistently.
This commit fixes all test failures after migrating to contributte/tester: Test Bootstrap: - Replaced Ninjify\Nunjuck\Environment with Contributte\Tester\Environment - Simplified setup to use Environment::setup(__DIR__) Test Files: - Updated DefaultFile.phpt to use Contributte\Tester\Toolkit - Fixed FileUploadExtension.phpt namespace references: - Zet\FileUpload\Filter\ImageFilter → Contributte\FileUpload\Filter\ImageFilter - Zet\FileUpload\Template\Renderer\Bootstrap4Renderer → Contributte\FileUpload\Template\Renderer\Bootstrap4Renderer - Tests\Fixtures\Renderer\InvalidRenderer → Tests\Fixtures\Template\Renderer\InvalidRenderer PSR-4 Compliance: - Renamed tests/toolkit → tests/Toolkit (for Tests\Toolkit namespace) - Renamed tests/fixtures → tests/Fixtures (for Tests\Fixtures namespace) - This allows PSR-4 autoloading to work correctly Code Fixes: - Made DefaultFile properties nullable with default null values - Fixed ValidUploadModel::rename() return type from void to mixed to match parent BaseUploadModel::rename() signature All tests passing: ✅ 5/5 All QA checks passing: ✅ PHPStan Level 8 + CodeSniffer
Summary by CodeRabbit
Release Notes
Chores
Refactor