From 617289b610efbba12f9525b16baed058936ba61f Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Mon, 6 Jan 2025 14:33:10 +0100 Subject: [PATCH 1/3] adjust license --- .github/workflows/ecs-fix.yml | 44 ++++++ .github/workflows/ecs.yml | 117 -------------- .gitignore | 5 +- CONTRIBUTING.md | 61 -------- LICENSE.md | 22 ++- README.md | 12 +- UPGRADE.md | 2 + composer.json | 19 ++- ecs.php | 285 +++++++++++++++------------------- phpstan.neon | 4 +- 10 files changed, 215 insertions(+), 356 deletions(-) create mode 100644 .github/workflows/ecs-fix.yml delete mode 100644 .github/workflows/ecs.yml delete mode 100644 CONTRIBUTING.md diff --git a/.github/workflows/ecs-fix.yml b/.github/workflows/ecs-fix.yml new file mode 100644 index 0000000..feb8383 --- /dev/null +++ b/.github/workflows/ecs-fix.yml @@ -0,0 +1,44 @@ +name: Coding standard refactor +on: + schedule: + - cron: '0 0 * * SUN' + workflow_dispatch: ~ + +jobs: + ecs-fix: + runs-on: ubuntu-latest + timeout-minutes: 5 + strategy: + fail-fast: false + matrix: + branch: [ 'master' ] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ matrix.branch }} + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.3 + + - name: Composer install + run: composer install --no-interaction --no-scripts + + - name: Run ECS + run: | + vendor/bin/ecs check src --fix --config ecs.php + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v4 + with: + commit-message: '[CS] Refactor' + author: DACHCOM Bot + title: '[CS] Refactor' + body: | + This PR has been generated automatically to fix code-styles + labels: | + Enhancement + branch: coding-standard/refactor-${{ matrix.branch }} + delete-branch: true + base: ${{ matrix.branch }} \ No newline at end of file diff --git a/.github/workflows/ecs.yml b/.github/workflows/ecs.yml deleted file mode 100644 index 97913ee..0000000 --- a/.github/workflows/ecs.yml +++ /dev/null @@ -1,117 +0,0 @@ -name: Easy Coding Standards -on: - push: - branches: [ 'master' ] - pull_request: - branches: [ 'master' ] - -jobs: - ecs: - runs-on: ubuntu-latest - env: - TEST_BUNDLE_NAME: "DynamicSearchBundle" - TEST_BUNDLE_INSTALLER_CLASS: "DynamicSearchBundle\\Tool\\Install" - TEST_BUNDLE_TEST_DIR: "${{ github.workspace }}/lib/test-bundle/tests" - TEST_PROJECT_ROOT_DIR: "${{ github.workspace }}" - - PIMCORE_CODECEPTION_FRAMEWORK: "${{ github.workspace }}/pimcore-codeception-framework" - PIMCORE_CODECEPTION_VERSION: "3.0" - - APP_ENV: test - PIMCORE_TEST_DB_DSN: "mysql://root:root@127.0.0.1:3306/dachcom_bundle_test" - PIMCORE_TEST_URL: "http://localhost" - - SYMFONY_DEPRECATIONS_HELPER: "weak" - PIMCORE_PHP_ERROR_REPORTING: 32767 - - WEBDRIVER_HOST: localhost - WEBDRIVER_URL: "http://localhost:8080/" - - services: - mysql: - image: mysql:8.0 - env: - MYSQL_ROOT_PASSWORD: root - ports: - - 3306 - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 - strategy: - matrix: - php: [ 8.3 ] - symfony: [ ^6.4 ] - pimcore: [ ~11.4.0 ] - include: - - pimcore: ~11.4.0 - template_tag: 2024.3 - steps: - - uses: actions/checkout@v4 - with: - path: lib/test-bundle - - - name: Generate Application Structure - run: | - git clone -b ${{ matrix.template_tag }} --single-branch --depth 1 https://github.com/pimcore/skeleton.git - mv skeleton/composer.json . - mv skeleton/bin . - mv skeleton/config . - mv skeleton/public . - mv skeleton/src . - mv skeleton/templates . - mv skeleton/var . - rm -r skeleton - - - name: Setup Pimcore Codeception Framework - env: - MATRIX_PIMCORE_VERSION: ${{ matrix.pimcore }} - MATRIX_PIMCORE_TEMPLATE_TAG: ${{ matrix.template_tag }} - run: | - git clone -b ${{ env.PIMCORE_CODECEPTION_VERSION }} --single-branch --depth 1 https://github.com/dachcom-digital/pimcore-codeception-framework.git - ls -al pimcore-codeception-framework - chmod +x ./pimcore-codeception-framework/src/_etc/scripts/setup.sh - ./pimcore-codeception-framework/src/_etc/scripts/setup.sh - - - name: Install PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - extensions: intl - coverage: none - - - name: Check PHP Version - run: php -v - - - name: Setup MySql - run: | - sudo systemctl start mysql - mysql -uroot -proot -h127.0.0.1 -e "CREATE DATABASE dachcom_bundle_test CHARSET=utf8mb4;" - - - name: Get Composer Cache Directory - id: composer-cache - run: | - echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - - name: Cache Composer Downloads - uses: actions/cache@v4 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer- - - - name: Composer install - env: - TEST_PIMCORE_VERSION: ${{ matrix.pimcore }} - TEST_SYMFONY_VERSION: ${{ matrix.symfony }} - run: | - chmod +x ./pimcore-codeception-framework/src/_etc/scripts/composer.sh - ./pimcore-codeception-framework/src/_etc/scripts/composer.sh - - - name: Assets Install - run: | - bin/console assets:install public --relative --symlink - - - name: Easy Coding Standard Check - continue-on-error: true - run: | - bin/console cache:warmup --env=test - vendor/bin/ecs check ${{ github.workspace }}/lib/test-bundle/src --config ${{ github.workspace }}/lib/test-bundle/ecs.php diff --git a/.gitignore b/.gitignore index d4770f3..54434b9 100644 --- a/.gitignore +++ b/.gitignore @@ -40,10 +40,9 @@ atlassian-ide-plugin.xml .project ehthumbs.db Thumbs.db -Vagrantfile -.vagrant php-cgi.core -.sass-cache +/vendor/ +/composer.lock # codeception (only stage *.dist.yaml config files) /codeception.yaml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 019f633..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,61 +0,0 @@ -# Contributing to a Members - -## Bug Reports & Feature Requests -The Members team heavily uses (and loves!) GitHub for all of our software management. -We use GitHub issues exclusively to track all bugs and features. - -* [Open an issue](https://github.com/dachcom-digital/pimcore-members/issues) here on GitHub. -If you can, **please provide a fix and create a pull request (PR) instead**; this will automatically create an issue for you. -* Report security issues **only** to support@dachcom.ch -* Please be patient as not all items will be tested immediately - remember, Members is open source and free of charge. -* Occasionally we'll close issues if they appear stale or are too vague - please don't take this personally! -Please feel free to re-open issues we've closed if there's something we've missed and they still need to be addressed. - -## Contributing Pull Requests -PR's are even better than issues. -We gladly accept community pull requests. -There are a few necessary steps before we can accept a pull request: - -* [Open an issue](https://github.com/dachcom-digital/pimcore-members/issues) describing the problem that you are looking to solve in -your PR (if one is not already open), and your approach to solving it (no necessary for bug fixes - only feature contributions). -* [Fork us!](https://help.github.com/articles/fork-a-repo/) Code! Follow the coding standards PSR-1, PSR-2 and PSR-4. -* [Send a pull request](https://help.github.com/articles/using-pull-requests/) from your fork’s branch to our `master` branch. - -### Contributor License Agreement -The following terms are used throughout this agreement: - -* **You** - the person or legal entity including its affiliates asked to accept this agreement. An affiliate is any -entity that controls or is controlled by the legal entity, or is under common control with it. - -* **Project** - is an umbrella term that refers to any and all Members projects. - -* **Contribution** - any type of work that is submitted to a Project, including any modifications or additions to -existing work. - -* **Submitted** - conveyed to a Project via a pull request, commit, issue, or any form of electronic, written, or -verbal communication with Members, contributors or maintainers. - -#### 1. Grant of Copyright License. -Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, users and -to Members a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, -prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Your contributions and such -derivative works. Except for this license, You reserve all rights, title, and interest in your contributions. - -#### 2. Grant of Patent License. -Subject to the terms and conditions of this agreement, You grant to the Projects’ maintainers, contributors, users and -to dachcom-digital/dynamic-search a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer your contributions, where -such license applies only to those patent claims licensable by you that are necessarily infringed by your contribution -or by combination of your contribution with the project to which this contribution was submitted. - -If any entity institutes patent litigation - including cross-claim or counterclaim in a lawsuit - against You alleging -that your contribution or any project it was submitted to constitutes or is responsible for direct or contributory -patent infringement, then any patent licenses granted to that entity under this agreement shall terminate as of the -date such litigation is filed. - -#### 3. Source of Contribution. -Your contribution is either your original creation, based upon previous work that, to the best of your knowledge, is -covered under an appropriate open source license and you have the right under that license to submit that work with -modifications, whether created in whole or in part by you, or you have clearly identified the source of the contribution -and any license or other restriction (like related patents, trademarks, and license agreements) of which you are -personally aware. diff --git a/LICENSE.md b/LICENSE.md index b1a5fc8..08dd6c1 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,10 +1,14 @@ # License -Copyright (C) 2023 DACHCOM.DIGITAL +Copyright (C) DACHCOM.DIGITAL -This software is available under the GNU General Public License version 3 (GPLv3). +This software is available under two different licenses: +* GNU General Public License version 3 (GPLv3) as Pimcore Community Edition +* DACHCOM Commercial License (DCL) -### GNU General Public License version 3 (GPLv3) -If you decide to choose the GPLv3 license, you must comply with the following terms: +The default Dynamic Search Bundle license, without a valid DACHCOM Commercial License agreement, is the Open-Source GPLv3 license. + +## GNU General Public License version 3 (GPLv3) +If you decide to choose the GPLv3 license, you must comply with the following terms: This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,10 +17,14 @@ the Free Software Foundation, either version 3 of the License, or This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program. If not, see . +along with this program. If not, see . -[GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.en.html) \ No newline at end of file +## DACHCOM Commercial License (DCL) +Alternatively, commercial and supported versions of the program - also known as +Commercial Distributions - must be used in accordance with the terms and conditions +contained in a separate written agreement between you and DACHCOM.DIGITAL AG. +For more information about the Dynamic Search Bundle Commercial License (DCL) please contact dcdi@dachcom.ch. \ No newline at end of file diff --git a/README.md b/README.md index b8171d1..04059f2 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ ![Dynamic Search Schema](https://user-images.githubusercontent.com/700119/61217991-3c550c00-a711-11e9-9f62-6f1fb4ff0e3e.png) [![Software License](https://img.shields.io/badge/license-GPLv3-brightgreen.svg?style=flat-square)](LICENSE.md) +[![Software License](https://img.shields.io/badge/license-DCL-white.svg?style=flat-square&color=%23ff5c5c)](LICENSE.md) [![Latest Release](https://img.shields.io/packagist/v/dachcom-digital/dynamic-search.svg?style=flat-square)](https://packagist.org/packages/dachcom-digital/dynamic-search) [![Tests](https://img.shields.io/github/actions/workflow/status/dachcom-digital/pimcore-dynamic-search/.github/workflows/codeception.yml?branch=master&style=flat-square&logo=github&label=codeception)](https://github.com/dachcom-digital/pimcore-dynamic-search/actions?query=workflow%3ACodeception+branch%3Amaster) [![PhpStan](https://img.shields.io/github/actions/workflow/status/dachcom-digital/pimcore-dynamic-search/.github/workflows/php-stan.yml?branch=master&style=flat-square&logo=github&label=phpstan%20level%204)](https://github.com/dachcom-digital/pimcore-dynamic-search/actions?query=workflow%3A"PHP+Stan"+branch%3Amaster) @@ -10,7 +11,7 @@ ### Release Plan | Release | Supported Pimcore Versions | Supported Symfony Versions | Release Date | Maintained | Branch | |---------|----------------------------|----------------------------|--------------|----------------|---------------------------------------------------------------------------| -| **4.x** | `11.0` | `^6.2` | -- | Feature Branch | master | +| **4.x** | `11.0` | `^6.4` | 03.06.2024 | Feature Branch | master | | **3.x** | `11.0` | `^6.2` | 28.09.2023 | Bugfixes | [3.x](https://github.com/dachcom-digital/pimcore-dynamic-search/tree/3.x) | | **2.x** | `10.0` - `10.6` | `^5.4` | 19.12.2021 | No | [2.x](https://github.com/dachcom-digital/pimcore-dynamic-search/tree/2.x) | | **1.x** | `6.6` - `6.9` | `^4.4` | 18.04.2021 | No | [1.x](https://github.com/dachcom-digital/pimcore-dynamic-search/tree/1.x) | @@ -101,12 +102,15 @@ $ bin/console dynamic-search:run -v - [Backend UI](docs/50_BackendUI.md) - API +*** + +## Upgrade Info +Before updating, please [check our upgrade notes!](UPGRADE.md) + ## License **DACHCOM.DIGITAL AG**, Löwenhofstrasse 15, 9424 Rheineck, Schweiz [dachcom.com](https://www.dachcom.com), dcdi@dachcom.ch -Copyright © 2024 DACHCOM.DIGITAL. All rights reserved. +Copyright © 2025 DACHCOM.DIGITAL. All rights reserved. For licensing details please visit [LICENSE.md](LICENSE.md) -## Upgrade Info -Before updating, please [check our upgrade notes!](UPGRADE.md) diff --git a/UPGRADE.md b/UPGRADE.md index a2af307..df91261 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,7 @@ # Upgrade Notes +## 4.0.6 +- [LICENSE] Dual-License with GPL and Dachcom Commercial License (DCL) added ## 4.0.5 - index queue backend ui [#97](https://github.com/dachcom-digital/pimcore-dynamic-search/pull/97) ## 4.0.4 diff --git a/composer.json b/composer.json index 03a5eba..b8346c1 100755 --- a/composer.json +++ b/composer.json @@ -1,7 +1,10 @@ { "name": "dachcom-digital/dynamic-search", "type": "pimcore-bundle", - "license": "GPL-3.0-or-later", + "license": [ + "GPL-3.0-or-later", + "proprietary" + ], "description": "Pimcore Dynamic Search Bundle", "keywords": ["pimcore", "search"], "homepage": "https://github.com/dachcom-digital/pimcore-dynamic-search", @@ -9,7 +12,13 @@ { "name": "DACHCOM.DIGITAL Stefan Hagspiel", "email": "shagspiel@dachcom.ch", - "homepage": "http://www.dachcom.com/", + "homepage": "https://www.dachcom.com/", + "role": "Developer" + }, + { + "name": "DACHCOM.DIGITAL Ben Walch", + "email": "bwalch@dachcom.ch", + "homepage": "https://www.dachcom.com/", "role": "Developer" } ], @@ -41,8 +50,8 @@ "codeception/codeception": "^5.0", "codeception/module-symfony": "^3.1", "codeception/module-webdriver": "^4.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-symfony": "^1.0", - "symplify/easy-coding-standard": "^9.0" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-symfony": "^2.0", + "symplify/easy-coding-standard": "~12.2.0" } } diff --git a/ecs.php b/ecs.php index b5e05a8..169156b 100644 --- a/ecs.php +++ b/ecs.php @@ -1,162 +1,133 @@ parameters(); - $parameters->set(Option::SETS, [SetList::CLEAN_CODE, SetList::PSR_12]); - - $services = $containerConfigurator->services(); - - $services->set(Fixer\Basic\BracesFixer::class) - ->call('configure', [ - [ - 'allow_single_line_closure' => true, - ] - ]); - - $services->set(Fixer\PhpTag\BlankLineAfterOpeningTagFixer::class); - - $services->set(Fixer\Operator\ConcatSpaceFixer::class) - ->call('configure', [ - [ - 'spacing' => 'one', - ] - ]); - - $services->set(Fixer\Operator\NewWithBracesFixer::class); - - $services->set(Fixer\Phpdoc\PhpdocAlignFixer::class) - ->call('configure', [ - [ - 'tags' => ['method', 'param', 'property', 'return', 'throws', 'type', 'var'], - ] - ]); - - $services->set(Fixer\Operator\BinaryOperatorSpacesFixer::class) - ->call('configure', [ - [ - 'operators' => [ - '=' => 'single_space', - '=>' => 'align', - ] - ] - ]); - $services->set(Fixer\Operator\IncrementStyleFixer::class) - ->call('configure', [ - [ - 'style' => 'post', - ] - ]); - - $services->set(Fixer\Operator\UnaryOperatorSpacesFixer::class); - $services->set(Fixer\Whitespace\BlankLineBeforeStatementFixer::class); - $services->set(Fixer\CastNotation\CastSpacesFixer::class); - $services->set(Fixer\LanguageConstruct\DeclareEqualNormalizeFixer::class); - $services->set(Fixer\FunctionNotation\FunctionTypehintSpaceFixer::class); - $services->set(Fixer\Comment\SingleLineCommentStyleFixer::class) - ->call('configure', [ - [ - 'comment_types' => ['hash'], - ] - ]); - - $services->set(Fixer\ControlStructure\IncludeFixer::class); - $services->set(Fixer\CastNotation\LowercaseCastFixer::class); - $services->set(Fixer\ClassNotation\ClassAttributesSeparationFixer::class) - ->call('configure', [ - [ - 'elements' => [ - 'const' => 'none', - 'method' => 'one', - 'property' => 'none', - 'trait_import' => 'none' - ], - ] - ]); - - $services->set(Fixer\Casing\NativeFunctionCasingFixer::class); - $services->set(Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer::class); - $services->set(Fixer\Phpdoc\NoBlankLinesAfterPhpdocFixer::class); - $services->set(Fixer\Comment\NoEmptyCommentFixer::class); - $services->set(Fixer\Phpdoc\NoEmptyPhpdocFixer::class); - $services->set(Fixer\Phpdoc\PhpdocSeparationFixer::class); - $services->set(Fixer\Semicolon\NoEmptyStatementFixer::class); - $services->set(Fixer\Whitespace\ArrayIndentationFixer::class); - $services->set(Fixer\Whitespace\NoExtraBlankLinesFixer::class) - ->call('configure', [ - [ - 'tokens' => ['curly_brace_block', 'extra', 'parenthesis_brace_block', 'square_brace_block', 'throw', 'use'], - ] - ]); - - $services->set(Fixer\NamespaceNotation\NoLeadingNamespaceWhitespaceFixer::class); - $services->set(Fixer\ArrayNotation\NoMultilineWhitespaceAroundDoubleArrowFixer::class); - $services->set(Fixer\CastNotation\NoShortBoolCastFixer::class); - $services->set(Fixer\Semicolon\NoSinglelineWhitespaceBeforeSemicolonsFixer::class); - $services->set(Fixer\Whitespace\NoSpacesAroundOffsetFixer::class); - $services->set(Fixer\ControlStructure\NoTrailingCommaInListCallFixer::class); - $services->set(Fixer\ControlStructure\NoUnneededControlParenthesesFixer::class); - $services->set(Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer::class); - $services->set(Fixer\Whitespace\NoWhitespaceInBlankLineFixer::class); - $services->set(Fixer\ArrayNotation\NormalizeIndexBraceFixer::class); - $services->set(Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer::class); - $services->set(Fixer\Phpdoc\PhpdocAnnotationWithoutDotFixer::class); - $services->set(Fixer\Phpdoc\PhpdocIndentFixer::class); - $services->set(Fixer\Phpdoc\PhpdocInlineTagFixer::class); - $services->set(Fixer\Phpdoc\PhpdocNoAccessFixer::class); - $services->set(Fixer\Phpdoc\PhpdocNoEmptyReturnFixer::class); - $services->set(Fixer\Phpdoc\PhpdocNoPackageFixer::class); - $services->set(Fixer\Phpdoc\PhpdocNoUselessInheritdocFixer::class); - $services->set(Fixer\Phpdoc\PhpdocReturnSelfReferenceFixer::class); - $services->set(Fixer\Phpdoc\PhpdocScalarFixer::class); - $services->set(Fixer\Phpdoc\PhpdocSingleLineVarSpacingFixer::class); - $services->set(Fixer\Phpdoc\PhpdocSummaryFixer::class); - $services->set(Fixer\Phpdoc\PhpdocToCommentFixer::class); - $services->set(Fixer\Phpdoc\PhpdocTrimFixer::class); - $services->set(Fixer\Phpdoc\PhpdocTypesFixer::class); - $services->set(Fixer\Phpdoc\PhpdocVarWithoutNameFixer::class); - $services->set(Fixer\FunctionNotation\ReturnTypeDeclarationFixer::class); - $services->set(Fixer\ClassNotation\SelfAccessorFixer::class); - $services->set(Fixer\CastNotation\ShortScalarCastFixer::class); - $services->set(Fixer\StringNotation\SingleQuoteFixer::class); - $services->set(Fixer\Semicolon\SpaceAfterSemicolonFixer::class); - $services->set(Fixer\Operator\StandardizeNotEqualsFixer::class); - $services->set(Fixer\Operator\TernaryOperatorSpacesFixer::class); - $services->set(Fixer\ArrayNotation\TrimArraySpacesFixer::class); - $services->set(Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer::class); - - $services->set(Fixer\ClassNotation\ClassDefinitionFixer::class) - ->call('configure', [ - [ - 'single_line' => true, - ] - ]); - - $services->set(Fixer\Casing\MagicConstantCasingFixer::class); - $services->set(Fixer\FunctionNotation\MethodArgumentSpaceFixer::class); - $services->set(Fixer\Alias\NoMixedEchoPrintFixer::class) - ->call('configure', [ - [ - 'use' => 'echo', - ] - ]); - - $services->set(Fixer\Import\NoLeadingImportSlashFixer::class); - $services->set(Fixer\PhpUnit\PhpUnitFqcnAnnotationFixer::class); - $services->set(Fixer\Phpdoc\PhpdocNoAliasTagFixer::class); - $services->set(Fixer\NamespaceNotation\SingleBlankLineBeforeNamespaceFixer::class); - $services->set(Fixer\ClassNotation\SingleClassElementPerStatementFixer::class); - - # new since PHP-CS-Fixer 2.6 - $services->set(Fixer\ClassNotation\NoUnneededFinalMethodFixer::class); - $services->set(Fixer\Semicolon\SemicolonAfterInstructionFixer::class); - - # new since 2.11 - $services->set(Fixer\Operator\StandardizeIncrementFixer::class); -}; \ No newline at end of file +$header = <<
withSets([SetList::CLEAN_CODE, SetList::PSR_12]) + ->withConfiguredRule(Fixer\Comment\HeaderCommentFixer::class, [ + 'header' => $header, + 'comment_type' => 'comment' + ]) + ->withConfiguredRule(Fixer\Basic\BracesFixer::class, [ + 'allow_single_line_closure' => true, + ]) + ->withConfiguredRule(Fixer\Operator\ConcatSpaceFixer::class, [ + 'spacing' => 'one', + ]) + ->withConfiguredRule(Fixer\Phpdoc\PhpdocAlignFixer::class, [ + 'tags' => ['method', 'param', 'property', 'return', 'throws', 'type', 'var'], + ]) + ->withConfiguredRule(Fixer\Operator\BinaryOperatorSpacesFixer::class, [ + 'operators' => [ + '=' => 'single_space', + '=>' => 'align', + ] + ]) + ->withConfiguredRule(Fixer\Operator\IncrementStyleFixer::class, [ + 'style' => 'post', + ]) + ->withConfiguredRule(Fixer\ClassNotation\ClassAttributesSeparationFixer::class, [ + 'elements' => [ + 'const' => 'none', + 'method' => 'one', + 'property' => 'none', + 'trait_import' => 'none' + ], + ]) + ->withConfiguredRule(Fixer\ClassNotation\ClassDefinitionFixer::class, [ + 'single_line' => true, + ]) + ->withConfiguredRule(Fixer\Comment\SingleLineCommentStyleFixer::class, [ + 'comment_types' => ['hash'], + ]) + ->withConfiguredRule(Fixer\Alias\NoMixedEchoPrintFixer::class, [ + 'use' => 'echo', + ]) + ->withConfiguredRule(Fixer\Basic\NoTrailingCommaInSinglelineFixer::class, [ + 'elements' => ['array_destructuring'] + ]) + ->withConfiguredRule(Fixer\NamespaceNotation\BlankLinesBeforeNamespaceFixer::class, [ + 'min_line_breaks' => 2, + 'max_line_breaks' => 2 + ]) + ->withConfiguredRule(Fixer\Whitespace\TypeDeclarationSpacesFixer::class, [ + 'elements' => ['function'] + ]) + ->withConfiguredRule(Fixer\Whitespace\NoExtraBlankLinesFixer::class, [ + 'tokens' => ['curly_brace_block', 'extra', 'parenthesis_brace_block', 'square_brace_block', 'throw', 'use'], + ]) + ->withRules([ + Fixer\PhpTag\BlankLineAfterOpeningTagFixer::class, + Fixer\Operator\NewWithParenthesesFixer::class, + Fixer\Operator\UnaryOperatorSpacesFixer::class, + Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer::class, + Fixer\Operator\StandardizeNotEqualsFixer::class, + Fixer\Operator\TernaryOperatorSpacesFixer::class, + Fixer\Operator\StandardizeIncrementFixer::class, + Fixer\Whitespace\BlankLineBeforeStatementFixer::class, + Fixer\Whitespace\ArrayIndentationFixer::class, + Fixer\Whitespace\NoSpacesAroundOffsetFixer::class, + Fixer\Whitespace\NoWhitespaceInBlankLineFixer::class, + Fixer\CastNotation\CastSpacesFixer::class, + Fixer\CastNotation\LowercaseCastFixer::class, + Fixer\CastNotation\NoShortBoolCastFixer::class, + Fixer\CastNotation\ShortScalarCastFixer::class, + Fixer\LanguageConstruct\DeclareEqualNormalizeFixer::class, + Fixer\ControlStructure\IncludeFixer::class, + Fixer\ControlStructure\NoUnneededControlParenthesesFixer::class, + Fixer\Casing\NativeFunctionCasingFixer::class, + Fixer\Casing\MagicConstantCasingFixer::class, + Fixer\Comment\NoEmptyCommentFixer::class, + Fixer\NamespaceNotation\NoLeadingNamespaceWhitespaceFixer::class, + Fixer\Semicolon\NoEmptyStatementFixer::class, + Fixer\Semicolon\NoSinglelineWhitespaceBeforeSemicolonsFixer::class, + Fixer\Semicolon\SpaceAfterSemicolonFixer::class, + Fixer\Semicolon\SemicolonAfterInstructionFixer::class, + Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer::class, + Fixer\ArrayNotation\NormalizeIndexBraceFixer::class, + Fixer\ArrayNotation\NoMultilineWhitespaceAroundDoubleArrowFixer::class, + Fixer\ArrayNotation\TrimArraySpacesFixer::class, + Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer::class, + Fixer\Phpdoc\NoBlankLinesAfterPhpdocFixer::class, + Fixer\Phpdoc\PhpdocAnnotationWithoutDotFixer::class, + Fixer\Phpdoc\PhpdocIndentFixer::class, + Fixer\Phpdoc\PhpdocInlineTagNormalizerFixer::class, + Fixer\Phpdoc\PhpdocNoAccessFixer::class, + Fixer\Phpdoc\PhpdocNoEmptyReturnFixer::class, + Fixer\Phpdoc\PhpdocNoPackageFixer::class, + Fixer\Phpdoc\PhpdocNoUselessInheritdocFixer::class, + Fixer\Phpdoc\PhpdocReturnSelfReferenceFixer::class, + Fixer\Phpdoc\PhpdocScalarFixer::class, + Fixer\Phpdoc\PhpdocSingleLineVarSpacingFixer::class, + Fixer\Phpdoc\PhpdocSummaryFixer::class, + Fixer\Phpdoc\PhpdocToCommentFixer::class, + Fixer\Phpdoc\PhpdocTrimFixer::class, + Fixer\Phpdoc\PhpdocTypesFixer::class, + Fixer\Phpdoc\NoEmptyPhpdocFixer::class, + Fixer\Phpdoc\PhpdocSeparationFixer::class, + Fixer\Phpdoc\PhpdocVarWithoutNameFixer::class, + Fixer\Phpdoc\PhpdocNoAliasTagFixer::class, + Fixer\FunctionNotation\ReturnTypeDeclarationFixer::class, + Fixer\FunctionNotation\MethodArgumentSpaceFixer::class, + Fixer\StringNotation\SingleQuoteFixer::class, + Fixer\Import\NoUnusedImportsFixer::class, + Fixer\Import\NoLeadingImportSlashFixer::class, + Fixer\PhpUnit\PhpUnitFqcnAnnotationFixer::class, + Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer::class, + Fixer\ClassNotation\SelfAccessorFixer::class, + Fixer\ClassNotation\SingleClassElementPerStatementFixer::class, + Fixer\ClassNotation\NoUnneededFinalMethodFixer::class + ]); \ No newline at end of file diff --git a/phpstan.neon b/phpstan.neon index a64df8d..7c84790 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -5,8 +5,8 @@ parameters: - %currentWorkingDirectory%/vendor/pimcore/pimcore/stubs/dynamic-constants.php reportUnmatchedIgnoredErrors: false symfony: - container_xml_path: %currentWorkingDirectory%/var/cache/test/TestKernelTestDebugContainer.xml - constant_hassers: false + containerXmlPath: %currentWorkingDirectory%/var/cache/test/TestKernelTestDebugContainer.xml + constantHassers: false excludePaths: analyse: - src/Queue/Transport/ExtendedDoctrineConnection.php From 4473414f25a4eaafab112e10788f53c269370a0c Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Mon, 6 Jan 2025 14:50:36 +0100 Subject: [PATCH 2/3] fix phpstan issues --- src/Controller/SearchFrontendController.php | 7 ------- src/DependencyInjection/Configuration.php | 6 +++--- src/Document/Definition/DocumentDefinition.php | 2 +- src/Document/IndexDocument.php | 4 ++-- src/EventListener/PimcoreElementListener.php | 2 +- src/Filter/Definition/FilterDefinition.php | 4 ++-- src/Manager/OutputChannelManager.php | 4 ---- src/Paginator/Adapter/DynamicSearchAdapter.php | 2 +- src/Processor/OutputChannelProcessor.php | 2 +- src/Processor/ResourceDeletionProcessor.php | 10 ---------- src/Processor/ResourceModificationProcessor.php | 10 ---------- src/Provider/Extension/ProviderBundleLocator.php | 2 +- 12 files changed, 12 insertions(+), 43 deletions(-) diff --git a/src/Controller/SearchFrontendController.php b/src/Controller/SearchFrontendController.php index b3d6141..bdd79ce 100644 --- a/src/Controller/SearchFrontendController.php +++ b/src/Controller/SearchFrontendController.php @@ -132,13 +132,6 @@ protected function renderFrontendSearch(Request $request, string $outputChannelN $blocks = []; if ($outputChannelResult instanceof MultiOutputChannelResultInterface) { foreach ($outputChannelResult->getResults() as $resultBlockIdentifier => $resultBlock) { - if (!$resultBlock instanceof OutputChannelResultInterface) { - return $this->renderTemplate($viewName, [ - 'has_error' => true, - 'error_message' => sprintf('output channel "%s" for context "%s" should return OutputChannelResultInterface.', $outputChannelName, $contextName) - ]); - } - $blocks[$resultBlockIdentifier] = $this->prepareQueryVars($resultBlock); } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 66cf7af..0d20d9b 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -206,13 +206,13 @@ private function buildContextOutputChannelsNode(): NodeDefinition ->end() ->beforeNormalization() ->ifTrue(function ($values) { - return isset($values['multiple'], $values['runtime_options_builder']) && $values['multiple'] === true && $values['runtime_options_builder'] !== null; + return isset($values['multiple'], $values['runtime_options_builder']) && $values['multiple'] === true; }) ->thenInvalid('Unrecognized multi search option "runtime_options_builder"') ->end() ->beforeNormalization() ->ifTrue(function ($values) { - return isset($values['use_frontend_controller'], $values['view_name']) && $values['use_frontend_controller'] !== true && $values['view_name'] !== null; + return isset($values['use_frontend_controller'], $values['view_name']) && $values['use_frontend_controller'] !== true; }) ->thenInvalid('Unrecognized option "view_name" in a non frontend controller based output channel') ->end() @@ -223,7 +223,7 @@ private function buildContextOutputChannelsNode(): NodeDefinition return $values; } - if (isset($values['view_name']) && $values['view_name'] !== null) { + if (isset($values['view_name'])) { return $values; } diff --git a/src/Document/Definition/DocumentDefinition.php b/src/Document/Definition/DocumentDefinition.php index 1be37db..78c9637 100644 --- a/src/Document/Definition/DocumentDefinition.php +++ b/src/Document/Definition/DocumentDefinition.php @@ -79,7 +79,7 @@ public function addOptionFieldDefinition(array $definition): static public function getOptionFieldDefinitions(): array { - return !is_array($this->optionFieldDefinitions) ? [] : $this->optionFieldDefinitions; + return $this->optionFieldDefinitions; } public function addSimpleDocumentFieldDefinition(array $definition): static diff --git a/src/Document/IndexDocument.php b/src/Document/IndexDocument.php index 4279411..9c74c32 100644 --- a/src/Document/IndexDocument.php +++ b/src/Document/IndexDocument.php @@ -44,7 +44,7 @@ public function addIndexField(IndexFieldContainerInterface $fieldContainer): voi public function hasIndexFields(): bool { - return is_array($this->indexFields) && count($this->indexFields) > 0; + return count($this->indexFields) > 0; } /** @@ -57,7 +57,7 @@ public function getIndexFields(): array public function hasOptionFields(): bool { - return is_array($this->optionFields) && count($this->optionFields) > 0; + return count($this->optionFields) > 0; } /** diff --git a/src/EventListener/PimcoreElementListener.php b/src/EventListener/PimcoreElementListener.php index f6e9b76..e10f419 100644 --- a/src/EventListener/PimcoreElementListener.php +++ b/src/EventListener/PimcoreElementListener.php @@ -96,7 +96,7 @@ public function onObjectPostUpdate(DataObjectEvent $event): void return; } - /** @var DataObject\Concrete $object */ + /** @var ElementInterface $object */ $object = $event->getObject(); // @deprecated since 5.0: published/unpublished must be handled by project-specific resource validation diff --git a/src/Filter/Definition/FilterDefinition.php b/src/Filter/Definition/FilterDefinition.php index 056c284..78fbab5 100644 --- a/src/Filter/Definition/FilterDefinition.php +++ b/src/Filter/Definition/FilterDefinition.php @@ -8,7 +8,7 @@ class FilterDefinition implements FilterDefinitionInterface { - protected array $filterDefinitions; + protected array $filterDefinitions = []; public function addFilterDefinition(array $definition): static { @@ -36,6 +36,6 @@ public function addFilterDefinition(array $definition): static public function getFilterDefinitions(): array { - return !is_array($this->filterDefinitions) ? [] : $this->filterDefinitions; + return $this->filterDefinitions; } } diff --git a/src/Manager/OutputChannelManager.php b/src/Manager/OutputChannelManager.php index 1e7cf56..cba7083 100644 --- a/src/Manager/OutputChannelManager.php +++ b/src/Manager/OutputChannelManager.php @@ -30,10 +30,6 @@ public function getOutputChannel(ContextDefinitionInterface $contextDefinition, return null; } - if (!is_string($outputChannelServiceName)) { - throw new ProviderException(sprintf('Invalid requested index output channel service "%s"', $outputChannelName)); - } - if (!$this->outputChannelRegistry->hasOutputChannelService($outputChannelServiceName)) { return null; } diff --git a/src/Paginator/Adapter/DynamicSearchAdapter.php b/src/Paginator/Adapter/DynamicSearchAdapter.php index 2fac2b2..7d8447a 100644 --- a/src/Paginator/Adapter/DynamicSearchAdapter.php +++ b/src/Paginator/Adapter/DynamicSearchAdapter.php @@ -11,7 +11,7 @@ class DynamicSearchAdapter implements AdapterInterface { protected ContextDefinitionInterface $contextDefinition; protected string $outputChannelName; - protected DocumentNormalizerInterface $documentNormalizer; + protected ?DocumentNormalizerInterface $documentNormalizer = null; protected RawResultInterface $rawResult; protected int $itemCountPerPage; protected int $currentPageNumber; diff --git a/src/Processor/OutputChannelProcessor.php b/src/Processor/OutputChannelProcessor.php index 10749c4..9f67b5c 100644 --- a/src/Processor/OutputChannelProcessor.php +++ b/src/Processor/OutputChannelProcessor.php @@ -189,7 +189,7 @@ protected function buildMulti( $subOutputChannelIdentifier = $searchContainer->getIdentifier(); $filter = $filters[$subOutputChannelIdentifier]; - /** @var SubOutputChannelContextInterface $subOutputChannelContext */ + /** @var OutputChannelContext $subOutputChannelContext */ $subOutputChannelContext = $subContexts[$subOutputChannelIdentifier]; if (!array_key_exists($subOutputChannelIdentifier, $outputChannelBlocks)) { diff --git a/src/Processor/ResourceDeletionProcessor.php b/src/Processor/ResourceDeletionProcessor.php index 7692932..bfeb264 100644 --- a/src/Processor/ResourceDeletionProcessor.php +++ b/src/Processor/ResourceDeletionProcessor.php @@ -32,16 +32,6 @@ public function process(ContextDefinitionInterface $contextDefinition, $resource } foreach ($normalizedResourceStack as $normalizedResource) { - if (!$normalizedResource instanceof NormalizedDataResourceInterface) { - $this->logger->error( - sprintf('Normalized resource needs to be instance of %s. Skipping...', NormalizedDataResourceInterface::class), - $contextDefinition->getDataProviderName(), - $contextDefinition->getName() - ); - - continue; - } - $resourceMeta = $normalizedResource->getResourceMeta(); if (empty($resourceMeta->getDocumentId())) { $this->logger->error( diff --git a/src/Processor/ResourceModificationProcessor.php b/src/Processor/ResourceModificationProcessor.php index 6fd5ff0..1c7e0c9 100644 --- a/src/Processor/ResourceModificationProcessor.php +++ b/src/Processor/ResourceModificationProcessor.php @@ -41,16 +41,6 @@ public function process(ContextDefinitionInterface $contextDefinition, $resource } foreach ($normalizedResourceStack as $normalizedResource) { - if (!$normalizedResource instanceof NormalizedDataResourceInterface) { - $this->logger->error( - sprintf('Normalized resource needs to be instance of %s. Skipping...', NormalizedDataResourceInterface::class), - $contextDefinition->getDataProviderName(), - $contextDefinition->getName() - ); - - continue; - } - $resourceMeta = $normalizedResource->getResourceMeta(); if (empty($resourceMeta->getDocumentId())) { $this->logger->error( diff --git a/src/Provider/Extension/ProviderBundleLocator.php b/src/Provider/Extension/ProviderBundleLocator.php index c952769..da0bd3e 100644 --- a/src/Provider/Extension/ProviderBundleLocator.php +++ b/src/Provider/Extension/ProviderBundleLocator.php @@ -77,7 +77,7 @@ protected function findBundlesInPaths(array $paths): array protected function processBundleClass(?string $bundle, array &$result): void { - if (empty($bundle) || !is_string($bundle)) { + if (empty($bundle)) { return; } From 3bf6ddce598a1e9c01b875ff6d7226ad9c394254 Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Mon, 6 Jan 2025 14:55:31 +0100 Subject: [PATCH 3/3] fix phpstan issues --- src/EventListener/PimcoreElementListener.php | 1 - src/Processor/OutputChannelProcessor.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/EventListener/PimcoreElementListener.php b/src/EventListener/PimcoreElementListener.php index e10f419..26928b6 100644 --- a/src/EventListener/PimcoreElementListener.php +++ b/src/EventListener/PimcoreElementListener.php @@ -96,7 +96,6 @@ public function onObjectPostUpdate(DataObjectEvent $event): void return; } - /** @var ElementInterface $object */ $object = $event->getObject(); // @deprecated since 5.0: published/unpublished must be handled by project-specific resource validation diff --git a/src/Processor/OutputChannelProcessor.php b/src/Processor/OutputChannelProcessor.php index 9f67b5c..15634e6 100644 --- a/src/Processor/OutputChannelProcessor.php +++ b/src/Processor/OutputChannelProcessor.php @@ -189,7 +189,7 @@ protected function buildMulti( $subOutputChannelIdentifier = $searchContainer->getIdentifier(); $filter = $filters[$subOutputChannelIdentifier]; - /** @var OutputChannelContext $subOutputChannelContext */ + /** @var SubOutputChannelContext $subOutputChannelContext */ $subOutputChannelContext = $subContexts[$subOutputChannelIdentifier]; if (!array_key_exists($subOutputChannelIdentifier, $outputChannelBlocks)) {