|
Lines 23-28
use CGI qw ( -utf8 );
Link Here
|
| 23 |
|
23 |
|
| 24 |
use JSON qw( from_json ); |
24 |
use JSON qw( from_json ); |
| 25 |
use LWP::Simple qw( get ); |
25 |
use LWP::Simple qw( get ); |
|
|
26 |
use Try::Tiny; |
| 26 |
|
27 |
|
| 27 |
use Koha::Plugins; |
28 |
use Koha::Plugins; |
| 28 |
use C4::Auth qw( get_template_and_user ); |
29 |
use C4::Auth qw( get_template_and_user ); |
|
Lines 63-69
if ($plugins_enabled) {
Link Here
|
| 63 |
$template->param( plugins_restricted => C4::Context->config('plugins_restricted') ); |
64 |
$template->param( plugins_restricted => C4::Context->config('plugins_restricted') ); |
| 64 |
|
65 |
|
| 65 |
$template->param( can_search => C4::Context->config('plugin_repos') ? 1 : 0 ); |
66 |
$template->param( can_search => C4::Context->config('plugin_repos') ? 1 : 0 ); |
| 66 |
my @results; |
67 |
my ( @results, @errors ); |
| 67 |
if ($plugin_search) { |
68 |
if ($plugin_search) { |
| 68 |
my $repos = C4::Context->config('plugin_repos'); |
69 |
my $repos = C4::Context->config('plugin_repos'); |
| 69 |
|
70 |
|
|
Lines 73-140
if ($plugins_enabled) {
Link Here
|
| 73 |
} |
74 |
} |
| 74 |
|
75 |
|
| 75 |
foreach my $r ( @{ $repos->{repo} } ) { |
76 |
foreach my $r ( @{ $repos->{repo} } ) { |
| 76 |
if ( $r->{service} eq 'github' ) { |
77 |
try { |
| 77 |
my $url = |
78 |
if ( $r->{service} eq 'github' ) { |
| 78 |
"https://api.github.com/search/repositories?q=$plugin_search+user:$r->{org_name}+in:name,description"; |
79 |
my $url = |
| 79 |
my $response = from_json( get($url) ); |
80 |
"https://api.github.com/search/repositories?q=$plugin_search+user:$r->{org_name}+in:name,description"; |
| 80 |
foreach my $result ( @{ $response->{items} } ) { |
81 |
my $response = from_json( get($url) ); |
| 81 |
next unless $result->{name} =~ /^koha-plugin-/; |
82 |
foreach my $result ( @{ $response->{items} } ) { |
| 82 |
my $releases = $result->{url} . "/releases/latest"; |
83 |
next unless $result->{name} =~ /^koha-plugin-/; |
| 83 |
my $release_info = get($releases); |
84 |
my $releases = $result->{url} . "/releases/latest"; |
| 84 |
next unless $release_info; |
85 |
my $release_info = get($releases); |
| 85 |
my $release = from_json($release_info); |
86 |
next unless $release_info; |
| 86 |
my $tag_name = $release->{tag_name}; |
87 |
my $release = from_json($release_info); |
| 87 |
for my $asset ( @{ $release->{assets} } ) { |
88 |
my $tag_name = $release->{tag_name}; |
| 88 |
if ( $asset->{browser_download_url} =~ m/\.kpz$/ ) { |
89 |
for my $asset ( @{ $release->{assets} } ) { |
| 89 |
$result->{install_name} = $asset->{name}; |
90 |
if ( $asset->{browser_download_url} =~ m/\.kpz$/ ) { |
| 90 |
$result->{install_url} = $asset->{browser_download_url}; |
91 |
$result->{install_name} = $asset->{name}; |
| 91 |
$result->{tag_name} = $tag_name; |
92 |
$result->{install_url} = $asset->{browser_download_url}; |
|
|
93 |
$result->{tag_name} = $tag_name; |
| 94 |
} |
| 92 |
} |
95 |
} |
|
|
96 |
push( @results, { repo => $r, result => $result } ); |
| 93 |
} |
97 |
} |
| 94 |
push( @results, { repo => $r, result => $result } ); |
98 |
} elsif ( $r->{service} eq 'gitlab' ) { |
| 95 |
} |
99 |
my $org_name = $r->{org_name}; |
| 96 |
} elsif ( $r->{service} eq 'gitlab' ) { |
100 |
my $url = |
| 97 |
my $org_name = $r->{org_name}; |
101 |
"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"; |
| 98 |
my $url = |
102 |
my $response = from_json( get($url) ); |
| 99 |
"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"; |
103 |
foreach my $result ( @{$response} ) { |
| 100 |
my $response = from_json( get($url) ); |
104 |
next unless $result->{name} =~ /^koha-plugin-/; |
| 101 |
foreach my $result ( @{$response} ) { |
105 |
my $project_id = $result->{id}; |
| 102 |
next unless $result->{name} =~ /^koha-plugin-/; |
106 |
my $description = $result->{description} // ''; |
| 103 |
my $project_id = $result->{id}; |
107 |
my $web_url = $result->{web_url}; |
| 104 |
my $description = $result->{description} // ''; |
108 |
my $releases_url = "https://gitlab.com/api/v4/projects/$project_id/releases"; |
| 105 |
my $web_url = $result->{web_url}; |
109 |
my $releases_info = get($releases_url); |
| 106 |
my $releases_url = "https://gitlab.com/api/v4/projects/$project_id/releases"; |
110 |
next unless $releases_info; |
| 107 |
my $releases_info = get($releases_url); |
111 |
my @releases = @{ from_json($releases_info) }; |
| 108 |
next unless $releases_info; |
112 |
|
| 109 |
my @releases = @{ from_json($releases_info) }; |
113 |
if ( scalar @releases > 0 ) { |
| 110 |
|
114 |
|
| 111 |
if ( scalar @releases > 0 ) { |
115 |
# Pick the first one, the latest release |
| 112 |
|
116 |
my $latest = $releases[0]; |
| 113 |
# Pick the first one, the latest release |
117 |
my $name = $latest->{name}; |
| 114 |
my $latest = $releases[0]; |
118 |
my $tag_name = $latest->{tag_name}; |
| 115 |
my $name = $latest->{name}; |
119 |
my @links = @{ $latest->{assets}->{links} }; |
| 116 |
my $tag_name = $latest->{tag_name}; |
120 |
my $url = $links[0]->{direct_asset_url}; |
| 117 |
my @links = @{ $latest->{assets}->{links} }; |
121 |
my @parts = split( '/', $url ); |
| 118 |
my $url = $links[0]->{direct_asset_url}; |
122 |
my $filename = $parts[-1]; |
| 119 |
my @parts = split( '/', $url ); |
123 |
next unless $url =~ m/\.kpz$/; |
| 120 |
my $filename = $parts[-1]; |
124 |
my $result = { |
| 121 |
next unless $url =~ m/\.kpz$/; |
125 |
description => $description, |
| 122 |
my $result = { |
126 |
install_name => $filename, |
| 123 |
description => $description, |
127 |
install_url => $url, |
| 124 |
install_name => $filename, |
128 |
html_url => $web_url, |
| 125 |
install_url => $url, |
129 |
name => $name, |
| 126 |
html_url => $web_url, |
130 |
tag_name => $tag_name, |
| 127 |
name => $name, |
131 |
}; |
| 128 |
tag_name => $tag_name, |
132 |
push @results, { repo => $r, result => $result }; |
| 129 |
}; |
133 |
} |
| 130 |
push @results, { repo => $r, result => $result }; |
|
|
| 131 |
} |
134 |
} |
| 132 |
} |
135 |
} |
| 133 |
} |
136 |
} catch { |
|
|
137 |
warn $_; |
| 138 |
push @errors, { repo => $r, error => $_ }; |
| 139 |
}; |
| 134 |
} |
140 |
} |
| 135 |
|
141 |
|
| 136 |
$template->param( |
142 |
$template->param( |
| 137 |
search_results => \@results, |
143 |
search_results => \@results, |
|
|
144 |
search_errors => \@errors, |
| 138 |
search_term => $plugin_search, |
145 |
search_term => $plugin_search, |
| 139 |
); |
146 |
); |
| 140 |
} |
147 |
} |
| 141 |
- |
|
|