013414d624566fbec055a2ff440732fcaa292582
[koha-equinox.git] / admin / updatedatabase.pl
1 #!/usr/bin/perl
2
3 # Copyright Biblibre 2012
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use Modern::Perl;
21 use CGI;
22 use C4::Auth;
23 use C4::Output;
24 use C4::Update::Database;
25
26 my $query = new CGI;
27 my $op = $query->param('op') || 'list';
28
29 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
30     {   template_name   => "admin/updatedatabase.tmpl",
31         query           => $query,
32         type            => "intranet",
33         authnotrequired => 0,
34         flagsrequired   => { parameters => 1 },
35     }
36 );
37
38 if ( $op eq 'update' ) {
39     my @versions = $query->param('version');
40     @versions = sort {
41         C4::Update::Database::TransformToNum( $a ) <=> C4::Update::Database::TransformToNum( $b )
42     } @versions;
43
44     my @reports;
45     for my $version ( @versions ) {
46         push @reports, C4::Update::Database::execute_version $version;
47     }
48
49     my @report_loop = map {
50         my ( $v, $r ) = each %$_;
51         my @errors = ref ( $r ) eq 'ARRAY'
52             ?
53                 map {
54                     { error => $_ }
55                 } @$r
56             :
57                 { error => $r };
58         {
59             version => $v,
60             report  => \@errors,
61         }
62     } @reports;
63     $template->param( report_loop => \@report_loop );
64
65     $op = 'list';
66 }
67
68 if ( $op eq 'mark_as_ok' ) {
69     my @versions = $query->param('version');
70     C4::Update::Database::mark_as_ok $_ for @versions;
71     $op = 'list';
72 }
73
74 if ( $op eq 'list' ) {
75     my $versions_available = C4::Update::Database::list_versions_available;
76     my $versions = C4::Update::Database::list_versions_already_applied;
77
78     for my $v ( @$versions_available ) {
79         if ( not grep { $v eq $$_{version} } @$versions ) {
80             push @$versions, {
81                 version => $v,
82                 available => 1
83             };
84         }
85     }
86     my @sorted = sort {
87         C4::Update::Database::TransformToNum( $$a{version} ) <=> C4::Update::Database::TransformToNum( $$b{version} )
88     } @$versions;
89
90     my @available = grep { defined $$_{available} and $$_{available} == 1 } @sorted;
91     my @v_available = map { {version => $$_{version}} } @available;
92
93     $template->param(
94         dev_mode => $ENV{DEBUG},
95         versions => \@sorted,
96         nb_available => scalar @available,
97         available => [ map { {version => $$_{version}} } @available ],
98     );
99 }
100
101 output_html_with_http_headers $query, $cookie, $template->output;