View | Details | Raw Unified | Return to bug 25952
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/plugins/plugins-home.tt (+9 lines)
Lines 85-90 Link Here
85
                        </div>
85
                        </div>
86
                    [% END %]
86
                    [% END %]
87
87
88
                    [% IF search_errors %]
89
                        <h2>Search errors</h2>
90
                        <div class="page-section">
91
                            [% FOREACH error IN search_errors %]
92
                                <div class="alert alert-warning">Cannot search repository [% error.repo.name | html %]: [% error.error | html %]</div>
93
                            [% END %]
94
                        </div>
95
                    [% END %]
96
88
                    [% IF search_results %]
97
                    [% IF search_results %]
89
                        <h2>Search results</h2>
98
                        <h2>Search results</h2>
90
                        <div class="page-section">
99
                        <div class="page-section">
(-)a/plugins/plugins-home.pl (-56 / +62 lines)
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
- 

Return to bug 25952