#use SL::Auth;
use SL::DB::AuthClient;
+use SL::DB::Employee;
use SL::DBConnect;
use SL::DBUpgrade2;
use SL::DBUtils;
$self->create_schema_info_table($form, $dbh);
my $dbupdater = SL::DBUpgrade2->new(form => $form)->parse_dbupdate_controls;
- my $update_available = $dbupdater->update2_available($dbh);
+ my @unapplied_scripts = $dbupdater->unapplied_upgrade_scripts($dbh);
$dbh->disconnect;
- return LOGIN_OK() if !$update_available;
+ if (!@unapplied_scripts) {
+ SL::DB::Manager::Employee->update_entries_for_authorized_users;
+ return LOGIN_OK();
+ }
$form->{$_} = $::auth->client->{$_} for qw(dbname dbhost dbport dbuser dbpasswd);
$form->{$_} = $myconfig{$_} for qw(datestyle);
$form->{dbupdate} = "db" . $::auth->client->{dbname};
if ($form->{"show_dbupdate_warning"}) {
- print $form->parse_html_template("dbupgrade/warning");
+ print $form->parse_html_template("dbupgrade/warning", { unapplied_scripts => \@unapplied_scripts });
::end_of_request();
}
$SIG{QUIT} = 'IGNORE';
$self->dbupdate2(form => $form, updater => $dbupdater, database => $::auth->client->{dbname});
- SL::DBUpgrade2->new(form => $::form, auth => 1)->apply_admin_dbupgrade_scripts(0);
+
+ # If $self->dbupdate2 returns than this means all upgrade scripts
+ # have been applied successfully, none required user
+ # interaction. Otherwise the deeper layers would have called
+ # ::end_of_request() already, and return would not have returned to
+ # us. Therefore we can now use RDBO instances because their supposed
+ # table structures do match the actual structures. So let's ensure
+ # that the "employee" table contains the appropriate entries for all
+ # users authorized for the current client.
+ SL::DB::Manager::Employee->update_entries_for_authorized_users;
SL::System::InstallationLock->unlock;
# load chart of accounts
$dbupdater->process_query($dbh, "sql/$form->{chart}-chart.sql");
- my $query = qq|UPDATE defaults SET coa = ?, accounting_method = ?, profit_determination = ?, inventory_system = ?, curr = ?|;
+ $query = qq|UPDATE defaults SET coa = ?, accounting_method = ?, profit_determination = ?, inventory_system = ?, curr = ?|;
do_query($form, $dbh, $query, map { $form->{$_} } qw(chart accounting_method profit_determination inventory_system defaultcurrency));
$dbh->disconnect;
$main::lxdebug->leave_sub();
}
-sub dbsources_unused {
- $main::lxdebug->enter_sub();
-
- my ($self, $form) = @_;
-
- my %dbexcl = map { $_->dbname => 1 }
- grep { ($_->dbhost eq $form->{dbhost}) && ($_->dbport eq $form->{dbport}) }
- @{ SL::DB::Manager::AuthClient->get_all };
-
- $form->{only_acc_db} = 1;
-
- $dbexcl{$form->{dbdefault}} = 1;
- $dbexcl{$main::auth->{DB_config}->{db}} = 1;
-
- my @dbunused = grep { !$dbexcl{$_} } dbsources("", $form);
-
- $main::lxdebug->leave_sub();
-
- return @dbunused;
-}
-
sub calc_version {
$main::lxdebug->enter_sub(2);
sub cmp_script_version {
my ($a_from, $a_to, $b_from, $b_to);
my ($i, $res_a, $res_b);
- my ($my_a, $my_b) = ($a, $b);
+ my ($my_a, $my_b) = do { no warnings 'once'; ($a, $b) };
$my_a =~ s/.*-upgrade-//;
$my_a =~ s/.sql$//;
}
sub dbupdate2 {
- $main::lxdebug->enter_sub();
-
my ($self, %params) = @_;
my $form = $params{form};
my $dbupdater = $params{updater};
my $db = $params{database};
- my $rc = -2;
map { $_->{description} = SL::Iconv::convert($_->{charset}, 'UTF-8', $_->{description}) } values %{ $dbupdater->{all_controls} };
&dbconnect_vars($form, $db);
+ # Flush potentially held database locks.
+ $form->get_standard_dbh->commit;
+
my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options) or $form->dberror;
$dbh->do($form->{dboptions}) if ($form->{dboptions});
my @upgradescripts = $dbupdater->unapplied_upgrade_scripts($dbh);
- $dbh->disconnect and next if !@upgradescripts;
-
foreach my $control (@upgradescripts) {
- # apply upgrade
+ # Apply upgrade. Control will only return to us if the upgrade has
+ # been applied correctly and if the update has not requested user
+ # interaction.
$main::lxdebug->message(LXDebug->DEBUG2(), "Applying Update $control->{file}");
print $form->parse_html_template("dbupgrade/upgrade_message2", $control);
$dbupdater->process_file($dbh, "sql/Pg-upgrade2/$control->{file}", $control);
}
- $rc = 0;
$dbh->disconnect;
-
- $main::lxdebug->leave_sub();
-
- return $rc;
}
sub data {
+{ %{ $_[0] } }
}
+sub get_default_myconfig {
+ my ($self_or_class, %user_config) = @_;
+
+ return (
+ countrycode => 'de',
+ css_path => 'css', # Needed for menunew, see SL::Layout::Base::get_stylesheet_for_user
+ dateformat => 'dd.mm.yy',
+ numberformat => '1.000,00',
+ stylesheet => 'kivitendo.css',
+ timeformat => 'hh:mm',
+ %user_config,
+ );
+}
+
1;