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

(-)a/C4/Update/Database.pm (-31 / +44 lines)
Lines 130-143 sub execute_version { Link Here
130
            $queries = get_queries ( $filepath );
130
            $queries = get_queries ( $filepath );
131
        }
131
        }
132
        when ( /.pl/ ) {
132
        when ( /.pl/ ) {
133
            my $versions_dir = C4::Context->intranetdir . '/installer/data/mysql/versions/';
133
            eval {
134
            my $version_file = $versions_dir . $filename;
134
                $queries = get_queries ( $filepath );
135
            if ( do $version_file ) {
135
            };
136
                $queries = _get_queries();
136
            if ($@) {
137
            } else {
138
                $report->{$version} = {
137
                $report->{$version} = {
139
                    error => "LOAD_FUNCTIONS_FAILED",
138
                    error => "LOAD_FUNCTIONS_FAILED",
140
                    filename => $filename,
139
                    filename => $filename,
140
                    error_str => $@,
141
                };
141
                };
142
            }
142
            }
143
        }
143
        }
Lines 364-401 sub get_queries { Link Here
364
    open my $fh, "<", $filepath;
364
    open my $fh, "<", $filepath;
365
    my @queries;
365
    my @queries;
366
    my @comments;
366
    my @comments;
367
    my $old_delimiter = $/;
367
    if ( $filepath =~ /\.pl$/ ) {
368
    while ( <$fh> ) {
368
        if ( do $filepath ) {
369
        my $line = $_;
369
            my $infos = _get_queries();
370
        chomp $line;
370
            @queries  = @{ $infos->{queries} }  if exists $infos->{queries};
371
        $line =~ s/^\s*//;
371
            @comments = @{ $infos->{comments} } if exists $infos->{comments};
372
        if ( $line =~ s/^--(.*)$// ) {
372
        }
373
            my @l = split $old_delimiter;
373
        if ( $@ ) {
374
            if ( @l > 1 ) {
374
            die "I can't load $filepath. Please check the execute flag and if this file is a valid perl script ($@)";
375
                my $tmp_query;
375
        }
376
                for my $l ( @l ) {
376
    } else {
377
                    if ( $l =~ m/^--/ ) {
377
        my $old_delimiter = $/;
378
                        push @comments, $l;
378
        while ( <$fh> ) {
379
                        next;
379
            my $line = $_;
380
            chomp $line;
381
            $line =~ s/^\s*//;
382
            if ( $line =~ /^--/ ) {
383
                my @l = split $old_delimiter, $line;
384
                if ( @l > 1 ) {
385
                    my $tmp_query;
386
                    for my $l ( @l ) {
387
                        if ( $l =~ /^--/ ) {
388
                            $l =~ s/^--\s*//;
389
                            push @comments, $l;
390
                            next;
391
                        }
392
                        $tmp_query .= $l . $old_delimiter;
380
                    }
393
                    }
381
                    $tmp_query .= $l . $old_delimiter;
394
                    push @queries, $tmp_query if $tmp_query;
395
                    next;
382
                }
396
                }
383
                push @queries, $tmp_query if $tmp_query;
397
398
                $line =~ s/^--\s*//;
399
                push @comments, $line;
384
                next;
400
                next;
385
            }
401
            }
386
402
            if ( $line =~ /^delimiter (.*)$/i ) {
387
            push @comments, $1;
403
                $/ = $1;
388
            next;
404
                next;
389
        }
405
            }
390
        if ( $line =~ /^delimiter (.*)$/i ) {
406
            $line =~ s#$/##;
391
            $/ = $1;
407
            push @queries, $line if not $line =~ /^\s*$/; # Push if query is not empty
392
            next;
393
        }
408
        }
394
        $line =~ s#$/##;
409
        $/ = $old_delimiter;
395
        push @queries, $line if not $line =~ /^\s*$/; # Push if query is not empty
410
        close $fh;
396
    }
411
    }
397
    $/ = $old_delimiter;
398
    close $fh;
399
412
400
    return { queries => \@queries, comments => \@comments };
413
    return { queries => \@queries, comments => \@comments };
401
}
414
}
(-)a/admin/ajax-updatedb-getinfos.pl (-14 / +15 lines)
Lines 30-61 this script returns comments for a updatedatabase version Link Here
30
30
31
use Modern::Perl;
31
use Modern::Perl;
32
use CGI;
32
use CGI;
33
use JSON;
33
use C4::Update::Database;
34
use C4::Update::Database;
35
use C4::Output;
34
36
35
my $input = new CGI;
37
my $input = new CGI;
36
my $version = $input->param('version');
38
my $version = $input->param('version');
37
39
38
binmode STDOUT, ":utf8";
39
print $input->header(-type => 'text/plain', -charset => 'UTF-8');
40
my $filepath;
40
my $filepath;
41
my $queries;
41
my $queries;
42
eval {
42
eval {
43
    $filepath = C4::Update::Database::get_filepath( $version );
43
    $filepath = C4::Update::Database::get_filepath( $version );
44
    $queries = C4::Update::Database::get_queries( $filepath );
44
    $queries = C4::Update::Database::get_queries( $filepath );
45
};
45
};
46
if ( $@ ){
47
    print $@;
48
    exit;
49
}
50
46
51
if ( @{ $$queries{comments} } ) {
47
my $param = {comments => "", queries => ""};
52
    print "Comments : <br/>" . join ( "<br/>", @{ $$queries{comments} } );
48
if ( $@ ){
49
    $param->{errors} = $@;
53
} else {
50
} else {
54
    print "No comment <br/>";
51
    if ( exists $queries->{comments} and @{ $queries->{comments} } ) {
55
}
52
        $param->{comments} = join ( "<br/>", @{ $queries->{comments} } );
53
    }
56
54
57
if ( @{ $$queries{queries} } ) {
55
    if ( exists $queries->{queries} and @{ $queries->{queries} } ) {
58
    print "<br/><br/>Queries : <br/>" . join ( "<br/>", @{ $$queries{queries} } );
56
        $param->{queries} = join ( "<br/>", @{ $queries->{queries} } );
59
} else {
57
    }
60
    print "<br/>No queries";
61
}
58
}
59
60
my $json_text = to_json( $param, { utf8 => 1 } );
61
62
output_with_http_headers $input, undef, $json_text, 'json';
(-)a/installer/data/mysql/update.pl (+2 lines)
Lines 64-69 if ( $version or $all ) { Link Here
64
        my ( $v, $r ) = each %$report;
64
        my ( $v, $r ) = each %$report;
65
        if ( ref( $r ) eq 'HASH' ) {
65
        if ( ref( $r ) eq 'HASH' ) {
66
            say "\t$v => $r->{error}";
66
            say "\t$v => $r->{error}";
67
        } elsif ( ref ( $r ) eq 'ARRAY' ) {
68
            say "\t$_" for @$r;
67
        } else {
69
        } else {
68
            say "\t$v => $r";
70
            say "\t$v => $r";
69
        }
71
        }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/updatedatabase.tt (-74 / +99 lines)
Lines 22-36 Link Here
22
        } );
