From a92aa829c017dcacb83448bb2908e6f2985a5c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20Felix=20=C5=A0ulc?= Date: Tue, 24 Jan 2023 12:18:18 +0100 Subject: [PATCH] App: upgrade to PHP 8.1, phpstan level 9 --- app/Model/Utils/DateTime.php | 20 +++++++++++++++++ app/Model/Utils/Types.php | 28 ++++++++++++++++++++++++ app/Presenters/AbstractPresenter.php | 4 +--- app/Presenters/BasicPresenter.php | 4 ++-- app/Presenters/ColumnsPresenter.php | 13 ++++++----- app/Presenters/EditPresenter.php | 3 ++- app/Presenters/FiltersPresenter.php | 4 ++-- app/Presenters/LocalizationPresenter.php | 4 ++-- app/Presenters/TreeViewPresenter.php | 6 ++--- app/UI/TEmptyLayoutView.php | 2 +- composer.json | 2 +- phpstan.neon | 10 ++++++++- 12 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 app/Model/Utils/DateTime.php create mode 100644 app/Model/Utils/Types.php diff --git a/app/Model/Utils/DateTime.php b/app/Model/Utils/DateTime.php new file mode 100644 index 0000000..7ffa6fb --- /dev/null +++ b/app/Model/Utils/DateTime.php @@ -0,0 +1,20 @@ + $newStatus]; diff --git a/app/Presenters/BasicPresenter.php b/app/Presenters/BasicPresenter.php index e6c8cac..805d0dc 100644 --- a/app/Presenters/BasicPresenter.php +++ b/app/Presenters/BasicPresenter.php @@ -2,8 +2,8 @@ namespace App\Presenters; +use App\Model\Utils\DateTime; use App\UI\TEmptyLayoutView; -use DateTime; use Dibi\Row; use Ublaboo\DataGrid\DataGrid; @@ -34,7 +34,7 @@ public function createComponentGrid(): DataGrid ->setFormat('j. n. Y'); $grid->addColumnNumber('age', 'Age') - ->setRenderer(fn (Row $row): int => $row['birth_date']->diff(new DateTime())->y); + ->setRenderer(fn (Row $row): ?int => DateTime::fromSafe($row->asDateTime('birth_date'))?->diff(new DateTime())->y); return $grid; } diff --git a/app/Presenters/ColumnsPresenter.php b/app/Presenters/ColumnsPresenter.php index e17879e..9303c50 100644 --- a/app/Presenters/ColumnsPresenter.php +++ b/app/Presenters/ColumnsPresenter.php @@ -2,8 +2,9 @@ namespace App\Presenters; +use App\Model\Utils\DateTime; +use App\Model\Utils\Types; use App\UI\TEmptyLayoutView; -use DateTime; use Dibi\Fluent; use Dibi\Row; use Ublaboo\DataGrid\AggregationFunction\IAggregationFunction; @@ -61,7 +62,7 @@ public function createComponentGrid(): DataGrid ->setSortable(); $grid->addColumnNumber('age', 'Age') - ->setRenderer(fn (Row $row): int => $row['birth_date']->diff(new DateTime())->y); + ->setRenderer(fn (Row $row): ?int => DateTime::fromSafe($row->asDateTime('birth_date'))?->diff(new DateTime())->y); $grid->setColumnsHideable(); @@ -103,15 +104,15 @@ public function processDataSource(mixed $dataSource): void throw new UnexpectedValueException(); } - $this->idsSum = (int) $dataSource->getConnection() + $this->idsSum = Types::forceInt($dataSource->getConnection() ->select('SUM([id])') ->from($dataSource, '_') - ->fetchSingle(); + ->fetchSingle()); - $this->avgAge = round((float) $dataSource->getConnection() + $this->avgAge = round(Types::forceNumber($dataSource->getConnection() ->select('AVG(YEAR([birth_date]))') ->from($dataSource, '_') - ->fetchSingle()); + ->fetchSingle())); } public function renderResult(string $key): string diff --git a/app/Presenters/EditPresenter.php b/app/Presenters/EditPresenter.php index 70fd60b..7299941 100644 --- a/app/Presenters/EditPresenter.php +++ b/app/Presenters/EditPresenter.php @@ -2,6 +2,7 @@ namespace App\Presenters; +use App\Model\Utils\DateTime; use App\UI\TEmptyLayoutView; use Dibi\Row; use Nette\Forms\Container; @@ -67,7 +68,7 @@ public function createComponentGrid(): DataGrid $container->setDefaults([ 'id' => $row['id'], 'name' => $row['name'], - 'birth_date' => $row['birth_date']->format('j. n. Y'), + 'birth_date' => DateTime::fromSafe($row->asDateTime('birth_date'))?->format('j. n. Y'), 'link' => $row['name'], 'status' => $row['status'], ]); diff --git a/app/Presenters/FiltersPresenter.php b/app/Presenters/FiltersPresenter.php index 3477a63..816e4b4 100644 --- a/app/Presenters/FiltersPresenter.php +++ b/app/Presenters/FiltersPresenter.php @@ -2,8 +2,8 @@ namespace App\Presenters; +use App\Model\Utils\DateTime; use App\UI\TEmptyLayoutView; -use DateTime; use Dibi\Fluent; use Dibi\Row; use Nette\Utils\ArrayHash; @@ -48,7 +48,7 @@ public function createComponentGrid(): DataGrid ->setFilterDateRange(); $grid->addColumnNumber('age', 'Age') - ->setRenderer(fn (Row $row): int => $row['birth_date']->diff(new DateTime())->y) + ->setRenderer(fn (Row $row): ?int => DateTime::fromSafe($row->asDateTime('birth_date'))?->diff(new DateTime())->y) ->setFilterRange() ->setCondition(function (Fluent $fluent, ArrayHash $values): void { if ((bool) $values['from']) { diff --git a/app/Presenters/LocalizationPresenter.php b/app/Presenters/LocalizationPresenter.php index 9591b20..174d71a 100644 --- a/app/Presenters/LocalizationPresenter.php +++ b/app/Presenters/LocalizationPresenter.php @@ -2,8 +2,8 @@ namespace App\Presenters; +use App\Model\Utils\DateTime; use App\UI\TEmptyLayoutView; -use DateTime; use Dibi\Row; use Ublaboo\DataGrid\DataGrid; use Ublaboo\DataGrid\Localization\SimpleTranslator; @@ -35,7 +35,7 @@ public function createComponentGrid(): DataGrid ->setFormat('j. n. Y'); $grid->addColumnNumber('age', 'Age') - ->setRenderer(fn (Row $row): int => $row['birth_date']->diff(new DateTime())->y); + ->setRenderer(fn (Row $row): ?int => DateTime::fromSafe($row->asDateTime('birth_date'))?->diff(new DateTime())->y); $translator = new SimpleTranslator([ 'ublaboo_datagrid.no_item_found_reset' => 'Žádné položky nenalezeny. Filtr můžete vynulovat', diff --git a/app/Presenters/TreeViewPresenter.php b/app/Presenters/TreeViewPresenter.php index 0770249..9a582a7 100644 --- a/app/Presenters/TreeViewPresenter.php +++ b/app/Presenters/TreeViewPresenter.php @@ -71,7 +71,7 @@ public function createComponentGrid(): DataGrid /** * @return Fluent */ - public function getChildren(mixed $parentCategoryId): Fluent + public function getChildren(int $parentCategoryId): Fluent { $join = $this->dibiConnection->select('COUNT(id) AS count, parent_category_id') ->from('categories') @@ -82,10 +82,10 @@ public function getChildren(mixed $parentCategoryId): Fluent ->from('categories', 'c') ->leftJoin($join, 'c_b') ->on('c_b.parent_category_id = c.id') - ->where('c.parent_category_id = ?', (int) $parentCategoryId); + ->where('c.parent_category_id = ?', $parentCategoryId); } - public function handleSort(mixed $itemId, mixed $prevId, mixed $nextId, mixed $parentId): void + public function handleSort(int $itemId, int $prevId, int $nextId, int $parentId): void { $this->flashMessage( sprintf( diff --git a/app/UI/TEmptyLayoutView.php b/app/UI/TEmptyLayoutView.php index 1d367d1..f239aef 100644 --- a/app/UI/TEmptyLayoutView.php +++ b/app/UI/TEmptyLayoutView.php @@ -17,7 +17,7 @@ public function renderDefault(): void { $request = $this->getRequest(); - if ($request->getParameter('inFrame') === true) { + if ($request !== null && $request->getParameter('inFrame') === true) { $this->setLayout(__DIR__ . '/../templates/@layout.inFrame.latte'); } } diff --git a/composer.json b/composer.json index aca1d92..1b92d4d 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "license": "MIT", "type": "project", "require": { - "php": ">= 8.0", + "php": ">= 8.1", "nette/application": "^3.1.0", "nette/bootstrap": "^3.2.0", diff --git a/phpstan.neon b/phpstan.neon index 7c5cbd9..5a9c7c2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -6,7 +6,15 @@ includes: - vendor/phpstan/phpstan-dibi/extension.neon parameters: - level: 8 + level: 9 + phpVersion: 80100 + + tmpDir: %currentWorkingDirectory%/temp/phpstan paths: - app + + fileExtensions: + - php + + ignoreErrors: