Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0b280f98

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 0b280f98054da74f79cbc9fdb3e9f4c23326be53
  • Vorgänger 41a03969
  • Nachfolger 6da3168c

Administration: Die Funktion zur Aktualisierung von nicht aktuellen Datenbanken neu geschrieben und wieder aktiviert. Unterstützt auch die Scripte in Pg-upgrade2.

Unterschiede anzeigen:

SL/User.pm
40 40
use SL::DBUpgrade2;
41 41
use SL::DBUtils;
42 42
use SL::Iconv;
43
use SL::Inifile;
43 44

  
44 45
sub new {
45 46
  $main::lxdebug->enter_sub();
......
666 667

  
667 668
  my ($self, $form) = @_;
668 669

  
669
  my %dbsources = ();
670
  my $query;
671

  
672
  $form->{sid} = $form->{dbdefault};
673
  &dbconnect_vars($form, $form->{dbdefault});
674

  
675
  my $dbh =
676
    DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
677
    or $form->dberror;
678

  
679
  if ($form->{dbdriver} eq 'Pg') {
670
  my $members  = Inifile->new($main::memberfile);
671
  my $controls = parse_dbupdate_controls($form, $form->{dbdriver});
680 672

  
681
    $query =
682
      qq|SELECT d.datname FROM pg_database d, pg_user u | .
683
      qq|WHERE d.datdba = u.usesysid AND u.usename = ?|;
684
    my $sth = prepare_execute_query($form, $dbh, $query, $form->{dbuser});
673
  my ($query, $sth, %dbs_needing_updates);
685 674

  
686
    while (my ($db) = $sth->fetchrow_array) {
675
  foreach my $login (grep /[a-z]/, keys %{ $members }) {
676
    my $member = $members->{$login};
687 677

  
688
      next if ($db =~ /^template/);
678
    map { $form->{$_} = $member->{$_} } qw(dbname dbuser dbpasswd dbhost dbport);
679
    dbconnect_vars($form, $form->{dbname});
680
    $main::lxdebug->dump(0, "form", $form);
681
    my $dbh = DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd});
689 682

  
690
      &dbconnect_vars($form, $db);
683
    next unless $dbh;
691 684

  
692
      my $dbh2 =
693
        DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
694
        or $form->dberror;
685
    my $version;
695 686

  
696
      $query =
697
        qq|SELECT tablename FROM pg_tables | .
698
        qq|WHERE tablename = 'defaults'|;
699
      my $sth2 = prepare_execute_query($form, $dbh, $query);
700

  
701
      if ($sth2->fetchrow_array) {
702
        $query = qq|SELECT version FROM defaults|;
703
        my ($version) = selectrow_query($form, $dbh2, $query);
704
        $dbsources{$db} = $version;
705
      }
706
      $sth2->finish;
707
      $dbh2->disconnect;
687
    $query = qq|SELECT version FROM defaults|;
688
    $sth = prepare_query($form, $dbh, $query);
689
    if ($sth->execute()) {
690
      ($version) = $sth->fetchrow_array();
708 691
    }
709
    $sth->finish;
710
  }
711

  
712
  if ($form->{dbdriver} eq 'Oracle') {
713
    $query =
714
      qq|SELECT owner FROM dba_objects |.
715
      qq|WHERE object_name = 'DEFAULTS' AND object_type = 'TABLE'|;
716

  
717
    $sth = $dbh->prepare($query);
718
    $sth->execute || $form->dberror($query);
719

  
720
    while (my ($db) = $sth->fetchrow_array) {
721

  
722
      $form->{dbuser} = $db;
723
      &dbconnect_vars($form, $db);
724

  
725
      my $dbh =
726
        DBI->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd})
727
        or $form->dberror;
692
    $sth->finish();
693
    $dbh->disconnect();
728 694

  
729
      $query = qq|SELECT version FROM defaults|;
730
      my $sth = $dbh->prepare($query);
731
      $sth->execute;
695
    next unless $version;
732 696

  
733
      if (my ($version) = $sth->fetchrow_array) {
734
        $dbsources{$db} = $version;
735
      }
736
      $sth->finish;
737
      $dbh->disconnect;
697
    if (update_available($form->{dbdriver}, $version) || update2_available($form, $controls)) {
698
      my $dbinfo = {};
699
      map { $dbinfo->{$_} = $member->{$_} } grep /^db/, keys %{ $member };
700
      $dbs_needing_updates{$member->{dbhost} . "::" . $member->{dbname}} = $dbinfo;
738 701
    }
739
    $sth->finish;
740 702
  }
