diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index af9213f..2b056dd 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -1,70 +1,123 @@ name: PHP tests on: [push, pull_request] jobs: - # Check there is no syntax errors in the project - php-linter: - name: PHP Syntax check 5.6 => 8.1 - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - - - name: PHP syntax checker 5.6 - uses: prestashop/github-action-php-lint/5.6@master - - - name: PHP syntax checker 7.2 - uses: prestashop/github-action-php-lint/7.2@master - - - name: PHP syntax checker 7.3 - uses: prestashop/github-action-php-lint/7.3@master - - - name: PHP syntax checker 7.4 - uses: prestashop/github-action-php-lint/7.4@master - - - name: PHP syntax checker 8.0 - uses: prestashop/github-action-php-lint/8.0@master - - - name: PHP syntax checker 8.1 - uses: prestashop/github-action-php-lint/8.1@master - - # Check the PHP code follow the coding standards - php-cs-fixer: - name: PHP-CS-Fixer - runs-on: ubuntu-latest - steps: - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - - - name: Checkout - uses: actions/checkout@v5 - - - name: Install dependencies - run: composer install - - - name: Run PHP-CS-Fixer - run: ./vendor/bin/php-cs-fixer fix --dry-run --diff --using-cache=no --diff-format udiff - - # Run PHPStan against the module and a PrestaShop release - phpstan: - name: PHPStan - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - presta-versions: ['1.7.6', '1.7.7', '1.7.8', 'latest'] - steps: - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '7.4' - - - name: Checkout - uses: actions/checkout@v5 - - - run: composer install - - # Docker images prestashop/prestashop may be used, even if the shop remains uninstalled - - name: Execute PHPStan on PrestaShop (Tag ${{ matrix.presta-versions }}) - run: ./tests/phpstan.sh ${{ matrix.presta-versions }} + php-linter: + name: PHP Syntax check 7.2 => 8.5 + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: PHP syntax checker 7.2 + uses: prestashop/github-action-php-lint/7.2@master + + - name: PHP syntax checker 7.3 + uses: prestashop/github-action-php-lint/7.3@master + + - name: PHP syntax checker 7.4 + uses: prestashop/github-action-php-lint/7.4@master + + - name: PHP syntax checker 8.0 + uses: prestashop/github-action-php-lint/8.0@master + + - name: PHP syntax checker 8.1 + uses: prestashop/github-action-php-lint/8.1@master + + - name: PHP syntax checker 8.2 + uses: prestashop/github-action-php-lint/8.2@master + + - name: PHP syntax checker 8.3 + uses: prestashop/github-action-php-lint/8.3@master + + - name: PHP syntax checker 8.4 + uses: prestashop/github-action-php-lint/8.4@master + + - name: PHP syntax checker 8.5 + uses: prestashop/github-action-php-lint/8.5@master + + # Check the PHP code follow the coding standards + php-cs-fixer: + name: PHP-CS-Fixer + runs-on: ubuntu-latest + steps: + - name: Run PHP-CS-Fixer + uses: PrestaShop/.github/.github/actions/php-ci/php-cs@master + with: + php-version: '7.4' + + # Run PHPStan against the module (PHP 7.2 – 8.1) + phpstan-74: + name: PHPStan (PHP 7.2 - 8.1) + runs-on: ubuntu-latest + strategy: + matrix: + presta_version: ['8.2.x'] + php_version: ['7.2', '8.1'] + fail-fast: false + env: + PHPRC: ${{ github.workspace }}/${{ github.event.repository.name }}/.phpstan-php-ini + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + path: ${{ github.event.repository.name }} + + - name: Prepare PHP env for PrestaShop 8 (define constants before any bootstrap) + run: | + mkdir -p ${{ github.event.repository.name }}/.phpstan-php-ini + { + echo "auto_prepend_file=$GITHUB_WORKSPACE/${{ github.event.repository.name }}/tests/php/phpstan/prepend-constants.php" + echo "memory_limit=512M" + } > ${{ github.event.repository.name }}/.phpstan-php-ini/php.ini + + - name: Run PHPStan + uses: PrestaShop/.github/.github/actions/php-ci/phpstan@master + with: + php-version: ${{ matrix.php_version }} + presta-version: ${{ matrix.presta_version }} + module-name: ${{ github.event.repository.name }} + phpstan-level: '5' + phpstan-config: tests/php/phpstan/phpstan-${{ matrix.presta_version }}.neon + phpstan-version: '^0.12' + composer-version: '2.2.18' + + # Run PHPStan against the module (PHP 8.1 – 8.5) + phpstan: + name: PHPStan (PHP 8.1 - 8.5) + runs-on: ubuntu-latest + strategy: + matrix: + include: + # PrestaShop 9.0.x supports PHP 8.1 up to 8.4 (8.5 is not supported) + - { presta_version: '9.0.3', php_version: '8.1' } + - { presta_version: '9.0.3', php_version: '8.4' } + # PrestaShop 9.1.x and develop support PHP 8.1 up to 8.5 + - { presta_version: '9.1.x', php_version: '8.1' } + - { presta_version: '9.1.x', php_version: '8.5' } + - { presta_version: 'develop', php_version: '8.1' } + - { presta_version: 'develop', php_version: '8.5' } + fail-fast: false + env: + PHPRC: ${{ github.workspace }}/${{ github.event.repository.name }}/.phpstan-php-ini + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + path: ${{ github.event.repository.name }} + + - name: Prepare PHP env for PrestaShop ${{ matrix.presta_version }} (define constants before any bootstrap) + run: | + mkdir -p ${{ github.event.repository.name }}/.phpstan-php-ini + { + echo "auto_prepend_file=$GITHUB_WORKSPACE/${{ github.event.repository.name }}/tests/php/phpstan/prepend-constants.php" + echo "memory_limit=512M" + } > ${{ github.event.repository.name }}/.phpstan-php-ini/php.ini + + - name: Run PHPStan + uses: PrestaShop/.github/.github/actions/php-ci/phpstan@master + with: + php-version: ${{ matrix.php_version }} + presta-version: ${{ matrix.presta_version }} + module-name: ${{ github.event.repository.name }} + phpstan-level: '5' + phpstan-config: tests/php/phpstan/phpstan-${{ matrix.presta_version }}.neon diff --git a/config.xml b/config.xml index 973dbc4..a4820d0 100755 --- a/config.xml +++ b/config.xml @@ -2,7 +2,7 @@ statsbestproducts - + diff --git a/statsbestproducts.php b/statsbestproducts.php index 42cb550..8d528b5 100644 --- a/statsbestproducts.php +++ b/statsbestproducts.php @@ -29,7 +29,6 @@ class statsbestproducts extends ModuleGrid { - private $html = null; private $query = null; private $columns = null; private $default_sort_column = null; @@ -41,7 +40,7 @@ public function __construct() { $this->name = 'statsbestproducts'; $this->tab = 'administration'; - $this->version = '2.1.0'; + $this->version = '3.0.0'; $this->author = 'PrestaShop'; $this->need_instance = 0; @@ -111,7 +110,7 @@ public function __construct() $this->displayName = $this->trans('Best-selling products', [], 'Modules.Statsbestproducts.Admin'); $this->description = $this->trans('Enrich your stats with a small list of your best-sellers to better know your customers.', [], 'Modules.Statsbestproducts.Admin'); - $this->ps_versions_compliancy = ['min' => '1.7.6.0', 'max' => _PS_VERSION_]; + $this->ps_versions_compliancy = ['min' => '8.2.0', 'max' => _PS_VERSION_]; } public function install() @@ -177,7 +176,7 @@ public function getData() if (Validate::IsName($this->_sort)) { $this->query .= ' ORDER BY `' . bqSQL($this->_sort) . '`'; - if (isset($this->_direction) && Validate::isSortDirection($this->_direction)) { + if (!empty($this->_direction) && Validate::isSortDirection($this->_direction)) { $this->query .= ' ' . $this->_direction; } } @@ -186,6 +185,7 @@ public function getData() $this->query .= ' LIMIT ' . (int) $this->_start . ', ' . (int) $this->_limit; } + /** @var array> $values */ $values = Db::getInstance((bool) _PS_USE_SQL_SLAVE_)->executeS($this->query); foreach ($values as &$value) { $value['avgPriceSold'] = $this->context->getCurrentLocale()->formatPrice($value['avgPriceSold'], $currency->iso_code); diff --git a/tests/php/phpstan/index.php b/tests/php/phpstan/index.php new file mode 100644 index 0000000..63eec81 --- /dev/null +++ b/tests/php/phpstan/index.php @@ -0,0 +1,9 @@ +