22
        } );
23
    }
23
    }
24
    function get_infos(version, node){
24
    function get_infos(version, node){
25
        $.ajax({
25
        $.getJSON('/cgi-bin/koha/admin/ajax-updatedb-getinfos.pl',
26
            url: "/cgi-bin/koha/admin/ajax-updatedb-getinfos.pl",
26
            { version: version },
27
            data: {
27
            function(param) {
28
                version: version
28
                if ( param['errors'] ) {
29
            },
29
                    $(node).replaceWith(_("Errors occured: ") + param['errors']);
30
            success: function(data){
30
                }
31
                $(node).replaceWith(data);
31
                var s;
32
            },
32
                s = "<b>" + _("Comments:") + "</b>";
33
        });
33
                s += '<br/>';
34
                if ( param['comments'] ) {
35
                    s += param['comments'];
36
                } else {
37
                    s += _("No comments");
38
                }
39
                s += '<br/><br/>';
40
41
                s += "<b>" + _("Queries:") + "</b>";
42
                s += '<br/>';
43
                if ( param['queries'] ) {
44
                    s += param['queries'];
45
                } else {
46
                    s += _("No queries");
47
                }
48
                $(node).replaceWith(s);
49
            }
50
        );
34
    }
51
    }
35
//]]>
52
//]]>
36
</script>
53
</script>
Lines 56-71 Link Here
56
            <li>
