Bugzilla – Attachment 6415 Details for
Bug 7167
updatedatabase improvements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
New version for updatedatabase
New-version-for-updatedatabase.patch (text/plain), 28.89 KB, created by
Paul Poulain
on 2011-11-25 22:23:05 UTC
(
hide
)
Description:
New version for updatedatabase
Filename:
MIME Type:
Creator:
Paul Poulain
Created:
2011-11-25 22:23:05 UTC
Size:
28.89 KB
patch
obsolete
>From 7ba8c58c5037e036f28433dd805ffce3d16ecaf9 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Fri, 18 Nov 2011 16:46:37 +0100 >Subject: [PATCH] New version for updatedatabase > >This patch use DataTable, see BUG|BZ 6836 > - css/datatables.css > - lib/jquery/plugins/jquery.dataTables.min.js > - js/datatables.js > > patch embedded : > YAML Config file > > add a section > <installdir>/path/to/your/install/dir</installdir> > in your koha-conf.xml > >http://bugs.koha-community.org/show_bug.cgi?id=7167 >--- > C4/Update/Database.pm | 357 ++++++++++++++++++++ > admin/ajax-updatedb-getinfos.pl | 62 ++++ > admin/updatedatabase.pl | 101 ++++++ > etc/update/database/config.yaml | 1 + > installer/data/mysql/update.pl | 28 ++ > installer/data/mysql/updatedatabase.pl | 15 + > installer/data/mysql/versions/skeleton.pl | 17 + > installer/data/mysql/versions/skeleton.sql | 3 + > .../intranet-tmpl/prog/en/css/staff-global.css | 10 +- > .../prog/en/modules/admin/admin-home.tt | 7 + > .../prog/en/modules/admin/updatedatabase.tt | 171 ++++++++++ > 11 files changed, 771 insertions(+), 1 deletions(-) > create mode 100644 C4/Update/Database.pm > create mode 100755 admin/ajax-updatedb-getinfos.pl > create mode 100755 admin/updatedatabase.pl > create mode 100644 etc/update/database/config.yaml > create mode 100644 installer/data/mysql/update.pl > create mode 100755 installer/data/mysql/versions/skeleton.pl > create mode 100644 installer/data/mysql/versions/skeleton.sql > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/admin/updatedatabase.tt > >diff --git a/C4/Update/Database.pm b/C4/Update/Database.pm >new file mode 100644 >index 0000000..8524e39 >--- /dev/null >+++ b/C4/Update/Database.pm >@@ -0,0 +1,357 @@ >+package C4::Update::Database; >+ >+use Modern::Perl; >+ >+use C4::Context; >+use C4::Config::File::YAML; >+ >+use File::Basename; >+use Digest::MD5; >+use List::MoreUtils qw/uniq/; >+ >+my $config = C4::Config::File::YAML->new( C4::Context->config("installdir") . qq{/etc/update/database/config.yaml} ); >+my $VERSIONS_PATH = C4::Context->config('intranetdir') . '/' . $config->{versions_dir}; >+ >+my $version; >+my $list; >+ >+my $dbh = C4::Context->dbh; >+ >+sub get_filepath { >+ my ( $version ) = @_; >+ my @files = <$VERSIONS_PATH/$version*>; >+ if ( scalar @files != 1 ) { >+ die "This version ($version) returned more than one file (or any) corresponding!"; >+ } >+ >+ return $files[0]; >+} >+ >+sub get_md5 { >+ my ( $filepath ) = @_; >+ open(FILE, $filepath); >+ >+ my $ctx = Digest::MD5->new; >+ $ctx->addfile(*FILE); >+ my $md5 = $ctx->hexdigest; >+ close(FILE); >+ return $md5; >+} >+ >+sub execute_version { >+ my ( $version ) = @_; >+ my $report; >+ >+ my $filepath; >+ eval { >+ $filepath = get_filepath $version; >+ }; >+ if ( $@ ) { >+ return { $version => $@ }; >+ } >+ >+ my @file_infos = fileparse( $filepath, qr/\.[^.]*/ ); >+ my $extension = $file_infos[2]; >+ my $filename = $version . $extension; >+ >+ my $md5 = get_md5 $filepath; >+ my $r = md5_already_exists( $md5 ); >+ if ( scalar @$r ) { >+ my $p = @$r[0]; >+ $$report{$version} = "This file ( $filepath ) still already execute in version " . @$r[0]->{version} . " : same md5 (" . @$r[0]->{md5} . ")"; >+ return $report; >+ } >+ >+ my $queries; >+ given ( $extension ) { >+ when ( /.sql/ ) { >+ $queries = get_queries ( $filepath ); >+ } >+ when ( /.pl/ ) { >+ my $versions_dir = C4::Context->intranetdir . '/installer/data/mysql/versions/'; >+ my $version_file = $versions_dir . $filename; >+ if ( do $version_file ) { >+ $queries = _get_queries(); >+ } else { >+ $$report{$version} = "Load functions in $filename failed"; >+ } >+ } >+ default { >+ $$report{$version} = "This extension ($extension) is not take into account (only .pl or .sql)"; >+ } >+ } >+ >+ return $report >+ if ( defined $$report{$version} ); >+ >+ my $errors; >+ for my $query ( @{$$queries{queries}} ) { >+ eval { >+ check_coherency( $query ); >+ }; >+ if ( $@ ) { >+ push @$errors, $@ >+ } >+ } >+ >+ if ( $errors ) { >+ $_ =~ s/at [^ ]* line \d*\.$// for @$errors; >+ $$report{$version} = $errors; >+ return $report; >+ } >+ >+ $errors = execute ( $queries ); >+ $$report{$version} = scalar( @$errors ) ? $errors : "OK"; >+ set_infos ( $version, $queries, $errors, $md5 ); >+ >+ return $report; >+} >+ >+sub list_versions_availables { >+ my @versions; >+ opendir DH, $VERSIONS_PATH or die "Cannot open directory ($!)"; >+ my @files = grep { !/^\.\.?$/ and /^.*\.(sql|pl)$/ and !/^skeleton/ } readdir DH; >+ for my $f ( @files ) { >+ my @file_infos = fileparse( $f, qr/\.[^.]*/ ); >+ push @versions, $file_infos[0]; >+ } >+ @versions = uniq @versions; >+ closedir DH; >+ return \@versions; >+} >+ >+sub list_versions_already_knows { >+ my $query = qq/ SELECT version, comment, status FROM updatedb_report /; >+ my $sth = $dbh->prepare( $query ); >+ $sth->execute; >+ my $versions = $sth->fetchall_arrayref( {} ); >+ map { >+ my $version = $_; >+ my @comments = defined $$_{comment} ? split '\\\n', $$_{comment} : ""; >+ push @{ $$version{comments} }, { comment => $_ } for @comments; >+ delete $$version{comment}; >+ } @$versions; >+ $sth->finish; >+ for my $version ( @$versions ) { >+ $query = qq/ SELECT query FROM updatedb_query WHERE version = ? /; >+ $sth = $dbh->prepare( $query ); >+ $sth->execute( $$version{version} ); >+ $$version{queries} = $sth->fetchall_arrayref( {} ); >+ $sth->finish; >+ $query = qq/ SELECT error FROM updatedb_error WHERE version = ? /; >+ $sth = $dbh->prepare( $query ); >+ $sth->execute( $$version{version} ); >+ $$version{errors} = $sth->fetchall_arrayref( {} ); >+ $sth->finish; >+ } >+ return $versions; >+} >+ >+sub execute { >+ my ( $queries ) = @_; >+ my @errors; >+ for my $query ( @{$$queries{queries}} ) { >+ eval { >+ $dbh->do( $query ); >+ }; >+ push @errors, get_error(); >+ } >+ return \@errors; >+} >+ >+sub get_tables_name { >+ my $sth = $dbh->prepare("SHOW TABLES"); >+ $sth->execute(); >+ my @tables; >+ while ( my ( $table ) = $sth->fetchrow_array ) { >+ push @tables, $table; >+ } >+ return \@tables; >+} >+my $tables; >+sub check_coherency { >+ my ( $query ) = @_; >+ $tables = get_tables_name() if not $tables; >+ >+ given ( $query ) { >+ when ( /CREATE TABLE(?:.*?)? `?(\w+)`?/ ) { >+ my $table_name = $1; >+ if ( grep { /$table_name/ } @$tables ) { >+ die "COHERENCY: Table $table_name already exists"; >+ } >+ } >+ >+ when ( /ALTER TABLE *`?(\w+)`? *ADD *(?:COLUMN)? `?(\w+)`?/ ) { >+ my $table_name = $1; >+ my $column_name = $2; >+ next if $column_name =~ /(UNIQUE|CONSTRAINT|INDEX|KEY|FOREIGN)/; >+ if ( not grep { /$table_name/ } @$tables ) { >+ return "COHERENCY: Table $table_name does not exist"; >+ } else { >+ my $sth = $dbh->prepare( "DESC $table_name $column_name" ); >+ my $rv = $sth->execute; >+ if ( $rv > 0 ) { >+ die "COHERENCY: Field $table_name.$column_name already exists"; >+ } >+ } >+ } >+ >+ when ( /INSERT INTO `?(\w+)`?.*?VALUES *\((.*?)\)/ ) { >+ my $table_name = $1; >+ my @values = split /,/, $2; >+ s/^ *'// foreach @values; >+ s/' *$// foreach @values; >+ given ( $table_name ) { >+ when ( /systempreferences/ ) { >+ my $syspref = $values[0]; >+ my $sth = $dbh->prepare( "SELECT COUNT(*) FROM systempreferences WHERE variable = ?" ); >+ $sth->execute( $syspref ); >+ if ( ( my $count = $sth->fetchrow_array ) > 0 ) { >+ die "COHERENCY: Syspref $syspref already exists"; >+ } >+ } >+ >+ when ( /permissions/){ >+ my $module_bit = $values[0]; >+ my $code = $values[1]; >+ my $sth = $dbh->prepare( "SELECT COUNT(*) FROM permissions WHERE module_bit = ? AND code = ?" ); >+ $sth->execute($module_bit, $code); >+ if ( ( my $count = $sth->fetchrow_array ) > 0 ) { >+ die "COHERENCY: Permission $code already exists"; >+ } >+ } >+ } >+ } >+ } >+ return 1; >+} >+ >+sub get_error { >+ my @errors = $dbh->selectrow_array(qq{SHOW ERRORS}); # Get errors >+ my @warnings = $dbh->selectrow_array(qq{SHOW WARNINGS}); # Get warnings >+ if ( @errors ) { # Catch specifics errors >+ return qq{$errors[0] : $errors[1] => $errors[2]}; >+ } elsif ( @warnings ) { >+ return qq{$warnings[0] : $warnings[1] => $warnings[2]} >+ if $warnings[0] ne 'Note'; >+ } >+ return; >+} >+ >+sub get_queries { >+ my ( $filepath ) = @_; >+ open my $fh, "<", $filepath; >+ my @queries; >+ my @comments; >+ my $old_delimiter = $/; >+ while ( <$fh> ) { >+ my $line = $_; >+ chomp $line; >+ $line =~ s/^\s*//; >+ if ( $line =~ s/^--(.*)$// ) { >+ push @comments, $1; >+ next; >+ } >+ if ( $line =~ /^delimiter (.*)$/i ) { >+ $/ = $1; >+ next; >+ } >+ $line =~ s#$/##; >+ push @queries, $line if not $line =~ /^\s*$/; # Push if query is not empty >+ } >+ $/ = $old_delimiter; >+ close $fh; >+ >+ return { queries => \@queries, comments => \@comments }; >+} >+ >+sub md5_already_exists { >+ my ( $md5 ) = @_; >+ my $query = qq/SELECT version, md5 FROM updatedb_report WHERE md5 = ?/; >+ my $sth = $dbh->prepare( $query ); >+ $sth->execute( $md5 ); >+ my @r; >+ while ( my ( $version, $md5 ) = $sth->fetchrow ) { >+ push @r, { version => $version, md5 => $md5 }; >+ } >+ $sth->finish; >+ return \@r; >+} >+ >+sub set_infos { >+ my ( $version, $queries, $errors, $md5 ) = @_; >+ #SetVersion($DBversion) if not -s $errors; >+ for my $query ( @{ $$queries{queries} } ) { >+ my $sth = $dbh->prepare("INSERT INTO updatedb_query(version, query) VALUES (?, ?)"); >+ $sth->execute( $version, $query ); >+ $sth->finish; >+ } >+ for my $error ( @$errors ) { >+ my $sth = $dbh->prepare("INSERT INTO updatedb_error(version, error) VALUES (?, ?)"); >+ $sth->execute( $version, $error ); >+ } >+ my $sth = $dbh->prepare("INSERT INTO updatedb_report(version, md5, comment, status) VALUES (?, ?, ?, ?)"); >+ $sth->execute( >+ $version, >+ $md5, >+ join ('\n', @{ $$queries{comments} }), >+ ( @$errors > 0 ) ? 0 : 1 >+ ); >+} >+ >+sub mark_as_ok { >+ my ( $version ) = @_; >+ my $sth = $dbh->prepare( "UPDATE updatedb_report SET status = 2 WHERE version=?" ); >+ my $affected = $sth->execute( $version ); >+ if ( $affected < 1 ) { >+ # For "Coherency" >+ my $filepath = get_filepath $version; >+ my $queries = get_queries $filepath; >+ my $errors; >+ for my $query ( @{$$queries{queries}} ) { >+ eval { >+ check_coherency( $query ); >+ }; >+ if ( $@ ) { >+ push @$errors, $@ >+ } >+ } >+ >+ $_ =~ s/at [^ ]* line \d*\.$// for @$errors; >+ my $md5 = get_md5 $filepath; >+ set_infos $version, $queries, $errors, $md5; >+ >+ $sth->execute( $version ); >+ } >+ $sth->finish; >+} >+ >+=item TransformToNum >+ >+ Transform the Koha version from a 4 parts string >+ to a number, with just 1 . >+ >+=cut >+ >+sub TransformToNum { >+ my $version = shift; >+ >+ # remove the 3 last . to have a Perl number >+ $version =~ s/(.*\..*)\.(.*)\.(.*)/$1$2$3/; >+ return $version; >+} >+ >+sub SetVersion { >+ my $kohaversion = TransformToNum(shift); >+ if ( C4::Context->preference('Version') ) { >+ my $finish = $dbh->prepare("UPDATE systempreferences SET value=? WHERE variable='Version'"); >+ $finish->execute($kohaversion); >+ } else { >+ my $finish = $dbh->prepare( >+"INSERT IGNORE INTO systempreferences (variable,value,explanation) values ('Version',?,'The Koha database version. WARNING: Do not change this value manually, it is maintained by the webinstaller')" >+ ); >+ $finish->execute($kohaversion); >+ } >+} >+ >+1; >diff --git a/admin/ajax-updatedb-getinfos.pl b/admin/ajax-updatedb-getinfos.pl >new file mode 100755 >index 0000000..518785d >--- /dev/null >+++ b/admin/ajax-updatedb-getinfos.pl >@@ -0,0 +1,62 @@ >+#!/usr/bin/perl >+ >+# Copyright 2011 BibLibre >+# >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 2 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+=head1 NAME >+ >+ajax-updatedb-getinfos.pl >+ >+=head1 DESCRIPTION >+this script returns comments for a updatedatabase version >+ >+=back >+ >+=cut >+ >+use Modern::Perl; >+use CGI; >+use C4::Update::Database; >+ >+my $input = new CGI; >+my $version = $input->param('version'); >+ >+binmode STDOUT, ":utf8"; >+print $input->header(-type => 'text/plain', -charset => 'UTF-8'); >+my $filepath; >+my $queries; >+eval { >+ $filepath = C4::Update::Database::get_filepath( $version ); >+ $queries = C4::Update::Database::get_queries( $filepath ); >+}; >+if ( $@ ){ >+ print $@; >+ exit; >+} >+ >+if ( @{ $$queries{comments} } ) { >+ print "Comments : <br/>" . join ( "<br/>", @{ $$queries{comments} } ); >+} else { >+ print "No comment <br/>"; >+} >+ >+if ( @{ $$queries{queries} } ) { >+ print "<br/><br/>Queries : <br/>" . join ( "<br/>", @{ $$queries{queries} } ); >+} else { >+ print "<br/>No queries"; >+} >+ >diff --git a/admin/updatedatabase.pl b/admin/updatedatabase.pl >new file mode 100755 >index 0000000..854c759 >--- /dev/null >+++ b/admin/updatedatabase.pl >@@ -0,0 +1,101 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 2 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, write to the Free Software Foundation, Inc., >+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. >+ >+use Modern::Perl; >+use CGI; >+use C4::Auth; >+use C4::Output; >+use C4::Update::Database; >+ >+my $query = new CGI; >+my $op = $query->param('op') || 'list'; >+ >+my ( $template, $borrowernumber, $cookie ) = get_template_and_user( >+ { template_name => "admin/updatedatabase.tmpl", >+ query => $query, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { parameters => 1 }, # FIXME Add a new flag >+ } >+); >+ >+if ( $op eq 'update' ) { >+ my @versions = $query->param('version'); >+ @versions = sort { >+ C4::Update::Database::TransformToNum( $a ) <=> C4::Update::Database::TransformToNum( $b ) >+ } @versions; >+ >+ my @reports; >+ for my $version ( @versions ) { >+ push @reports, C4::Update::Database::execute_version $version; >+ } >+ >+ my @report_loop = map { >+ my ( $v, $r ) = each %$_; >+ my @errors = ref ( $r ) eq 'ARRAY' >+ ? >+ map { >+ { error => $_ } >+ } @$r >+ : >+ { error => $r }; >+ { >+ version => $v, >+ report => \@errors, >+ coherency => ( ref ( $r ) eq 'ARRAY' >+ ? @$r[0] =~ /COHERENCY/ ? 1 : 0 >+ : $r =~ /COHERENCY/ ? 1 : 0 ) >+ } >+ } @reports; >+ $template->param( report_loop => \@report_loop ); >+ >+ $op = 'list'; >+} >+ >+if ( $op eq 'mark_as_ok' ) { >+ my @versions = $query->param('version'); >+ C4::Update::Database::mark_as_ok $_ for @versions; >+ $op = 'list'; >+} >+ >+if ( $op eq 'list' ) { >+ my $versions_availables = C4::Update::Database::list_versions_availables; >+ my $versions = C4::Update::Database::list_versions_already_knows; >+ >+ for my $v ( @$versions_availables ) { >+ if ( not grep { $v eq $$_{version} } @$versions ) { >+ push @$versions, { >+ version => $v, >+ available => 1 >+ }; >+ } >+ } >+ my @sorted = sort { >+ C4::Update::Database::TransformToNum( $$a{version} ) <=> C4::Update::Database::TransformToNum( $$b{version} ) >+ } @$versions; >+ >+ my @availables = grep { defined $$_{available} and $$_{available} == 1 } @sorted; >+ my @v_availables = map { {version => $$_{version}} } @availables; >+ >+ $template->param( >+ versions => \@sorted, >+ nb_availables => scalar @availables, >+ availables => [ map { {version => $$_{version}} } @availables ], >+ ); >+} >+ >+output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/etc/update/database/config.yaml b/etc/update/database/config.yaml >new file mode 100644 >index 0000000..e04717a >--- /dev/null >+++ b/etc/update/database/config.yaml >@@ -0,0 +1 @@ >+versions_dir: installer/data/mysql/versions >diff --git a/installer/data/mysql/update.pl b/installer/data/mysql/update.pl >new file mode 100644 >index 0000000..deda00b >--- /dev/null >+++ b/installer/data/mysql/update.pl >@@ -0,0 +1,28 @@ >+use Modern::Perl; >+ >+use C4::Context; >+use C4::Update::Database; >+use Getopt::Long; >+ >+ >+my $version; >+my $list; >+ >+GetOptions( >+ 'm:s' => \$version, >+ 'l' => \$list, >+); >+ >+if ( $version ) { >+ my $report = C4::Update::Database::execute_version($version); >+} >+ >+if ( $list ) { >+ my $versions = C4::Update::Database::list_versions_availables(); >+ say "Versions availables:"; >+ say "\t- $_" for @$versions; >+ $versions = C4::Update::Database::list_versions_already_knows(); >+ say "Versions already knows:"; >+ say "\t- $$_{version}" for @$versions; >+ >+} >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 815a71d..e1841fd 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -4550,6 +4550,21 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { > SetVersion ($DBversion); > } > >+$DBversion = "3.06.00.XXX"; >+if (C4::Context->preference("Version") < TransformToNum($DBversion)) { >+ $dbh->do(qq{ >+ CREATE TABLE `updatedb_error` ( `version` varchar(32) DEFAULT NULL, `error` text ) ENGINE=InnoDB CHARSET=utf8; >+ }); >+ $dbh->do(qq{ >+ CREATE TABLE `updatedb_query` ( `version` varchar(32) DEFAULT NULL, `query` text ) ENGINE=InnoDB CHARSET=utf8; >+ }); >+ $dbh->do(qq{ >+ CREATE TABLE `updatedb_report` ( `version` text, `md5` varchar(50) DEFAULT NULL, `comment` text, `status` int(1) DEFAULT NULL ) ENGINE=InnoDB CHARSET=utf8; >+ }); >+ print "Upgrade to $DBversion done (Add tables for new updatedatabase version)\n"; >+ SetVersion ($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 DropAllForeignKeys($table) >diff --git a/installer/data/mysql/versions/skeleton.pl b/installer/data/mysql/versions/skeleton.pl >new file mode 100755 >index 0000000..27ecde5 >--- /dev/null >+++ b/installer/data/mysql/versions/skeleton.pl >@@ -0,0 +1,17 @@ >+#!/usr/bin/perl >+ >+use Modern::Perl; >+use C4::Update::Database; >+ >+sub _get_queries { >+ my @queries = ( >+ qq{INSERT INTO foo VALUES ('bar1')}, >+ qq{INSERT INTO foo VALUES ('bar2')}, >+ ); >+ my @comments = ( >+ qq{This is a test}, >+ ); >+ return { queries => \@queries, comments => \@comments }; >+} >+ >+1; >diff --git a/installer/data/mysql/versions/skeleton.sql b/installer/data/mysql/versions/skeleton.sql >new file mode 100644 >index 0000000..11d1cc9 >--- /dev/null >+++ b/installer/data/mysql/versions/skeleton.sql >@@ -0,0 +1,3 @@ >+-- This is a comment >+DELIMITER ; >+INSERT INTO foo values("bar"); >diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >index 7b38062..0a623e3 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css >@@ -2080,4 +2080,12 @@ div.pager input.pagedisplay { > background-color : transparent; > font-weight: bold; > text-align : center; >-} >\ No newline at end of file >+} >+ >+tr.dragClass td { >+ background-color: grey; >+ color: yellow; >+} >+.underline { >+ text-decoration : underline; >+} >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt >index fe76ae8..760d235 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt >@@ -98,6 +98,13 @@ > <dt><a href="/cgi-bin/koha/admin/z3950servers.pl">Z39.50 Client Targets</a></dt> > <dd>Define which servers to query for MARC data in the integrated Z39.50 client.</dd> > </dl> >+ >+<h3>Update Database</h3> >+<dl> >+ <dt><a href="/cgi-bin/koha/admin/updatedatabase.pl">Check your updates</a></dt> >+ <dd>Verify your database versions and execute new updates</dd> >+</dl> >+ > </div> > > </div> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/updatedatabase.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/updatedatabase.tt >new file mode 100644 >index 0000000..0ab5e8a >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/updatedatabase.tt >@@ -0,0 +1,171 @@ >+[% INCLUDE 'doc-head-open.inc' %] >+<title>Koha › Administration › Update Database</title> >+<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> >+[% INCLUDE 'doc-head-close.inc' %] >+<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script> >+<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script> >+<script type="text/javascript"> >+ //<![CDATA[ >+ $(document).ready(function() { >+ $("#versionst").dataTable({ >+ 'bAutoWidth': false, >+ 'sPaginationType': 'full_numbers' >+ } ); >+ } ); >+ function see_details(a){ >+ var div = $(a).siblings('div'); >+ $(div).slideToggle("fast", function() { >+ var isVisible = $(div).is(":visible"); >+ if ( isVisible ){$(a).text("Hide details");}else{$(a).text("Show details");} >+ } ); >+ } >+ function get_infos(version, node){ >+ $.ajax({ >+ url: "/cgi-bin/koha/admin/ajax-updatedb-getinfos.pl", >+ data: { >+ version: version >+ }, >+ success: function(data){ >+ $(node).replaceWith(data); >+ }, >+ }); >+ } >+//]]> >+</script> >+</head> >+<body> >+[% INCLUDE 'header.inc' %] >+[% INCLUDE 'cat-search.inc' %] >+ >+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › Update Database</div> >+ >+<div id="doc3" class="yui-t2"> >+ >+ <div id="bd"> >+ <div id="yui-main"> >+ <div class="yui-b"> >+ >+ <h2>Update Database</h2> >+ [% IF report_loop %] >+ <div class="report" style="display:block; margin:1em;"> >+ Report : >+ <ul> >+ [% FOREACH report_loo IN report_loop %] >+ <li> >+ [% report_loo.version %] -- >+ [% FOREACH r IN report_loo.report %] >+ [% r.error %]; >+ [% END %] >+ [% IF report_loo.coherency %] >+ [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% version %]">Mark as OK</a>] >+ [% END %] >+ </li> >+ [% END %] >+ </ul> >+ </div> >+ [% END %] >+ <span class="infos" style="display:block; margin:1em;"> >+ [% IF nb_availables %] >+ [% nb_availables %] versions are availables [ <a href="/cgi-bin/koha/admin/updatedatabase.pl?op=update[% FOREACH av IN availables %]&version=[% av.version %][% END %]">UPDATE</a> ] >+ [% ELSE %] >+ Your database is up to date >+ [% END %] >+ </span> >+ >+ <table id="versionst"> >+ <thead> >+ <tr> >+ <th>Version</th> >+ <th>Comments</th> >+ <th>Status</th> >+ <th>Launch</th> >+ <th>Details</th> >+ </tr> >+ </thead> >+ <tbody> >+ [% FOREACH v IN versions %] >+ <tr> >+ <td>[% v.version %]</td> >+ <td> >+ <ul class="comments"> >+ [% FOREACH c IN comments %] >+ <li>[% c.comment %]</li> >+ [% END %] >+ </ul> >+ </td> >+ <td> >+ [% IF v.available %] >+ Unknown >+ [% ELSE %] >+ [% IF v.status %] >+ <span style="color:green;">OK</span> >+ [% IF v.status == 2 %] >+ [FORCED] >+ [% END %] >+ [% ELSE %] >+ <span style="color:red;">Failed</span> >+ [% END %] >+ [% END %] >+ </td> >+ <td> >+ [% IF v.available %] >+ Available >+ [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=update&version=[% v.version %]">Execute</a>] >+ [% ELSE %] >+ Already executed >+ [% END %] >+ </td> >+ <td> >+ <div class="details" style="display:none;"> >+ [% IF v.available %] >+ Unknown >+ <span style="display:block;"><a href="#" onclick="get_infos('[% v.version %]', this); return false;">Get comments</a></span> >+ [% ELSE %] >+ <div class="queries" style="display:block;"> >+ <span class="underline">Queries</span> : >+ <ul> >+ [% FOREACH q IN v.queries %] >+ <li>[% q.query %]</li> >+ [% END %] >+ </ul> >+ </div> >+ [% IF v.status == 1 %] >+ <div class="status" style="display:block;"> >+ <span class="underline">Status</span> : >+ <span style="color:green;">OK</span> >+ </div> >+ [% ELSE %] >+ <div class="status" style="display:block;"> >+ <span class="underline">Status</span> : >+ [% IF v.status == 2 %] >+ <span style="color:green;">OK</span> >+ [FORCED] >+ [% ELSE %] >+ <span style="color:red;">Failed</span> >+ [<a href="/cgi-bin/koha/admin/updatedatabase.pl?op=mark_as_ok&version=[% v.version %]">Mark as OK</a>] >+ [% END %] >+ </div> >+ <div class="errors" style="display:block;"> >+ <span class="underline">Errors</span> : >+ <ul class="errors"> >+ [% FOREACH e IN v.errors %] >+ <li>[% e.error %]</li> >+ [% END %] >+ </ul> >+ </div> >+ [% END %] >+ [% END %] >+ </div> >+ <a href="#" onclick="see_details(this);return false;">Show details</a> >+ </td> >+ </tr> >+ [% END %] >+ </tbody> >+ </table> >+ >+ </div> >+ </div> >+ </div> >+ </div> >+ </div> >+ >-- >1.7.5.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7167
:
6377
|
6378
|
6379
|
6381
|
6414
|
6415
|
6416
|
6476
|
6477
|
6478
|
6479
|
6722
|
6832
|
7903
|
8178
|
9859
|
9860
|
9861
|
9862
|
10033
|
10034
|
10549
|
10666
|
10667
|
10668
|
10825
|
11129
|
11222
|
11223
|
11224
|
11225
|
11226
|
11227
|
11228
|
11229
|
11230
|
11231
|
11232
|
11235
|
11236
|
11237
|
11238
|
11239
|
11240
|
11241
|
11242
|
11243
|
11244
|
11245
|
11246
|
11571
|
13423
|
13424
|
13425
|
13426
|
13427
|
13428
|
13429
|
13430
|
13431
|
13432
|
13433
|
13434
|
13435
|
13436
|
13437
|
13456
|
13457
|
13509
|
13516
|
13517
|
13518
|
13519
|
13520
|
13521
|
13522
|
13523
|
13524
|
13525
|
13526
|
13527
|
13528
|
13529
|
13733
|
13734
|
13842
|
13845
|
13848
|
13851
|
13852
|
13853
|
13854
|
14310
|
16113
|
16114
|
16115
|
16116
|
16117
|
16596