#
#======================================================================
-my $menufile = "menu.ini";
-
use DBI;
use CGI;
use English qw(-no_match_vars);
use SL::Auth;
use SL::Form;
+use SL::Iconv;
use SL::Mailer;
use SL::User;
use SL::Common;
require "bin/mozilla/common.pl";
require "bin/mozilla/admin_groups.pl";
+require "bin/mozilla/admin_printer.pl";
use strict;
-our $cgi = new CGI('');
-our $form = new Form;
-our $locale = new Locale $main::language, "admin";
-our $auth = SL::Auth->new();
-
-if ($auth->session_tables_present()) {
- $auth->expire_sessions();
- $auth->restore_session();
- $auth->set_session_value('rpw', $form->{rpw});
-}
-
-# customization
-if (-f "bin/mozilla/custom_$form->{script}") {
- eval { require "bin/mozilla/custom_$form->{script}"; };
- $form->error($@) if ($@);
-}
-
-$form->{stylesheet} = "lx-office-erp.css";
-$form->{favicon} = "favicon.ico";
-
-if ($form->{action}) {
- if ($auth->authenticate_root($form->{rpw}, 0) != $auth->OK()) {
- $form->{error_message} = $locale->text('Incorrect Password!');
- adminlogin();
- exit;
- }
-
- $auth->create_or_refresh_session() if ($auth->session_tables_present());
+our $cgi;
+our $form;
+our $locale;
+our $auth;
- call_sub($locale->findsub($form->{action}));
+sub run {
+ $::lxdebug->enter_sub;
+ my $session_result = shift;
-} elsif ($auth->authenticate_root($form->{rpw}, 0) == $auth->OK()) {
+ $cgi = $::cgi;
+ $form = $::form;
+ $locale = $::locale;
+ $auth = $::auth;
- $auth->create_or_refresh_session() if ($auth->session_tables_present());
+ $::auth->set_session_value('rpw', $::form->{rpw}) if $session_result == SL::Auth->SESSION_OK;
- login();
+ $form->{stylesheet} = "lx-office-erp.css";
+ $form->{favicon} = "favicon.ico";
-} else {
- # if there are no drivers bail out
- $form->error($locale->text('No Database Drivers available!'))
- unless (User->dbdrivers);
+ if ($form->{action}) {
+ if ($auth->authenticate_root($form->{rpw}, 0) != $auth->OK()) {
+ $form->{error_message} = $locale->text('Incorrect Password!');
+ adminlogin();
+ } else {
+ if ($auth->session_tables_present()) {
+ $::auth->set_session_value('rpw', $::form->{rpw});
+ $::auth->create_or_refresh_session();
+ _apply_dbupgrade_scripts();
+ }
- adminlogin();
+ call_sub($locale->findsub($form->{action}));
+ }
+ } else {
+ # if there are no drivers bail out
+ $form->error($locale->text('No Database Drivers available!'))
+ unless (User->dbdrivers);
+ adminlogin();
+ }
+ $::lxdebug->leave_sub;
}
-1;
-
-# end
-
sub adminlogin {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{title} = qq|Lx-Office ERP $form->{version} | . $locale->text('Administration');
}
sub check_auth_db_and_tables {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my %params;
$form->header();
print $form->parse_html_template('admin/check_auth_database', \%params);
- exit 0;
+ ::end_of_request();
}
if (!$main::auth->check_tables()) {
$form->header();
print $form->parse_html_template('admin/check_auth_tables', \%params);
- exit 0;
+ ::end_of_request();
}
if (-f $main::memberfile) {
print $form->parse_html_template('admin/user_migration', { 'memberfile' => $main::memberfile,
'backupdir' => $backupdir });
- exit 0
+ ::end_of_request();
}
}
sub create_auth_db {
- my $form = $main::form;
+ my $form = $main::form;
$main::auth->create_database('superuser' => $form->{db_superuser},
- 'superuser_password' => $form->{db_superuser_password},
- 'template' => $form->{db_template});
+ 'superuser_password' => $form->{db_superuser_password},
+ 'template' => $form->{db_template});
login();
}
sub create_auth_tables {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$main::auth->create_tables();
$main::auth->set_session_value('rpw', $form->{rpw});
sub migrate_users {
$main::lxdebug->enter_sub();
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my $memberdir = "";
}
sub create_standard_group_ask {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{title} = $locale->text('Create a standard group');
}
sub create_standard_group {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my %members = $main::auth->read_all_users();
- my $groups = $main::auth->read_groups();
+ my $groups = $main::auth->read_groups();
foreach my $group (values %{$groups}) {
if (($form->{group_id} != $group->{id})
sub user_migration_complete {
my $standard_group_created = shift;
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{title} = $locale->text('User migration complete');
$form->header();
}
sub list_users {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my %members = $main::auth->read_all_users();
}
sub add_user {
+ my $form = $main::form;
+ my $locale = $main::locale;
- my $form = $main::form;
- my $locale = $main::locale;
-
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Administration') . " / "
- . $locale->text('Add User');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Administration') . " / " . $locale->text('Add User');
- my $myconfig = {
+# Note: Menu Style 'v3' is not compatible to all browsers!
+# "menustyle" => "old" sets the HTML Menu to default.
+ my $myconfig = {
"vclimit" => 200,
"countrycode" => "de",
"numberformat" => "1.000,00",
"dateformat" => "dd.mm.yy",
"stylesheet" => "lx-office-erp.css",
- "menustyle" => "v3",
+ "menustyle" => "old",
+ dbport => $::auth->{DB_config}->{port} || 5432,
+ dbuser => $::auth->{DB_config}->{user} || 'lxoffice',
+ dbhost => $::auth->{DB_config}->{host} || 'localhost',
};
+
edit_user_form($myconfig);
}
sub edit_user {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
-
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Administration') . " / "
- . $locale->text('Edit User');
- $form->{edit} = 1;
+ $form->{title} = "Lx-Office ERP " . $locale->text('Administration') . " / " . $locale->text('Edit User');
+ $form->{edit} = 1;
$form->isblank("login", $locale->text("The login is missing."));
sub edit_user_form {
my ($myconfig) = @_;
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my @valid_dateformats = qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd);
$form->{ALL_DATEFORMATS} = [ map { { "format" => $_, "selected" => $_ eq $myconfig->{dateformat} } } @valid_dateformats ];
}
sub save_user {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{dbdriver} = 'Pg';
$main::auth->change_password($form->{login}, $form->{new_password});
}
- my ($login, $password, $newfile);
- if ($main::webdav) {
- my @webdavdirs =
- qw(angebote bestellungen rechnungen anfragen lieferantenbestellungen einkaufsrechnungen);
- foreach my $directory (@webdavdirs) {
- my $file = "webdav/" . $directory . "/webdav-user";
- if ($form->{$directory}) {
- if (open(HTACCESS, "$file")) {
- while (<HTACCESS>) {
- ($login, $password) = split(/:/, $_);
- if ($login ne $form->{login}) {
- $newfile .= $_;
- }
- }
- close(HTACCESS);
- }
- open(HTACCESS, "> $file") or die "cannot open $file $ERRNO\n";
- $newfile .= $myconfig->{login} . ":" . $myconfig->{password} . "\n";
- print(HTACCESS $newfile);
- close(HTACCESS);
- } else {
- $form->{$directory} = 0;
- if (open(HTACCESS, "$file")) {
- while (<HTACCESS>) {
- ($login, $password) = split(/:/, $_);
- if ($login ne $form->{login}) {
- $newfile .= $_;
- }
- }
- close(HTACCESS);
- }
- open(HTACCESS, "> $file") or die "cannot open $file $ERRNO\n";
- print(HTACCESS $newfile);
- close(HTACCESS);
- }
- }
- }
-
$form->{templates} =~ s|.*/||;
$form->{templates} = "$main::templates/$form->{templates}";
$form->{mastertemplates} =~ s|.*/||;
}
sub save_user_as_new {
- my $form = $main::form;
+ my $form = $main::form;
$form->{login} = $form->{new_user_login};
delete @{$form}{qw(edit new_user_login)};
}
sub delete_user {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my %members = $main::auth->read_all_users();
my $templates = $members{$form->{login}}->{templates};
}
sub get_value {
- my $line = shift;
-
- my $form = $main::form;
-
+ my $line = shift;
my ($null, $value) = split(/=/, $line, 2);
# remove comments
}
sub pg_database_administration {
- my $form = $main::form;
+ my $form = $main::form;
$form->{dbdriver} = 'Pg';
dbselect_source();
}
sub dbselect_source {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{dbport} = '5432';
- $form->{dbuser} = 'postgres';
+ $form->{dbport} = $::auth->{DB_config}->{port} || 5432;
+ $form->{dbuser} = $::auth->{DB_config}->{user} || 'lxoffice';
$form->{dbdefault} = 'template1';
- $form->{dbhost} = 'localhost';
+ $form->{dbhost} = $::auth->{DB_config}->{host} || 'localhost';
$form->{title} = "Lx-Office ERP / " . $locale->text('Database Administration');
}
sub test_db_connection {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{dbdriver} = 'Pg';
User::dbconnect_vars($form, $form->{dbname});
}
sub update_dataset {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Update Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Update Dataset');
my @need_updates = User->dbneedsupdate($form);
$form->{NEED_UPDATES} = \@need_updates;
}
sub dbupdate {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{stylesheet} = "lx-office-erp.css";
$form->{title} = $locale->text("Dataset upgrade");
map { $form->{$_} = $form->{"${_}_${i}"} } qw(dbname dbdriver dbhost dbport dbuser dbpasswd);
- my $controls = parse_dbupdate_controls($form, $form->{dbdriver});
-
print $form->parse_html_template("admin/dbupgrade_header");
$form->{dbupdate} = $form->{dbname};
$form->{$form->{dbname}} = 1;
User->dbupdate($form);
- User->dbupdate2($form, $controls);
+ User->dbupdate2($form, SL::DBUpgrade2->new(form => $form, dbdriver => $form->{dbdriver})->parse_dbupdate_controls);
print $form->parse_html_template("admin/dbupgrade_footer");
}
}
sub create_dataset {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->{dbsources} = join " ", map { "[${_}]" } sort User->dbsources($form);
- $form->{CHARTS} = [];
+ $form->{CHARTS} = [];
opendir SQLDIR, "sql/." or $form->error($ERRNO);
foreach my $item (sort grep /-chart\.sql\z/, readdir SQLDIR) {
}
}
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Create Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
$form->header();
print $form->parse_html_template("admin/create_dataset");
}
sub dbcreate {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
$form->isblank("db", $locale->text('Dataset missing!'));
User->dbcreate(\%$form);
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Create Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Create Dataset');
$form->header();
print $form->parse_html_template("admin/dbcreate");
}
sub delete_dataset {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
my @dbsources = User->dbsources_unused($form);
$form->error($locale->text('Nothing to delete!')) unless @dbsources;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Delete Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
$form->{DBSOURCES} = [ map { { "name", $_ } } sort @dbsources ];
$form->header();
}
sub dbdelete {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
if (!$form->{db}) {
$form->error($locale->text('No Dataset selected!'));
User->dbdelete(\%$form);
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Delete Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Delete Dataset');
$form->header();
print $form->parse_html_template("admin/dbdelete");
}
sub backup_dataset {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Backup Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
if ("$main::pg_dump_exe" eq "DISABLED") {
$form->error($locale->text('Database backups and restorations are disabled in lx-erp.conf.'));
}
sub backup_dataset_start {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Backup Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
$main::pg_dump_exe ||= "pg_dump";
unlink "${tmpdir}/.pgpass", $tmp;
rmdir $tmpdir;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Backup Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Backup Dataset');
$form->header();
print $form->parse_html_template("admin/backup_dataset_email_done");
}
sub restore_dataset {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Restore Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
if ("$main::pg_restore_exe" eq "DISABLED") {
$form->error($locale->text('Database backups and restorations are disabled in lx-erp.conf.'));
}
sub restore_dataset_start {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
- $form->{title} =
- "Lx-Office ERP "
- . $locale->text('Database Administration') . " / "
- . $locale->text('Restore Dataset');
+ $form->{title} = "Lx-Office ERP " . $locale->text('Database Administration') . " / " . $locale->text('Restore Dataset');
$main::pg_restore_exe ||= "pg_restore";
}
sub unlock_system {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
unlink "$main::userspath/nologin";
}
sub lock_system {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
open(FH, ">$main::userspath/nologin")
or $form->error($locale->text('Cannot create Lock!'));
}
sub edit {
- my $form = $main::form;
+ my $form = $main::form;
$form->{edit_nextsub} ||= 'edit_user';
}
sub save {
- my $form = $main::form;
+ my $form = $main::form;
$form->{save_nextsub} ||= 'save_user';
}
sub dispatcher {
- my $form = $main::form;
- my $locale = $main::locale;
+ my $form = $main::form;
+ my $locale = $main::locale;
foreach my $action (qw(create_standard_group dont_create_standard_group
save_user delete_user save_user_as_new)) {
$form->error($locale->text('No action defined.'));
}
+sub _apply_dbupgrade_scripts {
+ ::end_of_request() if SL::DBUpgrade2->new(form => $::form, dbdriver => 'Pg', auth => 1)->apply_admin_dbupgrade_scripts(1);
+}
+
1;