73
            <li>
57
                [% report_loo.version %] --
74
                [% report_loo.version %] --
58
                [% FOREACH r IN report_loo.report %]
75
                [% FOREACH r IN report_loo.report %]
59
                    [% IF r.error.error == "ALREADY_EXISTS" %]
76
                  [% IF r.error.error == "ALREADY_EXISTS" %]
60
                        This file ( [% r.error.filepath %] ) still already execute in version [% r.error.old_version %] : same md5 ([% r.error.md5 %])
77
                    <span style="color:orange;">
61
                        [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% report_loo.version %]">Mark as OK</a>]
78
                      [% r.error.filepath %] already executed in version [% r.error.old_version %] : same md5 ([% r.error.md5 %])
62
                    [% ELSIF r.error.error == "LOAD_FUNCTIONS_FAILED" %]
79
                      [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% report_loo.version %]">Mark as OK</a>]
63
                        Load functions in [% r.error.filename %] failed
80
                    </span>
64
                    [% ELSIF r.error.error == "BAD_EXTENSION" %]
81
                  [% ELSIF r.error.error == "LOAD_FUNCTIONS_FAILED" %]
65
                        This extension ([% r.error.extension %]) is not take into account (only .pl or .sql)";
82
                    <span style="color:red;">
83
                      Load functions in [% r.error.filename %] failed ([% r.error.error_str %])
84
                    </span>
85
                  [% ELSIF r.error.error == "BAD_EXTENSION" %]
86
                    <span style="color:red;">
87
                      This extension ([% r.error.extension %]) is not take into account (only .pl or .sql)";
88
                    </span>
89
                  [% ELSE %]
90
                    [% IF r.error == "OK" %]
91
                      <span style="color:green;">
92
                        [% r.error %];
93
                      </span>
66
                    [% ELSE %]
94
                    [% ELSE %]
95
                      <span style="color:red;">
67
                        [% r.error %];
96
                        [% r.error %];
97
                      </span>
68
                    [% END %]
98
                    [% END %]
99
                  [% END %]
69
                [% END %]
100
                [% END %]
70
            </li>
101
            </li>
71
        [% END %]
102
        [% END %]
Lines 96-104 Link Here
96
        <thead>
127
        <thead>
97
            <tr>
128
            <tr>
98
                <th>DB revision</th>
129
                <th>DB revision</th>
99
                <th>Comments</th>
100
                <th>Status</th>
130
                <th>Status</th>
101
                <th>Availability</th>
131
                <th>Comments</th>
102
                <th>Details</th>
132
                <th>Details</th>
103
            </tr>
133
            </tr>
104
        </thead>
134
        </thead>
Lines 107-180 Link Here
107
            <tr>
137
            <tr>
108
                <td>[% v.version %]</td>
138
                <td>[% v.version %]</td>
109
                <td>
139
                <td>
110
                    [% FOREACH c IN v.comments %]
111
                        [% c.comment %]
112
                    [% END %]
113
                </td>
114
                <td>
115
                    [% IF v.available %]
140
                    [% IF v.available %]
116
                        Unknown
141
                        Not applied
142
                        [% IF (dev_mode) %]