741 703

  
742
  $dbh->disconnect;
743

  
744 704
  $main::lxdebug->leave_sub();
745 705

  
746
  return %dbsources;
706
  return values %dbs_needing_updates;
747 707
}
748 708

  
749 709
sub calc_version {
......
793 753

  
794 754
  local *SQLDIR;
795 755

  
796
  opendir(SQLDIR, "sql/${dbdriver}-upgrade")
797
    or &error("", "sql/${dbdriver}-upgrade: $!");
798
  my @upgradescripts =
799
    grep(/$form->{dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)$/,
800
         readdir(SQLDIR));
801
  closedir(SQLDIR);
756
  opendir SQLDIR, "sql/${dbdriver}-upgrade" || error("", "sql/${dbdriver}-upgrade: $!");
757
  my @upgradescripts = grep /${dbdriver}-upgrade-\Q$cur_version\E.*\.(sql|pl)$/, readdir SQLDIR;
758
  closedir SQLDIR;
802 759

  
803 760
  return ($#upgradescripts > -1);
804 761
}
......
940 897

  
941 898
    map({ $_->{"applied"} = 0; } @upgradescripts);
942 899

  
900
    $self->create_schema_info_table($form, $dbh);
901

  
943 902
    $query = qq|SELECT tag FROM schema_info|;
944 903
    $sth = $dbh->prepare($query);
945 904
    $sth->execute() || $form->dberror($query);
bin/mozilla/admin.pl
41 41
use SL::User;
42 42
use SL::Common;
43 43
use SL::Inifile;
44
use SL::DBUpgrade2;
44 45

  
45 46
require "bin/mozilla/common.pl";
46 47

  
......
570 571
}
571 572

  
572 573
sub update_dataset {
573

  
574
  %needsupdate = User->dbneedsupdate(\%$form);
575

  
576 574
  $form->{title} =
577 575
      "Lx-Office ERP "
578 576
    . $locale->text('Database Administration') . " / "
579 577
    . $locale->text('Update Dataset');
580 578

  
581
  $form->header;
582

  
583
  print qq|
584
<body class=admin>
585

  
586

  
587
<center>
588
<h2>$form->{title}</h2>
589
|;
590
  my $field_id = 0;
591
  foreach $key (sort keys %needsupdate) {
592
    if ($needsupdate{$key} ne $form->{dbversion}) {
593
      $upd .= qq|<input id="$field_id" name="db$key" type="checkbox" value="1" checked> $key\n|;
594
      $form->{dbupdate} .= "db$key ";
595
      $field_id++;
596
    }
597
  }
598

  
599
  chop $form->{dbupdate};
600

  
601
  if ($form->{dbupdate}) {
602

  
603
    print qq|
604
<table width=100%>
605
<form method=post action=$form->{script}>
606

  
607
<input type=hidden name="dbhost"    value="$form->{dbhost}">
608
<input type=hidden name="dbport"    value="$form->{dbport}">
609
<input type=hidden name="dbuser"    value="$form->{dbuser}">
610
<input type=hidden name="dbpasswd"  value="$form->{dbpasswd}">
611
<input type=hidden name="dbdefault" value="$form->{dbdefault}">
579
  my @need_updates      = User->dbneedsupdate($form);
580
  $form->{NEED_UPDATES} = \@need_updates;
581
  $form->{ALL_UPDATED}  = !scalar @need_updates;
612 582

  
613
<tr class=listheading>
614
  <th>| . $locale->text('The following Datasets need to be updated') . qq|</th>
615
</tr>
616
<tr>
617
<td>
618

  
619
$upd
583
  $form->header();
584
  print $form->parse_html_template("admin/update_dataset");
585
}
620 586

  
621
</td>
622
</tr>
623
<tr>
624
<td>
587
sub dbupdate {
588
  $form->{stylesheet} = "lx-office-erp.css";
589
  $form->{title}      = $locale->text("Dataset upgrade");
590
  $form->header();
625 591

  
626
<input name=dbupdate type=hidden value="$form->{dbupdate}">
592
  my $rowcount           = $form->{rowcount} * 1;
593
  my @update_rows        = grep { $form->{"update_$_"} } (1 .. $rowcount);
594
  $form->{NOTHING_TO_DO} = !scalar @update_rows;
595
  my $saved_form         = save_form();
627 596

  
628
<input name=callback type=hidden value="$form->{script}?action=list_users&rpw=$form->{rpw}">
597
  $| = 1;
629 598

  
630
<input type=hidden name=rpw value=$form->{rpw}>
599
  print $form->parse_html_template("admin/dbupgrade_all_header");
631 600

  
632
<input type=hidden name=nextsub value=dbupdate>
601
  foreach my $i (@update_rows) {
602
    restore_form($saved_form);
633 603

  
634
<hr size=3 noshade>
604
    map { $form->{$_} = $form->{"${_}_${i}"} } qw(dbname dbdriver dbhost dbport dbuser dbpasswd);
635 605

  
636
<br>
637
<input type=submit class=submit name=action value="|
638
      . $locale->text('Continue') . qq|">
606
    my $controls = parse_dbupdate_controls($form, $form->{dbdriver});
639 607

  
640
</td></tr>
641
</table>
642
</form>
643
|;
608
    print $form->parse_html_template("admin/dbupgrade_header");
644 609

  
645
  } else {
610
    $form->{dbupdate}        = $form->{dbname};
611
    $form->{$form->{dbname}} = 1;
646 612

  
647
    print $locale->text('All Datasets up to date!');
613
    User->dbupdate($form);
614
    User->dbupdate2($form, $controls);
648 615

  
616
    print $form->parse_html_template("admin/dbupgrade_footer");
649 617
  }
650 618

  
651
  print qq|
652

  
653
</body>
654
</html>
655
|;
656

  
657
}
658

  
659
sub dbupdate {
660
  $form->{"stylesheet"} = "lx-office-erp.css";
661
  $form->{"title"} = $main::locale->text("Dataset upgrade");
662
  $form->header();
663
  my $dbname =
664
    join(" ",
665
         map({ s/\s//g; s/^db//; $_; }
666
             grep({ $form->{$_} }
667
                  split(/\s+/, $form->{"dbupdate"}))));
668
  print($form->parse_html_template("dbupgrade/header",
669
                                   { "dbname" => $dbname }));
670

  
671
  User->dbupdate(\%$form);
672

  
673
  print qq|
674
<hr>
675

  
676
| . $locale->text('Dataset updated!') . qq|
677

  
678
<br>
679

  
680
<a id="enddatasetupdate" href="admin.pl?action=login&| .
681
join("&", map({ "$_=" . $form->escape($form->{$_}); } qw(rpw))) .
682
qq|">| . $locale->text("Continue") . qq|</a>|;
683

  
619
  print $form->parse_html_template("admin/dbupgrade_all_done");
684 620
}
685 621

  
686 622
sub create_dataset {
locale/de/admin
3 3
  'Add User'                    => 'Benutzer erfassen',
4 4
  'Address'                     => 'Adresse',
5 5
  'Administration'              => 'Administration',
6
  'All Datasets up to date!'    => 'Alle Datenbanken sind auf aktuellem Stand.',
7 6
  'Attempt to call an undefined sub named \'%s\'' => 'Es wurde versucht, eine nicht definierte Unterfunktion namens \'%s\' aufzurufen.',
8 7
  'Bin List'                    => 'Lagerliste',
9 8
  'CANCELED'                    => 'Storniert',
10 9
  'Cannot create Lock!'         => 'System kann nicht gesperrt werden!',
11 10
  'Change Admin Password'       => 'Administratorpasswort ?ndern',
12 11
  'Confirmation'                => 'Auftragsbest?tigung',
13
  'Continue'                    => 'Weiter',
14 12
  'Create Dataset'              => 'Datenbank anlegen',
15 13
  'Credit Note'                 => 'Gutschrift',
16 14
  'Customer Number'             => 'Kundennummer',
......
20 18
  'Database Administration'     => 'Datenbankadministration',
21 19
  'Database User missing!'      => 'Datenbankbenutzer fehlt!',
22 20
  'Dataset missing!'            => 'Datenbank fehlt!',
23
  'Dataset updated!'            => 'Datenbank erneuert!',
24 21
  'Dataset upgrade'             => 'Datenbankaktualisierung',
25 22
  'Delete Dataset'              => 'Datenbank l?schen',
26 23
  'Dependency loop detected:'   => 'Schleife in den Abh&auml;ngigkeiten entdeckt:',
......
77 74
  'Storno Packing List'         => 'Stornolieferschein',
78 75
  'The \'tag\' field must only consist of alphanumeric characters or the carachters - _ ( )' => 'Das Feld \'tag\' darf nur aus alphanumerischen Zeichen und den Zeichen - _ ( ) bestehen.',
79 76
  'The directory %s does not exist.' => 'Das Verzeichnis %s existiert nicht.',
80
  'The following Datasets need to be updated' => 'Folgende Datenbanken m?ssen aktualisiert werden',
81 77
  'The login is missing.'       => 'Das Login fehlt.',
82 78
  'The passwords do not match.' => 'Die Passw&ouml;rter stimmen nicht &uuml;berein.',
83 79
  'Trying to call a sub without a name' => 'Es wurde versucht, eine Unterfunktion ohne Namen aufzurufen.',
locale/de/all
128 128
  'All Accounts'                => 'Alle Konten',
129 129
  'All Datasets up to date!'    => 'Alle Datenbanken sind auf aktuellem Stand.',
130 130
  'All changes in that file have been reverted.' => 'Alle &Auml;nderungen in dieser Datei wurden r&uuml;ckg&auml;ngig gemacht.',
131
  'All database upgrades have been applied.' => 'Alle Datenbankupdates wurden eingespielt.',
131 132
  'Amended Advance Turnover Tax Return' => 'Berichtigte Anmeldung',
132 133
  'Amended Advance Turnover Tax Return (Nr. 10)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererkl?rung)',
133 134
  'Amount'                      => 'Betrag',
......
323 324
  'Database update error:'      => 'Fehler beim Datenbankupgrade:',
324 325
  'Dataset'                     => 'Datenbank',
325 326
  'Dataset missing!'            => 'Datenbank fehlt!',
326
  'Dataset updated!'            => 'Datenbank erneuert!',
327 327
  'Dataset upgrade'             => 'Datenbankaktualisierung',
328 328
  'Date'                        => 'Datum',
329 329
  'Date Format'                 => 'Datumsformat',
......
699 699
  'No Dataset selected!'        => 'Keine Datenbank ausgew?hlt!',
700 700
  'No Vendor was found matching the search parameters.' => 'Zu dem Suchbegriff wurde kein H?ndler gefunden',
701 701
  'No customer has been selected yet.' => 'Es wurde noch kein Kunde ausgew?hlt.',
702
  'No datasets have been selected.' => 'Es wurden keine Datenbanken ausgew&auml;hlt.',
702 703
  'No employee was found matching the search parameters.' => 'Es wurde kein Angestellter gefunden, auf den die Suchparameter zutreffen.',
703 704
  'No entries were found which had no unit assigned to them.' => 'Es wurden keine Eintr&auml;ge gefunden, denen keine Einheit zugeordnet war.',
704 705
  'No licenses were found that match the search criteria.' => 'Es wurden keine Lizenzen gefunden, auf die die Suchkriterien zutreffen.',
......
1123 1124
  'Update Prices'               => 'Preise aktualisieren',
1124 1125
  'Update complete'             => 'Update beendet.',
1125 1126
  'Update prices'               => 'Preise aktualisieren',
1127
  'Update?'                     => 'Aktualisieren?',
1126 1128
  'Updated'                     => 'Erneuert am',
1127 1129
  'Use As Template'             => 'Als Vorlage verwenden',
1128 1130
  'Use Templates'               => 'benutze Vorlagen',
templates/webpages/admin/dbadmin_de.html
54 54
      <br>
55 55

  
56 56
      <input type="submit" class="submit" name="action" value="Datenbank anlegen">
57
      <!--       <input type="submit" class="submit" name="action" value="Datenbank aktualisieren"> -->
57
      <input type="submit" class="submit" name="action" value="Datenbank aktualisieren">
58 58
      <input type="submit" class="submit" name="action" value="Datenbank l?schen">
59 59
     </td>
60 60
    </tr>
templates/webpages/admin/dbadmin_master.html
54 54
      <br>
55 55

  
56 56
      <input type="submit" class="submit" name="action" value="<translate>Create Dataset</translate>">
57
      <!--       <input type="submit" class="submit" name="action" value="<translate>Update Dataset</translate>"> -->
57
      <input type="submit" class="submit" name="action" value="<translate>Update Dataset</translate>">
58 58
      <input type="submit" class="submit" name="action" value="<translate>Delete Dataset</translate>">
59 59
     </td>
60 60
    </tr>
templates/webpages/admin/dbupgrade_all_done_de.html
1
<TMPL_IF NOTHING_TO_DO>
2
 <p>Es wurden keine Datenbanken ausgew&auml;hlt.</p>
3

  
4
 <TMPL_ELSE>
5

  
6
 <hr>
7

  
8
 <p>Alle Datenbankupdates wurden eingespielt.</p>
9
</TMPL_IF>
10

  
11
<form method="post" action="admin.pl">
12
 <input type="hidden" name="nextsub" value="list_users">
13
 <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
14

  
15
 <input type="submit" name="action" value="Weiter">
16
</form>
17

  
18
</body>
19
</html>
templates/webpages/admin/dbupgrade_all_done_master.html
1
<TMPL_IF NOTHING_TO_DO>
2
 <p><translate>No datasets have been selected.</translate></p>
3

  
4
 <TMPL_ELSE>
5

  
6
 <hr>
7

  
8
 <p><translate>All database upgrades have been applied.</translate></p>
9
</TMPL_IF>
10

  
11
<form method="post" action="admin.pl">
12
 <input type="hidden" name="nextsub" value="list_users">
13
 <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
14

  
15
 <input type="submit" name="action" value="<translate>Continue</translate>">
16
</form>
17

  
18
</body>
19
</html>
templates/webpages/admin/dbupgrade_all_header_de.html
1
<body>
2

  
templates/webpages/admin/dbupgrade_all_header_master.html
1
<body>
2

  
templates/webpages/admin/dbupgrade_footer_de.html
1
<p>...fertig</p>
templates/webpages/admin/dbupgrade_footer_master.html
1
<p><translate>...done</translate></p>
templates/webpages/admin/dbupgrade_header_de.html
1
<div class="listtop" width="100%">Datenbankaktualisierung (<TMPL_VAR dbname ESCAPE=HTML>)</div>
templates/webpages/admin/dbupgrade_header_master.html
1
<div class="listtop" width="100%"><translate>Dataset upgrade</translate> (<TMPL_VAR dbname ESCAPE=HTML>)</div>
templates/webpages/admin/update_dataset_de.html
1
<body class="admin">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <TMPL_IF ALL_UPDATED>
6
  Alle Datenbanken sind auf aktuellem Stand.
7

  
8
  <TMPL_ELSE>
9

  
10
  <form method="post" action="admin.pl">
11

  
12
   <p>Folgende Datenbanken m?ssen aktualisiert werden:</p>
13

  
14
   <table>
15
    <tr>
16
     <th class="listtop">Aktualisieren?</th>
17
     <th class="listtop">Datenbank</th>
18
     <th class="listtop">Treiber</th>
19
     <th class="listtop">Datenbankcomputer</th>
20
     <th class="listtop">Port</th>
21
     <th class="listtop">Benutzer</th>
22
    </tr>
23

  
24
    <TMPL_LOOP NEED_UPDATES>
25
     <tr class="listrow<TMPL_IF __odd__>1<TMPL_ELSE>0</TMPL_IF>">
26
      <td><input type="checkbox" name="update_<TMPL_VAR __counter__>" value="1" checked></td>
27
      <td><input type="hidden" name="dbname_<TMPL_VAR __counter__>" value="<TMPL_VAR dbname ESCAPE=HTML>"><TMPL_VAR dbname ESCAPE=HTML></td>
28
      <td><input type="hidden" name="dbdriver_<TMPL_VAR __counter__>" value="Pg">PostgreSQL</td>
29
      <td><input type="hidden" name="dbhost_<TMPL_VAR __counter__>" value="<TMPL_VAR dbhost ESCAPE=HTML>"><TMPL_VAR dbhost ESCAPE=HTML></td>
30
      <td><input type="hidden" name="dbport_<TMPL_VAR __counter__>" value="<TMPL_VAR dbport ESCAPE=HTML>"><TMPL_VAR dbport ESCAPE=HTML></td>
31
      <td><input type="hidden" name="dbuser_<TMPL_VAR __counter__>" value="<TMPL_VAR dbuser ESCAPE=HTML>"><TMPL_VAR dbuser ESCAPE=HTML></td>
32
     </tr>
33

  
34
     <TMPL_IF __last__>
35
      <input type="hidden" name="rowcount" value="<TMPL_VAR __counter__>">
36
     </TMPL_IF>
37
    </TMPL_LOOP>
38
   </table>
39

  
40
   <input name="callback" type="hidden" value="admin.pl?action=list_users&rpw=<TMPL_VAR rpw ESCAPE=URL>">
41
   <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
42
   <input type="hidden" name="nextsub" value="dbupdate">
43

  
44
   <hr size="3" noshade>
45

  
46
   <br>
47

  
48
   <input type="submit" class="submit" name="action" value="Weiter">
49

  
50
  </form>
51

  
52
 </TMPL_IF>
53

  
54
</body>
55
</html>
templates/webpages/admin/update_dataset_master.html
1
<body class="admin">
2

  
3
 <h2><TMPL_VAR title></h2>
4

  
5
 <TMPL_IF ALL_UPDATED>
6
  <translate>All Datasets up to date!</translate>
7

  
8
  <TMPL_ELSE>
9

  
10
  <form method="post" action="admin.pl">
11

  
12
   <p><translate>The following Datasets need to be updated</translate>:</p>
13

  
14
   <table>
15
    <tr>
16
     <th class="listtop"><translate>Update?</translate></th>
17
     <th class="listtop"><translate>Dataset</translate></th>
18
     <th class="listtop"><translate>Driver</translate></th>
19
     <th class="listtop"><translate>Host</translate></th>
20
     <th class="listtop"><translate>Port</translate></th>
21
     <th class="listtop"><translate>User</translate></th>
22
    </tr>
23

  
24
    <TMPL_LOOP NEED_UPDATES>
25
     <tr class="listrow<TMPL_IF __odd__>1<TMPL_ELSE>0</TMPL_IF>">
26
      <td><input type="checkbox" name="update_<TMPL_VAR __counter__>" value="1" checked></td>
27
      <td><input type="hidden" name="dbname_<TMPL_VAR __counter__>" value="<TMPL_VAR dbname ESCAPE=HTML>"><TMPL_VAR dbname ESCAPE=HTML></td>
28
      <td><input type="hidden" name="dbdriver_<TMPL_VAR __counter__>" value="Pg">PostgreSQL</td>
29
      <td><input type="hidden" name="dbhost_<TMPL_VAR __counter__>" value="<TMPL_VAR dbhost ESCAPE=HTML>"><TMPL_VAR dbhost ESCAPE=HTML></td>
30
      <td><input type="hidden" name="dbport_<TMPL_VAR __counter__>" value="<TMPL_VAR dbport ESCAPE=HTML>"><TMPL_VAR dbport ESCAPE=HTML></td>
31
      <td><input type="hidden" name="dbuser_<TMPL_VAR __counter__>" value="<TMPL_VAR dbuser ESCAPE=HTML>"><TMPL_VAR dbuser ESCAPE=HTML></td>
32
     </tr>
33

  
34
     <TMPL_IF __last__>
35
      <input type="hidden" name="rowcount" value="<TMPL_VAR __counter__>">
36
     </TMPL_IF>
37
    </TMPL_LOOP>
38
   </table>
39

  
40
   <input name="callback" type="hidden" value="admin.pl?action=list_users&rpw=<TMPL_VAR rpw ESCAPE=URL>">
41
   <input type="hidden" name="rpw" value="<TMPL_VAR rpw ESCAPE=HTML>">
42
   <input type="hidden" name="nextsub" value="dbupdate">
43

  
44
   <hr size="3" noshade>
45

  
46
   <br>
47

  
48
   <input type="submit" class="submit" name="action" value="<translate>Continue</translate>">
49

  
50
  </form>
51

  
52
 </TMPL_IF>
53

  
54
</body>
55
</html>

Auch abrufbar als: Unified diff