diff --git a/.gitignore b/.gitignore index bdc523530..55cc0557b 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,5 @@ webpack-stats.json .phpunit.result.cache .DS_Store phpstan.neon -esbuild-meta.json \ No newline at end of file +esbuild-meta.json +.phpactor.json diff --git a/app/Activity/Models/Activity.php b/app/Activity/Models/Activity.php index 9e4cb7858..5fad9f1d3 100644 --- a/app/Activity/Models/Activity.php +++ b/app/Activity/Models/Activity.php @@ -9,6 +9,7 @@ use BookStack\Users\Models\User; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphTo; +use Illuminate\Support\Carbon; use Illuminate\Support\Str; /** diff --git a/app/Entities/Tools/PageContent.php b/app/Entities/Tools/PageContent.php index 552427f46..6a89ff626 100644 --- a/app/Entities/Tools/PageContent.php +++ b/app/Entities/Tools/PageContent.php @@ -62,6 +62,7 @@ class PageContent // Get all img elements with image data blobs $imageNodes = $doc->queryXPath('//img[contains(@src, \'data:image\')]'); + /** @var DOMElement $imageNode */ foreach ($imageNodes as $imageNode) { $imageSrc = $imageNode->getAttribute('src'); $newUrl = $this->base64ImageUriToUploadedImageUrl($imageSrc, $updater); diff --git a/app/Entities/Tools/PageIncludeParser.php b/app/Entities/Tools/PageIncludeParser.php index f1fbfba03..dad7c29e6 100644 --- a/app/Entities/Tools/PageIncludeParser.php +++ b/app/Entities/Tools/PageIncludeParser.php @@ -72,8 +72,8 @@ class PageIncludeParser $includeTags = []; /** @var DOMNode $node */ - /** @var DOMNode $childNode */ foreach ($includeHosts as $node) { + /** @var DOMNode $childNode */ foreach ($node->childNodes as $childNode) { if ($childNode->nodeName === '#text') { array_push($includeTags, ...$this->splitTextNodesAtTags($childNode)); @@ -174,8 +174,8 @@ class PageIncludeParser $parentNode->parentNode->insertBefore($parentClone, $parentNode); $parentClone->removeAttribute('id'); - /** @var DOMNode $child */ for ($i = 0; $i < $splitPos; $i++) { + /** @var DOMNode $child */ $child = $children[$i]; $parentClone->appendChild($child); } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 6a4420056..61e126327 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -9,6 +9,7 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Http\Exceptions\PostTooLargeException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Http\Response; use Illuminate\Validation\ValidationException; use Symfony\Component\ErrorHandler\Error\FatalError; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; @@ -42,7 +43,7 @@ class Handler extends ExceptionHandler * If it returns a response, that will be provided back to the request * upon an out of memory event. * - * @var ?callable + * @var ?callable(): ?Response */ protected $onOutOfMemory = null; diff --git a/app/Permissions/PermissionApplicator.php b/app/Permissions/PermissionApplicator.php index 7b62ac0a7..ce4a543fd 100644 --- a/app/Permissions/PermissionApplicator.php +++ b/app/Permissions/PermissionApplicator.php @@ -25,7 +25,7 @@ class PermissionApplicator /** * Checks if an entity has a restriction set upon it. * - * @param HasCreatorAndUpdater|HasOwner $ownable + * @param Model&(HasCreatorAndUpdater|HasOwner) $ownable */ public function checkOwnableUserAccess(Model $ownable, string $permission): bool { @@ -160,10 +160,9 @@ class PermissionApplicator $joinQuery = function ($query) use ($entityProvider) { $first = true; - /** @var Builder $query */ foreach ($entityProvider->all() as $entity) { + /** @var Builder $query */ $entityQuery = function ($query) use ($entity) { - /** @var Builder $query */ $query->select(['id', 'deleted_at']) ->selectRaw("'{$entity->getMorphClass()}' as type") ->from($entity->getTable()) diff --git a/app/References/ReferenceUpdater.php b/app/References/ReferenceUpdater.php index 82505e8ab..248937339 100644 --- a/app/References/ReferenceUpdater.php +++ b/app/References/ReferenceUpdater.php @@ -42,6 +42,7 @@ class ReferenceUpdater $chapters = $entity->chapters()->get(['id']); $children = $pages->concat($chapters); foreach ($children as $bookChild) { + /** @var Reference[] $childRefs */ $childRefs = $this->referenceFetcher->getPageReferencesToEntity($bookChild)->values()->all(); array_push($references, ...$childRefs); } diff --git a/app/Theming/ThemeEvents.php b/app/Theming/ThemeEvents.php index 3d8cd4167..ff9e86e16 100644 --- a/app/Theming/ThemeEvents.php +++ b/app/Theming/ThemeEvents.php @@ -101,7 +101,7 @@ class ThemeEvents * Called when standard web (browser/non-api) app routes are registered. * Provides an app router, so you can register your own web routes. * - * @param \Illuminate\Routing\Router + * @param \Illuminate\Routing\Router $router */ const ROUTES_REGISTER_WEB = 'routes_register_web'; @@ -111,7 +111,7 @@ class ThemeEvents * These are routes that typically require login to access (unless the instance is made public). * Provides an app router, so you can register your own web routes. * - * @param \Illuminate\Routing\Router + * @param \Illuminate\Routing\Router $router */ const ROUTES_REGISTER_WEB_AUTH = 'routes_register_web_auth'; diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 936d5a91a..5fec36c2f 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,5 +1,5 @@ includes: - - ./vendor/nunomaduro/larastan/extension.neon + - ./vendor/larastan/larastan/extension.neon parameters: