]> wagnertech.de Git - mfinanz.git/blobdiff - bin/mozilla/admin.pl
"use"-Anweisungen gehören an den Anfang der Datei.
[mfinanz.git] / bin / mozilla / admin.pl
index ef985f40c3ec002588b3f15cd65de55252a279db..f3edde8e88588b33cdc700e2359672c0fa3c2cd1 100644 (file)
@@ -40,6 +40,8 @@ use CGI;
 use SL::Form;
 use SL::User;
 use SL::Common;
+use SL::Inifile;
+use SL::DBUpgrade2;
 
 require "bin/mozilla/common.pl";
 
@@ -156,16 +158,13 @@ sub add_user {
     . $locale->text('Administration') . " / "
     . $locale->text('Add User');
 
-  $form->{Oracle_sid}    = $sid;
-  $form->{Oracle_dbport} = '1521';
-  $form->{Oracle_dbhost} = `hostname`;
-
   my $myconfig = {
     "vclimit"      => 200,
     "countrycode"  => "de",
     "numberformat" => "1000,00",
     "dateformat"   => "dd.mm.yy",
     "stylesheet"   => "lx-office-erp.css",
+    "menustyle"    => "v3",
   };
 
   edit_user_form($myconfig);
@@ -249,8 +248,6 @@ sub edit_user_form {
 
   map { $form->{"myc_${_}"} = $myconfig->{$_} } keys %{ $myconfig };
 
-  map { $form->{"Pg_${_}"} = $myconfig->{$_} } qw(dbhost dbport dbname dbuser dbpasswd);
-
   # access control
   my @acsorder = ();
   my %acs      = ();
@@ -314,9 +311,7 @@ sub edit_user_form {
 
 sub save {
 
-  # no driver checked
-  $form->error($locale->text('Database Driver not checked!'))
-    unless $form->{dbdriver};
+  $form->{dbdriver} = 'Pg';
 
   # no spaces allowed in login name
   ($form->{login}) = split / /, $form->{login};
@@ -363,29 +358,8 @@ sub save {
   }
   $form->{acs} = join ";", @acs;
 
-  # check which database was filled in
-  if ($form->{dbdriver} eq 'Oracle') {
-    $form->{sid}      = $form->{Oracle_sid},;
-    $form->{dbhost}   = $form->{Oracle_dbhost},;
-    $form->{dbport}   = $form->{Oracle_dbport};
-    $form->{dbpasswd} = $form->{Oracle_dbpasswd};
-    $form->{dbuser}   = $form->{Oracle_dbuser};
-    $form->{dbname}   = $form->{Oracle_dbuser};
-
-    $form->isblank("dbhost", $locale->text('Hostname missing!'));
-    $form->isblank("dbport", $locale->text('Port missing!'));
-    $form->isblank("dbuser", $locale->text('Dataset missing!'));
-  }
-  if ($form->{dbdriver} eq 'Pg') {
-    $form->{dbhost}   = $form->{Pg_dbhost};
-    $form->{dbport}   = $form->{Pg_dbport};
-    $form->{dbpasswd} = $form->{Pg_dbpasswd};
-    $form->{dbuser}   = $form->{Pg_dbuser};
-    $form->{dbname}   = $form->{Pg_dbname};
-
-    $form->isblank("dbname", $locale->text('Dataset missing!'));
-    $form->isblank("dbuser", $locale->text('Database User missing!'));
-  }
+  $form->isblank("dbname", $locale->text('Dataset missing!'));
+  $form->isblank("dbuser", $locale->text('Database User missing!'));
 
   foreach $item (keys %{$form}) {
     $myconfig->{$item} = $form->{$item};
@@ -477,81 +451,28 @@ sub save {
 }
 
 sub delete {
-
-  $form->{templates} =
-    ($form->{templates})
-    ? "$templates/$form->{templates}"
-    : "$templates/$form->{login}";
-
   $form->error($locale->text('File locked!')) if (-f ${memberfile} . LCK);
   open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $!");
   close(FH);
 
-  open(CONF, "+<$memberfile") or $form->error("$memberfile : $!");
-
-  @config = <CONF>;
-
-  seek(CONF, 0, 0);
-  truncate(CONF, 0);
-
-  while ($line = shift @config) {
-
-    if ($line =~ /^\[/) {
-      last if ($line =~ /\[$form->{login}\]/);
-      $login = login_name($line);
-    }
-
-    if ($line =~ /^templates=/) {
-      $user{$login} = get_value($line);
-    }
-
-    print CONF $line;
-  }
-
-  # remove everything up to next login or EOF
-  # and save template variable
-  while ($line = shift @config) {
-    if ($line =~ /^templates=/) {
-      $templatedir = get_value($line);
-    }
-    last if ($line =~ /^\[/);
-  }
-
-  # this one is either the next login or EOF
-  print CONF $line;
-
-  $login = login_name($line);
-
-  while ($line = shift @config) {
-    if ($line =~ /^\[/) {
-      $login = login_name($line);
-    }
-
-    if ($line =~ /^templates=/) {
-      $user{$login} = get_value($line);
-    }
-
-    print CONF $line;
-  }
-
-  close(CONF);
+  my $members = Inifile->new($memberfile);
+  my $templates = $members->{$form->{login}}->{templates};
+  delete $members->{$form->{login}};
+  $members->write();
   unlink "${memberfile}.LCK";
 
-  # scan %user for $templatedir
-  foreach $login (keys %user) {
-    last if ($found = ($templatedir eq $user{$login}));
-  }
-
-  # if found keep directory otherwise delete
-  if (!$found) {
+  if ($templates) {
+    my $templates_in_use = 0;
+    foreach $login (keys %{ $members }) {
+      next if $login =~ m/^[A-Z]+$/;
+      next if $members->{$login}->{templates} ne $templates;
+      $templates_in_use = 1;
+      last;
+    }
 
-    # delete it if there is a template directory
-    $dir = "$form->{templates}";
-    if (-d "$dir") {
-      unlink <$dir/*.html>;
-      unlink <$dir/*.tex>;
-      unlink <$dir/*.sty>;
-      rmdir "$dir";
+    if (!$templates_in_use && -d $templates) {
+      unlink <$templates/*>;
+      rmdir $templates;
     }
   }
 
@@ -633,136 +554,16 @@ sub pg_database_administration {
 
 }
 
-sub oracle_database_administration {
-
-  $form->{dbdriver} = 'Oracle';
-  dbselect_source();
-
-}
-
-sub dbdriver_defaults {
-
-  # load some defaults for the selected driver
-  %driverdefaults = (
-                     'Pg' => { dbport        => '5432',
-                               dbuser        => 'postgres',
-                               dbdefault     => 'template1',
-                               dbhost        => 'localhost',
-                               connectstring => $locale->text('Connect to')
-                     },
-                     'Oracle' => { dbport        => '1521',
-                                   dbuser        => 'oralin',
-                                   dbdefault     => $sid,
-                                   dbhost        => `hostname`,
-                                   connectstring => 'SID'
-                     });
-
-  map { $form->{$_} = $driverdefaults{ $form->{dbdriver} }{$_} }
-    keys %{ $driverdefaults{Pg} };
-
-}
-
 sub dbselect_source {
+  $form->{dbport}    = '5432';
+  $form->{dbuser}    = 'postgres';
+  $form->{dbdefault} = 'template1';
+  $form->{dbhost}    = 'localhost';
 
-  dbdriver_defaults();
-
-  $msg{Pg} =
-    $locale->text(
-    'Leave host and port field empty unless you want to make a remote connection.'
-    );
-  $msg{Oracle} =
-    $locale->text(
-           'You must enter a host and port for local and remote connections!');
-
-  $form->{title} =
-    "Lx-Office ERP / " . $locale->text('Database Administration');
-
-  $form->header;
-
-  print qq|
-<body class=admin>
-
-
-<center>
-<h2>$form->{title}</h2>
-
-<form method=post action=$form->{script}>
-
-<table>
-<tr><td>
-
-<table>
-
-  <tr class=listheading>
-    <th colspan=4>| . $locale->text('Database') . qq|</th>
-  </tr>
-
-<input type=hidden name=dbdriver value=$form->{dbdriver}>
-
-  <tr><td>
-   <table>
-
-  <tr>
-
-    <th align=right>| . $locale->text('Host') . qq|</th>
-    <td><input name=dbhost size=25 value=$form->{dbhost}></td>
-    <th align=right>| . $locale->text('Port') . qq|</th>
-    <td><input name=dbport size=5 value=$form->{dbport}></td>
-
-  </tr>
-
-  <tr>
-
-    <th align=right>| . $locale->text('User') . qq|</th>
-    <td><input name="dbuser" size="10" value="$form->{dbuser}"></td>
-    <th align=right>| . $locale->text('Password') . qq|</th>
-    <td><input type="password" name="dbpasswd" size="10"></td>
-
-  </tr>
-
-  <tr>
-
-    <th align=right>$form->{connectstring}</th>
-    <td colspan=3><input name=dbdefault size=10 value=$form->{dbdefault}></td>
-
-  </tr>
-
-</table>
-
-</td></tr>
-</table>
-
-<input name=callback type=hidden value="$form->{script}?action=list_users&rpw=$form->{rpw}">
-<input type=hidden name=rpw value=$form->{rpw}>
-
-<br>
-
-<input type=submit class=submit name=action value="|
-    . $locale->text('Create Dataset') . qq|">|;
-# Vorübergehend Deaktiviert
-# <input type=submit class=submit name=action value="|
-#     . $locale->text('Update Dataset') . qq|">
-print qq| <input type=submit class=submit name=action value="|
-    . $locale->text('Delete Dataset') . qq|">
-
-</form>
-
-</td></tr>
-</table>
-
-<p>|
-    . $locale->text(
-    'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!'
-    )
-
-    . qq|
-<br>$msg{$form->{dbdriver}}
-
-
-</body>
-</html>
-|;
+  $form->{title}     = "Lx-Office ERP / " . $locale->text('Database Administration');
 
+  $form->header();
+  print $form->parse_html_template("admin/dbadmin");
 }
 
 sub continue {
@@ -770,118 +571,52 @@ sub continue {
 }
 
 sub update_dataset {
-
-  %needsupdate = User->dbneedsupdate(\%$form);
-
   $form->{title} =
       "Lx-Office ERP "
     . $locale->text('Database Administration') . " / "
     . $locale->text('Update Dataset');
 
-  $form->header;
-
-  print qq|
-<body class=admin>
+  my @need_updates      = User->dbneedsupdate($form);
+  $form->{NEED_UPDATES} = \@need_updates;
+  $form->{ALL_UPDATED}  = !scalar @need_updates;
 
+  $form->header();
+  print $form->parse_html_template("admin/update_dataset");
+}
 
-<center>
-<h2>$form->{title}</h2>
-|;
-  my $field_id = 0;
-  foreach $key (sort keys %needsupdate) {
-    if ($needsupdate{$key} ne $form->{dbversion}) {
-      $upd .= qq|<input id="$field_id" name="db$key" type="checkbox" value="1" checked> $key\n|;
-      $form->{dbupdate} .= "db$key ";
-      $field_id++;
-    }
-  }
-
-  chop $form->{dbupdate};
-
-  if ($form->{dbupdate}) {
-
-    print qq|
-<table width=100%>
-<form method=post action=$form->{script}>
-
-<input type=hidden name="dbdriver"  value="$form->{dbdriver}">
-<input type=hidden name="dbhost"    value="$form->{dbhost}">
-<input type=hidden name="dbport"    value="$form->{dbport}">
-<input type=hidden name="dbuser"    value="$form->{dbuser}">
-<input type=hidden name="dbpasswd"  value="$form->{dbpasswd}">
-<input type=hidden name="dbdefault" value="$form->{dbdefault}">
-
-<tr class=listheading>
-  <th>| . $locale->text('The following Datasets need to be updated') . qq|</th>
-</tr>
-<tr>
-<td>
-
-$upd
-
-</td>
-</tr>
-<tr>
-<td>
+sub dbupdate {
+  $form->{stylesheet} = "lx-office-erp.css";
+  $form->{title}      = $locale->text("Dataset upgrade");
+  $form->header();
 
-<input name=dbupdate type=hidden value="$form->{dbupdate}">
+  my $rowcount           = $form->{rowcount} * 1;
+  my @update_rows        = grep { $form->{"update_$_"} } (1 .. $rowcount);
+  $form->{NOTHING_TO_DO} = !scalar @update_rows;
+  my $saved_form         = save_form();
 
-<input name=callback type=hidden value="$form->{script}?action=list_users&rpw=$form->{rpw}">
+  $| = 1;
 
-<input type=hidden name=rpw value=$form->{rpw}>
+  print $form->parse_html_template("admin/dbupgrade_all_header");
 
-<input type=hidden name=nextsub value=dbupdate>
+  foreach my $i (@update_rows) {
+    restore_form($saved_form);
 
-<hr size=3 noshade>
+    map { $form->{$_} = $form->{"${_}_${i}"} } qw(dbname dbdriver dbhost dbport dbuser dbpasswd);
 
-<br>
-<input type=submit class=submit name=action value="|
-      . $locale->text('Continue') . qq|">
+    my $controls = parse_dbupdate_controls($form, $form->{dbdriver});
 
-</td></tr>
-</table>
-</form>
-|;
+    print $form->parse_html_template("admin/dbupgrade_header");
 
-  } else {
+    $form->{dbupdate}        = $form->{dbname};
+    $form->{$form->{dbname}} = 1;
 
-    print $locale->text('All Datasets up to date!');
+    User->dbupdate($form);
+    User->dbupdate2($form, $controls);
 
+    print $form->parse_html_template("admin/dbupgrade_footer");
   }
 
-  print qq|
-
-</body>
-</html>
-|;
-
-}
-
-sub dbupdate {
-  $form->{"stylesheet"} = "lx-office-erp.css";
-  $form->{"title"} = $main::locale->text("Dataset upgrade");
-  $form->header();
-  my $dbname =
-    join(" ",
-         map({ s/\s//g; s/^db//; $_; }
-             grep({ $form->{$_} }
-                  split(/\s+/, $form->{"dbupdate"}))));
-  print($form->parse_html_template("dbupgrade/header",
-                                   { "dbname" => $dbname }));
-
-  User->dbupdate(\%$form);
-
-  print qq|
-<hr>
-
-| . $locale->text('Dataset updated!') . qq|
-
-<br>
-
-<a id="enddatasetupdate" href="admin.pl?action=login&| .
-join("&", map({ "$_=" . $form->escape($form->{$_}); } qw(rpw))) .
-qq|">| . $locale->text("Continue") . qq|</a>|;
-
+  print $form->parse_html_template("admin/dbupgrade_all_done");
 }
 
 sub create_dataset {