diff --git a/app/routes.php b/app/routes.php index b41433a1..0f6cee9f 100644 --- a/app/routes.php +++ b/app/routes.php @@ -8,6 +8,7 @@ use App\Application\Action\Package\ViewPackageAction; use App\Application\Action\Package\ViewPackageBadgeAction; use App\Application\Action\System\HealthAction; +use App\Application\Action\Vendor\ListPackagesAction as ListVendorPackagesAction; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Slim\App; @@ -33,6 +34,9 @@ function (ServerRequestInterface $request, ResponseInterface $response): Respons function (Group $group) { $group ->get('', RedirectListPackagesAction::class); + $group + ->get('/{vendor}', ListVendorPackagesAction::class) + ->setName('listVendorPackages'); $group ->get('/{vendor}/{project}/status.svg', RedirectPackageBadgeAction::class) ->setName('redirectPackageBadge'); diff --git a/resources/views/vendor/list.twig b/resources/views/vendor/list.twig new file mode 100644 index 00000000..38f59769 --- /dev/null +++ b/resources/views/vendor/list.twig @@ -0,0 +1,30 @@ +{% extends "template.twig" %} + +{% block title %}Keep your dependencies up-to-date - PHP.Package.Health{% endblock %} + +{% block hero_type %}is-info{% endblock %} +{% block hero_title %}Keep your dependencies up-to-date{% endblock %} + +{% block hero_subtitle %}Package.Health uses semantic versioning to detect outdated or insecure dependencies in your project's composer.json.{% endblock %} + +{% block content %} +

Packages from {{ vendor }}

+ + + + + + + + + + {% for package in packages %} + + + + + + {% endfor %} + +
PackageStatus
{{ package.name }}{{ package.description }}Dependency Badge
+{% endblock %} diff --git a/src/Application/Action/Vendor/ListPackagesAction.php b/src/Application/Action/Vendor/ListPackagesAction.php new file mode 100644 index 00000000..0bcba403 --- /dev/null +++ b/src/Application/Action/Vendor/ListPackagesAction.php @@ -0,0 +1,66 @@ +packageRepository = $packageRepository; + } + + protected function action(): ResponseInterface { + $vendor = $this->resolveStringArg('vendor'); + $packages = $this->packageRepository->findMatching(['name' => "$vendor/%"]); + $twig = Twig::fromRequest($this->request); + + $this->logger->debug('Vendor package list was viewed.'); + + // if (count($packages)) { + // $lastModifiedList = array_map( + // function (Package $package): int { + // $lastModified = $package->getUpdatedAt() ?? $package->getCreatedAt(); + + // return $lastModified->getTimestamp(); + // }, + // $packages + // ); + + // $lastModified = max($lastModifiedList); + // $this->response = $this->cacheProvider->withLastModified( + // $this->response, + // $lastModified + // ); + // $this->response = $this->cacheProvider->withEtag( + // $this->response, + // hash('sha1', (string)$lastModified) + // ); + // } + + return $this->respondWithHtml( + $twig->fetch( + 'vendor/list.twig', + [ + 'vendor' => $vendor, + 'packages' => $packages, + 'app' => [ + 'version' => $_ENV['VERSION'] + ] + ] + ) + ); + } +}