diff --git a/lib/MetaCPAN/Web/Controller/Permission.pm b/lib/MetaCPAN/Web/Controller/Permission.pm index 5bae02c567..669646c1df 100644 --- a/lib/MetaCPAN/Web/Controller/Permission.pm +++ b/lib/MetaCPAN/Web/Controller/Permission.pm @@ -1,6 +1,7 @@ package MetaCPAN::Web::Controller::Permission; use Moose; +use List::Util qw(uniq); use namespace::autoclean; BEGIN { extends 'MetaCPAN::Web::Controller' } @@ -15,6 +16,18 @@ sub distribution : Local Args(1) { my ( $self, $c, $distribution ) = @_; $c->forward( 'get', $c, [ 'distribution', $distribution ] ); + + my $modules = $c->stash->{permission}; + my $total_modules = scalar @$modules; + my %num_modules_of; + for my $module (@$modules) { + ++$num_modules_of{ $module->{owner} }; + ++$num_modules_of{$_} for @{ $module->{co_maintainers} }; + } + my @releaser = sort grep { $num_modules_of{$_} == $total_modules } + keys %num_modules_of; + + $c->stash( releaser => \@releaser ); } sub module : Local Args(1) { @@ -38,6 +51,12 @@ sub get : Private { } $c->stash( { search_term => $name, permission => $perms } ); + + return if $type eq 'module'; + $c->stash( { + num_owners => scalar( uniq map $_->{owner}, @$perms ), + num_comaints => scalar( uniq map @{ $_->{co_maintainers} }, @$perms ), + } ); } __PACKAGE__->meta->make_immutable; diff --git a/root/inc/permission.html b/root/inc/permission.html index 3527c11cd8..dd8a22818c 100644 --- a/root/inc/permission.html +++ b/root/inc/permission.html @@ -1,8 +1,8 @@ - - - + + + <% FOREACH module IN permission %> diff --git a/root/permission/distribution.html b/root/permission/distribution.html index 33f5b656d4..c572473524 100644 --- a/root/permission/distribution.html +++ b/root/permission/distribution.html @@ -2,4 +2,24 @@

Module Permissions for <% search_term %>

+
NameOwnerCo-MaintainersModule (<% permission.size %>)Owner (<% num_owners %>)Co-Maintainers (<% num_comaints %>)
+ + + + <% FOREACH author IN releaser %> + + + + <% END %> + <% IF releaser.size == 0 %> + + + + <% END %> +
Authorized Releasers (<% releaser.size %>)
+ <% author %> +
+ No owner<% IF num_comaints %> or co-maintainer<% END %> has permissions for all modules in this distribution. +
+ <% INCLUDE 'inc/permission.html' %>