143
                            [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=update&version=[% v.version %]">Execute</a>]
144
                        [% END %]
117
                    [% ELSE %]
145
                    [% ELSE %]
118
                        [% IF v.status %]
146
                        [% SWITCH v.status %]
119
                            <span style="color:green;">OK</span>
147
                        [% CASE 0 %]
120
                            [% IF v.status == 2 %]
148
                            <span style="color:red;">Applied and failed</span>
121
                                [FORCED]
149
                        [% CASE 1 %]
122
                            [% END %]
150
                            <span style="color:green;">Applied and OK</span>
123
                        [% ELSE %]
151
                        [% CASE 2 %]
124
                            <span style="color:red;">Failed</span>
152
                            <span style="color:green;">Applied and Forced</span>
153
                        [% CASE %]
154
                            <span style="color:red;">Status does not exist !</span>
125
                        [% END %]
155
                        [% END %]
126
                    [% END %]
156
                    [% END %]
127
                </td>
157
                </td>
128
                <td>
158
                <td>
129
                    [% IF v.available %]
159
                    [% FOREACH c IN v.comments %]
130
                        Available
160
                        [% c.comment %]<br/>
131
                        [% IF (dev_mode) %]
132
                            [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=update&version=[% v.version %]">Execute</a>]
133
                        [% END %]
134
                    [% ELSE %]
135
                        Already executed
136
                    [% END %]
161
                    [% END %]
137
                </td>
162
                </td>
138
                <td width="50%">
163
                <td width="50%">
164
                  [% IF v.available %]
165
                    <span style="display:block;"><a href="#" onclick="get_infos('[% v.version %]', this); return false;">Get comments</a></span>
166
                  [% ELSE %]
139
                    <div class="details" style="display:none;">
167
                    <div class="details" style="display:none;">
140
                        [% IF v.available %]
168
                      <div class="queries" style="display:block;">
141
                            Unknown
169
                        <b>Queries</b> :
142
                            <span style="display:block;"><a href="#" onclick="get_infos('[% v.version %]', this); return false;">Get comments</a></span>
170
                        <ul>
143
                        [% ELSE %]
171
                          [% FOREACH q IN v.queries %]
144
                            <div class="queries" style="display:block;">
172
                            <li>[% q.query %]<br/></li>
145
                                <span class="underline">Queries</span> :
173
                          [% END %]
146
                                [% FOREACH q IN v.queries %]
174
                        </ul>
147
                                    [% q.query %]<br/>
175
                      </div>
148
                                [% END %]
176
                      [% IF v.status == 1 %]
149
                            </div>
177
                        <div class="status" style="display:block;">
150
                            [% IF v.status == 1 %]
178
                          <b>Status</b> :
151
                                <div class="status" style="display:block;">
179
                          <span style="color:green;">OK</span>
152
                                    <span class="underline">Status</span> :
180
                        </div>
153
                                    <span style="color:green;">OK</span>
181
                      [% ELSE %]
154
                                </div>
182
                        <div class="status" style="display:block;">
155
                            [% ELSE %]
183
                          <b>Status</b> :
156
                                <div class="status" style="display:block;">
184
                          [% IF v.status == 2 %]
157
                                    <span class="underline">Status</span> :
185
                            <span style="color:green;">OK</span>
158
                                    [% IF v.status == 2 %]
186
                            [FORCED]
159
                                        <span style="color:green;">OK</span>
187
                          [% ELSE %]
160
                                        [FORCED]
188
                            <span style="color:red;">Failed</span>
161
                                    [% ELSE %]
189
                            [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% v.version %]">Mark as OK</a>]
162
                                        <span style="color:red;">Failed</span>
190
                          [% END %]
163
                                        [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% v.version %]">Mark as OK</a>]
191
                        </div>
164
                                    [% END %]
192
                        <div class="errors" style="display:block;">
165
                                </div>
193
                          <b>Errors</b> :
166
                                <div class="errors" style="display:block;">
194
                          <ul>
167
                                    <span class="underline">Errors</span> :
195
                            [% FOREACH e IN v.errors %]
168
                                    <span class="errors">
196
                              <li><span>[% e.error %]</span></li>
169
                                    [% FOREACH e IN v.errors %]
170
                                        <span>[% e.error %]</span>
171
                                    [% END %]
172
                                    </span>
173
                                </div>
174
                            [% END %]
197
                            [% END %]
175
                        [% END %]
198
                          </ul>
199
                        </div>
200
                      [% END %]
176
                    </div>
201
                    </div>
177
                    <a href="#" onclick="see_details(this);return false;">Show details</a>
202
                    <a href="#" onclick="see_details(this);return false;">Show details</a>
203
                  [% END %]
178
                </td>
204
                </td>
179
            </tr>
205
            </tr>
180
        [% END %]
206
        [% END %]
181
- 

Return to bug 7167