X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=plugins%2Fplugins-home.pl;h=c67156222d7156ba6faa5bb3818b94dad4141914;hb=eeb115440a22ed035d8720ac53b7fbd0e5fd8afe;hp=0e7de024c5dd5f05125493c88b9b9c38c2a53422;hpb=f1dc82d70bb60de7dcccbb224cac8142054910b8;p=koha-ffzg.git diff --git a/plugins/plugins-home.pl b/plugins/plugins-home.pl index 0e7de024c5..c67156222d 100755 --- a/plugins/plugins-home.pl +++ b/plugins/plugins-home.pl @@ -21,18 +21,17 @@ use Modern::Perl; use CGI qw ( -utf8 ); -use JSON qw(from_json); -use LWP::Simple qw(get); +use JSON qw( from_json ); +use LWP::Simple qw( get ); use Koha::Plugins; -use C4::Auth; -use C4::Output; -use C4::Debug; +use C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_html_with_http_headers ); use C4::Context; -my $plugins_enabled = C4::Context->preference('UseKohaPlugins') && C4::Context->config("enable_plugins"); +my $plugins_enabled = C4::Context->config("enable_plugins"); -my $input = new CGI; +my $input = CGI->new; my $method = $input->param('method'); my $plugin_search = $input->param('plugin-search'); @@ -40,9 +39,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { template_name => ($plugins_enabled) ? "plugins/plugins-home.tt" : "plugins/plugins-disabled.tt", query => $input, type => "intranet", - authnotrequired => 0, flagsrequired => { plugins => '*' }, - debug => 1, } ); @@ -53,16 +50,26 @@ if ($plugins_enabled) { method => $method, ); - my @plugins = Koha::Plugins->new()->GetPlugins({ - method => $method, - all => 1, - }); + my @plugins = Koha::Plugins->new()->GetPlugins( + { + method => $method, + all => 1, + errors => 1 + } + ); $template->param( plugins => \@plugins, ); + $template->param( can_search => C4::Context->config('plugin_repos') ? 1 : 0 ); my @results; if ($plugin_search) { my $repos = C4::Context->config('plugin_repos'); + + # Fix data structure if only one repo defined + if ( ref($repos->{repo}) eq 'HASH' ) { + $repos = { repo => [ $repos->{repo} ] }; + } + foreach my $r ( @{ $repos->{repo} } ) { if ( $r->{service} eq 'github' ) { my $url = "https://api.github.com/search/repositories?q=$plugin_search+user:$r->{org_name}+in:name,description"; @@ -70,16 +77,53 @@ if ($plugins_enabled) { foreach my $result ( @{ $response->{items} } ) { next unless $result->{name} =~ /^koha-plugin-/; my $releases = $result->{url} . "/releases/latest"; - my $release = from_json( get($releases) ); + my $release = from_json( get($releases) ); + my $tag_name = $release->{tag_name}; for my $asset ( @{$release->{assets}} ) { if ($asset->{browser_download_url} =~ m/\.kpz$/) { $result->{install_name} = $asset->{name}; - $result->{install_url} = $asset->{browser_download_url}; + $result->{install_url} = $asset->{browser_download_url}; + $result->{tag_name} = $tag_name; } } push( @results, { repo => $r, result => $result } ); } } + elsif ( $r->{service} eq 'gitlab' ) { + my $org_name = $r->{org_name}; + my $url = "https://gitlab.com/api/v4/groups/$org_name/projects?with_issues_enabled=no\&with_merge_requests_enabled=no\&with_shared=no\&include_subgroups=yes\&search=koha-plugin+$plugin_search"; + my $response = from_json( get($url) ); + foreach my $result ( @{ $response } ) { + next unless $result->{name} =~ /^koha-plugin-/; + my $project_id = $result->{id}; + my $description = $result->{description} // ''; + my $web_url = $result->{web_url}; + my $releases_url = "https://gitlab.com/api/v4/projects/$project_id/releases"; + my @releases = @{ from_json( get($releases_url) ) }; + + if ( scalar @releases > 0 ) { + + # Pick the first one, the latest release + my $latest = $releases[0]; + my $name = $latest->{name}; + my $tag_name = $latest->{tag_name}; + my @links = @{ $latest->{assets}->{links} }; + my $url = $links[0]->{direct_asset_url}; + my @parts = split( '/', $url ); + my $filename = $parts[-1]; + next unless $url =~ m/\.kpz$/; + my $result = { + description => $description, + install_name => $filename, + install_url => $url, + html_url => $web_url, + name => $name, + tag_name => $tag_name, + }; + push @results, { repo => $r, result => $result }; + } + } + } } $template->param(