diff options
| -rwxr-xr-x | bin/mozilla/admin.pl | 2296 |
1 files changed, 1069 insertions, 1227 deletions
diff --git a/bin/mozilla/admin.pl b/bin/mozilla/admin.pl index d552e4ca..5a3c0ef3 100755 --- a/bin/mozilla/admin.pl +++ b/bin/mozilla/admin.pl @@ -23,7 +23,7 @@ # #====================================================================== # -# This file has NOT undergone whitespace cleanup. +# This file has undergone whitespace cleanup. # #====================================================================== # @@ -54,36 +54,34 @@ require "$form->{path}/pw.pl"; # customization if (-f "$form->{path}/custom_$form->{script}") { - eval { require "$form->{path}/custom_$form->{script}"; }; - $form->error($@) if ($@); + eval { require "$form->{path}/custom_$form->{script}"; }; + $form->error($@) if ($@); } if ($form->{action}) { - &check_password unless $form->{action} eq 'logout'; - - &{ $locale->findsub($form->{action}) }; - -} else { + &check_password unless $form->{action} eq 'logout'; + &{ $locale->findsub($form->{action}) }; - # if there are no drivers bail out - $form->error($locale->text('No Database Drivers available!')) unless (User->dbdrivers); +} else { - # create memberfile - if (! -f $memberfile) { - open(FH, ">$memberfile") or $form->error("$memberfile : $!"); - print FH qq|# LedgerSMB Accounting members + # if there are no drivers bail out + $form->error($locale->text('No Database Drivers available!')) unless (User->dbdrivers); -[root login] -password= + # create memberfile + if (! -f $memberfile) { + open(FH, ">$memberfile") or $form->error("$memberfile : $!"); + print FH qq|# LedgerSMB Accounting members -|; - close FH; - } + [root login] + password= - &adminlogin; + |; + close FH; + } + &adminlogin; } 1; @@ -92,1564 +90,1408 @@ password= sub adminlogin { - $form->{title} = qq|LedgerSMB $form->{version} |.$locale->text('Administration'); - - $myheaderadd = qq| -<script language="JavaScript" type="text/javascript"> -<!-- -function sf(){ - document.admin.password.focus(); -} -// End --> -</script> - |; - $form->header(undef, $headeradd); - - print qq| -<body class=admin onload="sf()"> - -<div align=center> - -<a href="http://sourceforge.net/projects/ledger-smb/"><img src="ledger-smb.png" width="200" height="100" border="0" alt="LedgerSMB Logo"></a> -<h1 class=login>|.$locale->text('Version').qq| $form->{version}<p>|.$locale->text('Administration').qq|</h1> - -<form method=post action="$form->{script}" name=admin> - -<table> - <tr> - <th>|.$locale->text('Password').qq|</th> - <td><input type=password name=password></td> - <td><input type=submit class=submit name=action value="|.$locale->text('Login').qq|"></td> - </tr> -<input type=hidden name=action value=login> -<input type=hidden name=path value=$form->{path}> -</table> + $form->{title} = qq|LedgerSMB $form->{version} |.$locale->text('Administration'); -</form> + $myheaderadd = qq| + <script language="JavaScript" type="text/javascript"> + <!-- + function sf(){ + document.admin.password.focus(); + } + // End --> + </script> + |; + $form->header(undef, $myheaderadd); -<a href="http://sourceforge.net/projects/ledger-smb/">LedgerSMB |.$locale->text('website').qq|</a> + print qq| + <body class="admin" onload="sf()"> + <div align="center"> + <a href="http://sourceforge.net/projects/ledger-smb/"><img src="ledger-smb.png" width="200" height="100" border="0" alt="LedgerSMB Logo" /></a> + <h1 class="login">|.$locale->text('Version').qq| $form->{version} <br />|.$locale->text('Administration').qq|</h1> + <form method="post" action="$form->{script}" name="admin"> + <table> + <tr> + <th>|.$locale->text('Password').qq|</th> + <td><input type="password" name="password" /></td> + <td><input type="submit" class="submit" name="action" value="|.$locale->text('Login').qq|" /></td> + </tr> + </table> + <input type="hidden" name="action" value="login" /> + <input type="hidden" name="path" value="$form->{path}" /> + </form> -</div> - -</body> -</html> -|; + <a href="http://sourceforge.net/projects/ledger-smb/">LedgerSMB |.$locale->text('website').qq|</a> + </div> + </body> + </html> + |; } sub login { - &list_users; - + &list_users; } sub logout { - $form->{callback} = "$form->{script}?path=$form->{path}&endsession=1"; - unlink "$userspath/adminhash"; - print qq|Set-Cookie: LedgerSMB=; path=/;\n|; - $form->redirect($locale->text('You are logged out')); + $form->{callback} = "$form->{script}?path=$form->{path}&endsession=1"; + unlink "$userspath/adminhash"; + print qq|Set-Cookie: LedgerSMB=; path=/;\n|; + $form->redirect($locale->text('You are logged out')); } sub add_user { - - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Add User'); - $form->{Oracle_sid} = $sid; - $form->{Oracle_dbport} = '1521'; - $form->{Oracle_dbhost} = `hostname`; + $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Add User'); - if (-f "css/ledger-smb.css") { - $myconfig->{stylesheet} = "ledger-smb.css"; - } - $myconfig->{vclimit} = 1000; - $myconfig->{menuwidth} = 155; - $myconfig->{timeout} = 3600; - - &form_header; - &form_footer; - -} + if (-f "css/ledger-smb.css") { + $myconfig->{stylesheet} = "ledger-smb.css"; + } + $myconfig->{vclimit} = 1000; + $myconfig->{menuwidth} = 155; + $myconfig->{timeout} = 3600; + &form_header; + &form_footer; +} -sub edit { - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Edit User'); - $form->{edit} = 1; +sub edit { - &form_header; - &form_footer; + $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Edit User'); + $form->{edit} = 1; + &form_header; + &form_footer; } sub form_footer { - if ($form->{edit}) { - $delete = qq|<input type=submit class=submit name=action value="|.$locale->text('Delete').qq|"> -<input type=hidden name=edit value=1>|; - } - - print qq| - -<input name=callback type=hidden value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> - -<input type=hidden name=path value=$form->{path}> -<input type=hidden name=sessionid value=$form->{sessionid}> - -<input type=submit class=submit name=action value="|.$locale->text('Save').qq|"> -$delete - -</form> - -</body> -</html> -|; + if ($form->{edit}) { + $delete = qq|<input type="submit" class="submit" name="action" value="|.$locale->text('Delete').qq|" /> + <input type="hidden" name="edit" value="1" />|; + } + print qq| + <input name="callback" type="hidden" value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}" /> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Save').qq|" /> + $delete + </form> + </body> + </html> + |; } sub list_users { - open(FH, "$memberfile") or $form->error("$memberfile : $!"); + open(FH, "$memberfile") or $form->error("$memberfile : $!"); - $nologin = qq| -<input type=submit class=submit name=action value="|.$locale->text('Lock System').qq|">|; + $nologin = qq|<input type="submit" class="submit" name="action" value="|.$locale->text('Lock System').qq|" />|; - if (-e "$userspath/nologin") { - $nologin = qq| -<input type=submit class=submit name=action value="|.$locale->text('Unlock System').qq|">|; - } + if (-e "$userspath/nologin") { + $nologin = qq|<input type="submit" class="submit" name="action" value="|.$locale->text('Unlock System').qq|" />|; + } - while (<FH>) { - chop; - - if (/^\[.*\]/) { - $login = $_; - $login =~ s/(\[|\])//g; - } + while (<FH>) { + chop; - if (/^(name=|company=|templates=|dbuser=|dbdriver=|dbname=|dbhost=)/) { - chop ($var = $&); - ($null, $member{$login}{$var}) = split /=/, $_, 2; - } - } - - close(FH); + if (/^\[.*\]/) { + $login = $_; + $login =~ s/(\[|\])//g; + } -# type=submit $locale->text('Pg Database Administration') -# type=submit $locale->text('PgPP Database Administration') -# type=submit $locale->text('Oracle Database Administration') + if (/^(name=|company=|templates=|dbuser=|dbdriver=|dbname=|dbhost=)/) { + chop ($var = $&); + ($null, $member{$login}{$var}) = split /=/, $_, 2; + } + } - foreach $item (User->dbdrivers) { - $dbdrivers .= qq|<input name=action type=submit class=submit value="|.$locale->text("$item Database Administration").qq|">|; - } + close(FH); + # type=submit $locale->text('Pg Database Administration') + # type=submit $locale->text('PgPP Database Administration') - $column_header{login} = qq|<th>|.$locale->text('Login').qq|</th>|; - $column_header{name} = qq|<th>|.$locale->text('Name').qq|</th>|; - $column_header{company} = qq|<th>|.$locale->text('Company').qq|</th>|; - $column_header{dbdriver} = qq|<th>|.$locale->text('Driver').qq|</th>|; - $column_header{dbhost} = qq|<th>|.$locale->text('Host').qq|</th>|; - $column_header{dataset} = qq|<th>|.$locale->text('Dataset').qq|</th>|; - $column_header{templates} = qq|<th>|.$locale->text('Templates').qq|</th>|; + foreach $item (User->dbdrivers) { + $dbdrivers .= qq|<input name="action" type="submit" class="submit" value="|.$locale->text("$item Database Administration").qq|" />|; + } - @column_index = qw(login name company dbdriver dbhost dataset templates); - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration'); + $column_header{login} = qq|<th>|.$locale->text('Login').qq|</th>|; + $column_header{name} = qq|<th>|.$locale->text('Name').qq|</th>|; + $column_header{company} = qq|<th>|.$locale->text('Company').qq|</th>|; + $column_header{dbdriver} = qq|<th>|.$locale->text('Driver').qq|</th>|; + $column_header{dbhost} = qq|<th>|.$locale->text('Host').qq|</th>|; + $column_header{dataset} = qq|<th>|.$locale->text('Dataset').qq|</th>|; + $column_header{templates} = qq|<th>|.$locale->text('Templates').qq|</th>|; - $form->{login} = "root login"; - $form->header; + @column_index = qw(login name company dbdriver dbhost dataset templates); - print qq| -<body class=admin> + $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Administration'); -<form method=post action=$form->{script}> + $form->{login} = "root login"; + $form->header; -<table width=100%> - <tr> - <tr class=listheading> - <th>$form->{title}</th> - </tr> - <tr size=5></tr> - <tr> - <td> - <table width=100%> - <tr class=listheading>|; + print qq| + <body class="admin"> + <form method="post" action="$form->{script}"> + <table width="100%"> + <tr class="listheading"> + <th>$form->{title}</th> + </tr> + <tr size="5"></tr> + <tr> + <td> + <table width="100%"> + <tr class="listheading">|; - for (@column_index) { print "$column_header{$_}\n" } - - print qq| - </tr> -|; + for (@column_index) { print "$column_header{$_}\n" } -foreach $key (sort keys %member) { - $href = "$script?action=edit&login=$key&path=$form->{path}&sessionid=$form->{sessionid}"; - $href =~ s/ /%20/g; - - $member{$key}{templates} =~ s/^$templates\///; - $member{$key}{dbhost} = $locale->text('localhost') unless $member{$key}{dbhost}; - $member{$key}{dbname} = $member{$key}{dbuser} if ($member{$key}{dbdriver} eq 'Oracle'); + print qq| </tr>|; - $column_data{login} = qq|<td><a href=$href>$key</a></td>|; - $column_data{name} = qq|<td>$member{$key}{name}</td>|; - $column_data{company} = qq|<td>$member{$key}{company}</td>|; - $column_data{dbdriver} = qq|<td>$member{$key}{dbdriver}</td>|; - $column_data{dbhost} = qq|<td>$member{$key}{dbhost}</td>|; - $column_data{dataset} = qq|<td>$member{$key}{dbname}</td>|; - $column_data{templates} = qq|<td>$member{$key}{templates}</td>|; - - $i++; $i %= 2; - print qq| - <tr class=listrow$i>|; + foreach $key (sort keys %member) { - for (@column_index) { print "$column_data{$_}\n" } + $href = "$script?action=edit&login=$key&path=$form->{path}&sessionid=$form->{sessionid}"; + $href =~ s/ /%20/g; - print qq| - </tr>|; -} + $member{$key}{templates} =~ s/^$templates\///; + $member{$key}{dbhost} = $locale->text('localhost') unless $member{$key}{dbhost}; + $column_data{login} = qq|<td><a href="$href">$key</a></td>|; + $column_data{name} = qq|<td>$member{$key}{name}</td>|; + $column_data{company} = qq|<td>$member{$key}{company}</td>|; + $column_data{dbdriver} = qq|<td>$member{$key}{dbdriver}</td>|; + $column_data{dbhost} = qq|<td>$member{$key}{dbhost}</td>|; + $column_data{dataset} = qq|<td>$member{$key}{dbname}</td>|; + $column_data{templates} = qq|<td>$member{$key}{templates}</td>|; -print qq| - </table> - </td> - </tr> - <tr> - <td><hr size=3 noshade></td> - </tr> -</table> + $i++; $i %= 2; + print qq| <tr class="listrow$i">|; -<input type=hidden name=path value=$form->{path}> -<input type=hidden name=sessionid value=$form->{sessionid}> + for (@column_index) { print "$column_data{$_}\n"; } -<br><input type=submit class=submit name=action value="|.$locale->text('Add User').qq|"> -<input type=submit class=submit name=action value="|.$locale->text('Change Admin Password').qq|"> + print qq| </tr>|; + } -$dbdrivers -$nologin -<input type=submit class=submit name=action value="|.$locale->text('Logout').qq|"> + print qq| </table> + </td> + </tr> + <tr> + <td><hr size="3" noshade /></td> + </tr> + </table> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <br /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Add User').qq|" /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Change Admin Password').qq|" /> -</form> + $dbdrivers + $nologin -|.$locale->text('Click on login name to edit!').qq| -<br> -|.$locale->text('To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.').qq| + <input type="submit" class="submit" name="action" value="|.$locale->text('Logout').qq|" /> + </form> -</body> -</html> -|; + |.$locale->text('Click on login name to edit!').qq| + <br /> + |.$locale->text('To add a user to a group edit a name, change the login name and save. A new user with the same variables will then be saved under the new login name.').qq| + </body> + </html>|; } sub form_header { - # if there is a login, get user - if ($form->{login}) { - # get user - $myconfig = new User "$memberfile", "$form->{login}"; - - for (qw(company address signature)) { $myconfig->{$_} = $form->quote($myconfig->{$_}) } - for (qw(address signature)) { $myconfig->{$_} =~ s/\\n/\n/g } + # if there is a login, get user + if ($form->{login}) { - # strip basedir from templates directory - $myconfig->{templates} =~ s/^$templates\///; + # get user + $myconfig = new User "$memberfile", "$form->{login}"; - $myconfig->{dbpasswd} = unpack 'u', $myconfig->{dbpasswd}; - } + for (qw(company address signature)) { $myconfig->{$_} = $form->quote($myconfig->{$_}) } + for (qw(address signature)) { $myconfig->{$_} =~ s/\\n/\n/g } - foreach $item (qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd)) { - $dateformat .= ($item eq $myconfig->{dateformat}) ? "<option selected>$item\n" : "<option>$item\n"; - } + # strip basedir from templates directory + $myconfig->{templates} =~ s/^$templates\///; + $myconfig->{dbpasswd} = unpack 'u', $myconfig->{dbpasswd}; + } - foreach $item (qw(1,000.00 1000.00 1.000,00 1000,00 1'000.00)) { - $numberformat .= ($item eq $myconfig->{numberformat}) ? "<option selected>$item\n" : "<option>$item\n"; - } + foreach $item (qw(mm-dd-yy mm/dd/yy dd-mm-yy dd/mm/yy dd.mm.yy yyyy-mm-dd)) { + $dateformat .= ($item eq $myconfig->{dateformat}) ? "<option selected>$item</option>\n" : "<option>$item</option>\n"; + } + foreach $item (qw(1,000.00 1000.00 1.000,00 1000,00 1'000.00)) { + $numberformat .= ($item eq $myconfig->{numberformat}) ? "<option selected>$item</option>\n" : "<option>$item</option>\n"; + } - %countrycodes = User->country_codes; - $countrycodes = ""; - - foreach $key (sort { $countrycodes{$a} cmp $countrycodes{$b} } keys %countrycodes) { - $countrycodes .= ($myconfig->{countrycode} eq $key) ? "<option selected value=$key>$countrycodes{$key}" : "<option value=$key>$countrycodes{$key}"; - } - $countrycodes = qq|<option value="">English\n$countrycodes|; - # is there a templates basedir - if (! -d "$templates") { - $form->error($locale->text('Directory').": $templates ".$locale->text('does not exist')); - } + %countrycodes = User->country_codes; + $countrycodes = ""; - opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); - @all = grep !/^\.\.?$/, readdir TEMPLATEDIR; - closedir TEMPLATEDIR; + foreach $key (sort { $countrycodes{$a} cmp $countrycodes{$b} } keys %countrycodes) { + $countrycodes .= ($myconfig->{countrycode} eq $key) ? qq|<option selected value="$key">$countrycodes{$key}</option>| + : qq|<option value="$key">$countrycodes{$key}</option>|; + } - @allhtml = sort grep /\.html/, @all; + $countrycodes = qq|<option value="">English</option>\n$countrycodes|; - @alldir = (); - for (@all) { - if (-d "$templates/$_") { - push @alldir, $_; - } - } - - @allhtml = reverse grep !/Default/, @allhtml; - push @allhtml, 'Default'; - @allhtml = reverse @allhtml; - - foreach $item (sort @alldir) { - if ($item eq $myconfig->{templates}) { - $usetemplates .= qq|<option selected>$item\n|; - } else { - $usetemplates .= qq|<option>$item\n|; - } - } - - $lastitem = $allhtml[0]; - $lastitem =~ s/-.*//g; - $mastertemplates = qq|<option>$lastitem\n|; - foreach $item (@allhtml) { - $item =~ s/-.*//g; - - if ($item ne $lastitem) { - $mastertemplates .= qq|<option>$item\n|; - $lastitem = $item; - } - } + # is there a templates basedir + if (! -d "$templates") { + $form->error($locale->text('Directory').": $templates ".$locale->text('does not exist')); + } - opendir CSS, "css/."; - @all = grep /.*\.css$/, readdir CSS; - closedir CSS; - - foreach $item (@all) { - if ($item eq $myconfig->{stylesheet}) { - $selectstylesheet .= qq|<option selected>$item\n|; - } else { - $selectstylesheet .= qq|<option>$item\n|; - } - } - $selectstylesheet .= "<option>\n"; - - if (%printer && $latex) { - $selectprinter = "<option>\n"; - foreach $item (sort keys %printer) { - if ($myconfig->{printer} eq $item) { - $selectprinter .= qq|<option value="$item" selected>$item\n|; - } else { - $selectprinter .= qq|<option value="$item">$item\n|; - } - } + opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); + @all = grep !/^\.\.?$/, readdir TEMPLATEDIR; + closedir TEMPLATEDIR; - $printer = qq| - <tr> - <th align=right>|.$locale->text('Printer').qq|</th> - <td><select name=printer>$selectprinter</select></td> - </tr> -|; + @allhtml = sort grep /\.html/, @all; - } - - $user = $form->{login}; - $form->{login} = "root login"; - $form->header; - $form->{login} = $user; - - print qq| -<body class=admin> + @alldir = (); + for (@all) { -<form method=post action=$form->{script}> + if (-d "$templates/$_") { + push @alldir, $_; + } + } -<table width=100%> - <tr class=listheading><th colspan=2>$form->{title}</th></tr> - <tr size=5></tr> - <tr valign=top> - <td> - <table> - <tr> - <th align=right>|.$locale->text('Login').qq|</th> - <td><input name=login value="$myconfig->{login}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('Password').qq|</th> - <td><input type=password name=new_password size=8 value=$myconfig->{password}></td> - <input type=hidden name=old_password value=$myconfig->{password}> - </tr> - <tr> - <th align=right>|.$locale->text('Name').qq|</th> - <td><input name=name size=15 value="$myconfig->{name}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('E-mail').qq|</th> - <td><input name=email size=30 value="$myconfig->{email}"></td> - </tr> - <tr valign=top> - <th align=right>|.$locale->text('Signature').qq|</th> - <td><textarea name=signature rows=3 cols=35>$myconfig->{signature}</textarea></td> - </tr> - <tr> - <th align=right>|.$locale->text('Phone').qq|</th> - <td><input name=tel size=14 value="$myconfig->{tel}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('Fax').qq|</th> - <td><input name=fax size=14 value="$myconfig->{fax}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('Company').qq|</th> - <td><input name=company size=35 value="$myconfig->{company}"></td> - </tr> - <tr valign=top> - <th align=right>|.$locale->text('Address').qq|</th> - <td><textarea name=address rows=4 cols=35>$myconfig->{address}</textarea></td> - </tr> - </table> - </td> - <td> - <table> - <tr> - <th align=right>|.$locale->text('Date Format').qq|</th> - <td><select name=dateformat>$dateformat</select></td> - </tr> - <tr> - <th align=right>|.$locale->text('Number Format').qq|</th> - <td><select name=numberformat>$numberformat</select></td> - </tr> - <tr> - <th align=right>|.$locale->text('Dropdown Limit').qq|</th> - <td><input name=vclimit value="$myconfig->{vclimit}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('Menu Width').qq|</th> - <td><input name=menuwidth value="$myconfig->{menuwidth}"></td> - </tr> - <tr> - <th align=right>|.$locale->text('Language').qq|</th> - <td><select name=countrycode>$countrycodes</select></td> - </tr> - <tr> - <th align=right>|.$locale->text('Session Timeout').qq|</th> - <td><input name=newtimeout value="$myconfig->{timeout}"></td> - </tr> + @allhtml = reverse grep !/Default/, @allhtml; + push @allhtml, 'Default'; + @allhtml = reverse @allhtml; - <tr> - <th align=right>|.$locale->text('Stylesheet').qq|</th> - <td><select name=userstylesheet>$selectstylesheet</select></td> - </tr> - $printer - <tr> - <th align=right>|.$locale->text('Use Templates').qq|</th> - <td><select name=usetemplates>$usetemplates</select></td> - </tr> - <tr> - <th align=right>|.$locale->text('New Templates').qq|</th> - <td><input name=newtemplates></td> - </tr> - <tr> - <th align=right>|.$locale->text('Setup Templates').qq|</th> - <td><select name=mastertemplates>$mastertemplates</select></td> - </tr> - <input type=hidden name=templates value=$myconfig->{templates}> - </table> - </td> - </tr> - <tr class=listheading> - <th colspan=2>|.$locale->text('Database').qq|</th> - </tr>|; + foreach $item (sort @alldir) { - # list section for database drivers - foreach $item (User->dbdrivers) { - - print qq| - <tr> - <td colspan=2> - <table> - <tr>|; + if ($item eq $myconfig->{templates}) { + $usetemplates .= qq|<option selected value="$item">$item</option>\n|; + } else { + $usetemplates .= qq|<option value="$item">$item</option>\n|; + } + } - $checked = ""; - if ($myconfig->{dbdriver} eq $item) { - for (qw(dbhost dbport dbuser dbpasswd dbname sid)) { $form->{"${item}_$_"} = $myconfig->{$_} } - $checked = "checked"; - } + $lastitem = $allhtml[0]; + $lastitem =~ s/-.*//g; + $mastertemplates = qq|<option value="$lastitem">$lastitem</option>\n|; - print qq| - <th align=right>|.$locale->text('Driver').qq|</th> - <td><input name=dbdriver type=radio class=radio value=$item $checked> $item</td> - <th align=right>|.$locale->text('Host').qq|</th> - <td><input name="${item}_dbhost" size=30 value=$form->{"${item}_dbhost"}></td> - </tr> - <tr>|; + foreach $item (@allhtml) { - if ($item =~ /Pg/) { - print qq| - <th align=right>|.$locale->text('Dataset').qq|</th> - <td><input name="${item}_dbname" size=15 value=$form->{"${item}_dbname"}></td> - <th align=right>|.$locale->text('Port').qq|</th> - <td><input name="${item}_dbport" size=4 value=$form->{"${item}_dbport"}></td> - </tr> - <tr> - <th align=right>|.$locale->text('User').qq|</th> - <td><input name="${item}_dbuser" size=15 value=$form->{"${item}_dbuser"}></td> - <th align=right>|.$locale->text('Password').qq|</th> - <td><input name="${item}_dbpasswd" type=password size=10 value=$form->{"${item}_dbpasswd"}></td> - </tr>|; + $item =~ s/-.*//g; - } + if ($item ne $lastitem) { + $mastertemplates .= qq|<option value="$item">$item</option>\n|; + $lastitem = $item; + } + } - if ($item eq 'Oracle') { - print qq| - <th align=right>SID</th> - <td><input name=Oracle_sid value=$form->{Oracle_sid}></td> - <th align=right>|.$locale->text('Port').qq|</th> - <td><input name="${item}_dbport size=4 value=$form->{"${item}_dbport"}></td> - </tr> - <tr> - <th align=right>|.$locale->text('Dataset').qq|</th> - <td><input name="${item}_dbuser" size=15 value=$form->{"${item}_dbuser"}></td> - <th align=right>|.$locale->text('Password').qq|</th> - <td><input name="${item}_dbpasswd" type=password size=10 value=$form->{"${item}_dbpasswd"}></td> - - </tr>|; - } - - - print qq| - <input type=hidden name=old_dbpasswd value=$myconfig->{dbpasswd}> - </table> - </td> - </tr> - <tr> - <td colspan=2><hr size=2 noshade></td> - </tr> -|; + opendir CSS, "css/."; + @all = grep /.*\.css$/, readdir CSS; + closedir CSS; - } + foreach $item (@all) { + if ($item eq $myconfig->{stylesheet}) { + $selectstylesheet .= qq|<option selected value="$item">$item</option>\n|; + } else { + $selectstylesheet .= qq|<option value="$item">$item</option>\n|; + } + } - # access control - open(FH, $menufile) or $form->error("$menufile : $!"); - # scan for first menu level - @a = <FH>; - close(FH); - - if (open(FH, "custom_$menufile")) { - push @a, <FH>; - } - close(FH); + $selectstylesheet .= "<option></option>\n"; - foreach $item (@a) { - next unless $item =~ /\[\w+/; - next if $item =~ /\#/; + if (%printer && $latex) { - $item =~ s/(\[|\])//g; - chop $item; + $selectprinter = "<option></option>\n"; - if ($item =~ /--/) { - ($level, $menuitem) = split /--/, $item, 2; - } else { - $level = $item; - $menuitem = $item; - push @acsorder, $item; - } + foreach $item (sort keys %printer) { - push @{ $acs{$level} }, $menuitem; + if ($myconfig->{printer} eq $item) { + $selectprinter .= qq|<option value="$item" selected>$item</option>\n|; + } else { + $selectprinter .= qq|<option value="$item">$item</option>\n|; + } + } - } - - %role = ( 'admin' => $locale->text('Administrator'), - 'user' => $locale->text('User'), - 'supervisor' => $locale->text('Supervisor'), - 'manager' => $locale->text('Manager') + $printer = qq| + <tr> + <th align="right">|.$locale->text('Printer').qq|</th> + <td><select name="printer">$selectprinter</select></td> + </tr> + |; - ); - - $selectrole = ""; - foreach $item (qw(user admin supervisor manager)) { - $selectrole .= ($myconfig->{role} eq $item) ? "<option selected value=$item>$role{$item}\n" : "<option value=$item>$role{$item}\n"; - } - - print qq| - <tr class=listheading> - <th colspan=2>|.$locale->text('Access Control').qq|</th> - </tr> - <tr> - <td><select name=role>$selectrole</select></td> - </tr> -|; - - foreach $item (split /;/, $myconfig->{acs}) { - ($key, $value) = split /--/, $item, 2; - $excl{$key}{$value} = 1; - } - - foreach $key (@acsorder) { + } - $checked = "checked"; - if ($form->{login}) { - $checked = ($excl{$key}{$key}) ? "" : "checked"; - } - - # can't have variable names with & and spaces - $item = $form->escape("${key}--$key",1); + $user = $form->{login}; + $form->{login} = "root login"; + $form->header; + $form->{login} = $user; - $acsheading = $key; - $acsheading =~ s/ / /g; + print qq| + <body class="admin"> + <form method="post" action="$form->{script}"> + <table width="100%"> + <tr class="listheading"><th colspan="2">$form->{title}</th></tr> + <tr size="5"></tr> + <tr valign="top"> + <td> + <table> + <tr> + <th align="right">|.$locale->text('Login').qq|</th> + <td><input name="login" value="$myconfig->{login}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Password').qq|</th> + <td><input type="password" name="new_password" size="8" value="$myconfig->{password}" /></td> + <input type="hidden" name="old_password" value="$myconfig->{password}" /> + </tr> + <tr> + <th align="right">|.$locale->text('Name').qq|</th> + <td><input name="name" size="15" value="$myconfig->{name}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('E-mail').qq|</th> + <td><input name="email" size="30" value="$myconfig->{email}" /></td> + </tr> + <tr valign="top"> + <th align="right">|.$locale->text('Signature').qq|</th> + <td><textarea name="signature" rows="3" cols="35">$myconfig->{signature}</textarea></td> + </tr> + <tr> + <th align="right">|.$locale->text('Phone').qq|</th> + <td><input name="tel" size="14" value="$myconfig->{tel}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Fax').qq|</th> + <td><input name="fax" size="14" value="$myconfig->{fax}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Company').qq|</th> + <td><input name="company" size="35" value="$myconfig->{company}" /></td> + </tr> + <tr valign="top"> + <th align="right">|.$locale->text('Address').qq|</th> + <td><textarea name="address" rows="4" cols="35">$myconfig->{address}</textarea></td> + </tr> + </table> + </td> + <td> + <table> + <tr> + <th align="right">|.$locale->text('Date Format').qq|</th> + <td><select name="dateformat">$dateformat</select></td> + </tr> + <tr> + <th align="right">|.$locale->text('Number Format').qq|</th> + <td><select name="numberformat">$numberformat</select></td> + </tr> + <tr> + <th align="right">|.$locale->text('Dropdown Limit').qq|</th> + <td><input name="vclimit" value="$myconfig->{vclimit}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Menu Width').qq|</th> + <td><input name="menuwidth" value="$myconfig->{menuwidth}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Language').qq|</th> + <td><select name="countrycode">$countrycodes</select></td> + </tr> + <tr> + <th align="right">|.$locale->text('Session Timeout').qq|</th> + <td><input name="newtimeout" value="$myconfig->{timeout}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Stylesheet').qq|</th> + <td><select name="userstylesheet">$selectstylesheet</select></td> + </tr> + $printer + <tr> + <th align="right">|.$locale->text('Use Templates').qq|</th> + <td><select name="usetemplates">$usetemplates</select></td> + </tr> + <tr> + <th align="right">|.$locale->text('New Templates').qq|</th> + <td><input name="newtemplates" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Setup Templates').qq|</th> + <td><select name="mastertemplates">$mastertemplates</select></td> + </tr> + </table> + <input type="hidden" name="templates" value="$myconfig->{templates}" /> + </td> + </tr> + <tr class="listheading"> + <th colspan="2">|.$locale->text('Database').qq|</th> + </tr>|; - $acsheading = qq| - <th align=left nowrap><input name="$item" class=checkbox type=checkbox value=1 $checked> $acsheading</th>\n|; - $menuitems .= "$item;"; - $acsdata = " - <td>"; + # list section for database drivers + foreach $item (User->dbdrivers) { - foreach $item (@{ $acs{$key} }) { + print qq| + <tr> + <td colspan="2"> + <table> + <tr>|; - next if ($key eq $item); + $checked = ""; - $checked = "checked"; - if ($form->{login}) { - $checked = ($excl{$key}{$item}) ? "" : "checked"; - } + if ($myconfig->{dbdriver} eq $item) { - $acsitem = $form->escape("${key}--$item",1); + for (qw(dbhost dbport dbuser dbpasswd dbname sid)) { $form->{"${item}_$_"} = $myconfig->{$_} } + $checked = "checked"; + } - $acsdata .= qq| - <br><input name="$acsitem" class=checkbox type=checkbox value=1 $checked> $item|; - $menuitems .= "$acsitem;"; - } + print qq| + <th align="right">|.$locale->text('Driver').qq|</th> + <td><input name="dbdriver" type="radio" class="radio" value="$item" $checked /> $item</td> + <th align="right">|.$locale->text('Host').qq|</th> + <td><input name="${item}_dbhost" size="30" value="$form->{"${item}_dbhost"}" /></td> + </tr> + <tr>|; - $acsdata .= " - </td>"; + print qq| + <th align="right">|.$locale->text('Dataset').qq|</th> + <td><input name="${item}_dbname" size="15" value="$form->{"${item}_dbname"}" /></td> + <th align="right">|.$locale->text('Port').qq|</th> + <td><input name="${item}_dbport" size="4" value="$form->{"${item}_dbport"}" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('User').qq|</th> + <td><input name="${item}_dbuser" size="15" value="$form->{"${item}_dbuser"}" /></td> + <th align="right">|.$locale->text('Password').qq|</th> + <td><input name="${item}_dbpasswd" type="password" size="10" value="$form->{"${item}_dbpasswd"}" /></td> + </tr>|; - print qq| - <tr valign=top>$acsheading $acsdata - </tr> -|; - } - - print qq|<input type=hidden name=acs value="$menuitems"> - - <tr> - <td colspan=2><hr size=3 noshade></td> - </tr> -</table> -</div> -|; + print qq| + </table> + <input type="hidden" name="old_dbpasswd" value="$myconfig->{dbpasswd}" /> + </td> + </tr> + <tr> + <td colspan="2"><hr size="2" noshade /></td> + </tr> + |; -} + } -sub save { + # access control + open(FH, $menufile) or $form->error("$menufile : $!"); + # scan for first menu level + @a = <FH>; + close(FH); - # no driver checked - $form->error($locale->text('Database Driver not checked!')) unless $form->{dbdriver}; + if (open(FH, "custom_$menufile")) { + push @a, <FH>; + } - # no spaces allowed in login name - $form->{login} =~ s/ //g; + close(FH); - $form->isblank("login", $locale->text('Login name missing!')); - - # check for duplicates - if (!$form->{edit}) { - $temp = new User "$memberfile", "$form->{login}"; - - if ($temp->{login}) { - $form->error("$form->{login} ".$locale->text('is already a member!')); - } - } - - # no spaces allowed in directories - $form->{newtemplates} =~ s/( |\.\.|\*)//g; - - if ($form->{newtemplates} ne "") { - $form->{templates} = $form->{newtemplates}; - } else { - $form->{templates} = ($form->{usetemplates}) ? $form->{usetemplates} : $form->{login}; - } - - # is there a basedir - if (! -d "$templates") { - $form->error($locale->text('Directory').": $templates ".$locale->text('does not exist')); - } + foreach $item (@a) { - # add base directory to $form->{templates} - $form->{templates} = "$templates/$form->{templates}"; + next unless $item =~ /\[\w+/; + next if $item =~ /\#/; + $item =~ s/(\[|\])//g; + chop $item; - $myconfig = new User "$memberfile", "$form->{login}"; + if ($item =~ /--/) { - # redo acs variable and delete all the acs codes - @acs = split /;/, $form->{acs}; + ($level, $menuitem) = split /--/, $item, 2; + } else { - $form->{acs} = ""; - foreach $item (@acs) { - $item = $form->escape($item,1); - if (!$form->{$item}) { - $form->{acs} .= $form->unescape($form->unescape("$item")).";"; - } - delete $form->{$item}; - } + $level = $item; + $menuitem = $item; + push @acsorder, $item; + } - # check which database was filled in - - $form->{dbhost} = $form->{"$form->{dbdriver}_dbhost"}; - $form->{dbport} = $form->{"$form->{dbdriver}_dbport"}; - $form->{dbpasswd} = $form->{"$form->{dbdriver}_dbpasswd"}; - $form->{dbuser} = $form->{"$form->{dbdriver}_dbuser"}; - $form->{dbname} = $form->{"$form->{dbdriver}_dbname"}; + push @{ $acs{$level} }, $menuitem; - if ($form->{dbdriver} eq 'Oracle') { - $form->{sid} = $form->{Oracle_sid}, ; + } - $form->isblank("dbhost", $locale->text('Hostname missing!')); - $form->isblank("dbport", $locale->text('Port missing!')); - $form->isblank("dbuser", $locale->text('Dataset missing!')); - } - if ($form->{dbdriver} =~ /Pg/) { - $form->isblank("dbname", $locale->text('Dataset missing!')); - $form->isblank("dbuser", $locale->text('Database User missing!')); - } - - foreach $item (keys %{$form}) { - $myconfig->{$item} = $form->{$item}; - } + %role = ( 'admin' => $locale->text('Administrator'), + 'user' => $locale->text('User'), + 'supervisor' => $locale->text('Supervisor'), + 'manager' => $locale->text('Manager')); - $myconfig->{password} = $form->{old_password}; - $myconfig->{password} = $form->{new_password} if $form->{new_password} ne $form->{old_password}; - $myconfig->{timeout} = $form->{newtimeout}; + $selectrole = ""; - delete $myconfig->{stylesheet}; - if ($form->{userstylesheet}) { - $myconfig->{stylesheet} = $form->{userstylesheet}; - } - - $myconfig->{packpw} = 1; - - $myconfig->save_member($memberfile, $userspath); + foreach $item (qw(user admin supervisor manager)) { + $selectrole .= ($myconfig->{role} eq $item) ? "<option selected value=\"$item\">$role{$item}</option>\n" + : "<option value=\"$item\">$role{$item}</option>\n"; + } - # create user template directory and copy master files - if (! -d "$form->{templates}") { - - umask(002); - - if (mkdir "$form->{templates}", oct("771")) { - - umask(007); - - # copy templates to the directory - opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); - @templates = grep /$form->{mastertemplates}-/, readdir TEMPLATEDIR; - closedir TEMPLATEDIR; + print qq| + <tr class="listheading"> + <th colspan="2">|.$locale->text('Access Control').qq|</th> + </tr> + <tr> + <td><select name="role">$selectrole</select></td> + </tr> + |; - foreach $file (@templates) { - open(TEMP, "$templates/$file") or $form->error("$templates/$file : $!"); - - $file =~ s/$form->{mastertemplates}-//; - open(NEW, ">$form->{templates}/$file") or $form->error("$form->{templates}/$file : $!"); - - while ($line = <TEMP>) { - print NEW $line; + foreach $item (split /;/, $myconfig->{acs}) { + ($key, $value) = split /--/, $item, 2; + $excl{$key}{$value} = 1; } - close(TEMP); - close(NEW); - } - } else { - $form->error("$form->{templates} : $!"); - } - } - $form->redirect($locale->text('User saved!')); - -} + foreach $key (@acsorder) { + $checked = "checked"; -sub delete { + if ($form->{login}) { + $checked = ($excl{$key}{$key}) ? "" : "checked"; + } - $form->{templates} = ($form->{templates}) ? "$templates/$form->{templates}" : "$templates/$form->{login}"; - - $form->error("$memberfile ".$locale->text('locked!')) if (-f ${memberfile}.LCK); + # can't have variable names with & and spaces + $item = $form->escape("${key}--$key",1); - open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $!"); - close(FH); - - if (! open(CONF, "+<$memberfile")) { - unlink "${memberfile}.LCK"; - $form->error("$memberfile : $!"); - } + $acsheading = $key; + $acsheading =~ s/ / /g; - @config = <CONF>; + $acsheading = qq| + <th align="left" nowrap="nowrap"><input name="$item" class="checkbox" type="checkbox" value="1" $checked /> $acsheading</th>\n|; + $menuitems .= "$item;"; + $acsdata = "<td>"; - seek(CONF, 0, 0); - truncate(CONF, 0); - - while ($line = shift @config) { + foreach $item (@{ $acs{$key} }) { - chop $line; + next if ($key eq $item); - if ($line =~ /^\[/) { - last if ($line eq "[$form->{login}]"); - $login = &login_name($line); - } - - if ($line =~ /^templates=/) { - ($null, $user{$login}) = split /=/, $line, 2; - } + $checked = "checked"; - print CONF "$line\n"; - } + if ($form->{login}) { + $checked = ($excl{$key}{$item}) ? "" : "checked"; + } - # remove everything up to next login or EOF - # and save template variable - while ($line = shift @config) { + $acsitem = $form->escape("${key}--$item",1); - chop $line; - - ($key, $value) = split /=/, $line, 2; - $myconfig{$key} = $value; - - last if ($line =~ /^\[/); - } + $acsdata .= qq|<br /><input name="$acsitem" class="checkbox" type="checkbox" value="1" $checked /> $item|; + $menuitems .= "$acsitem;"; + } - # this one is either the next login or EOF - print CONF "$line\n"; + $acsdata .= " + </td>"; - $login = &login_name($line); - + print qq| + <tr valign="top">$acsheading $acsdata + </tr> + |; + } - while ($line = shift @config) { + print qq|<input type="hidden" name="acs" value="$menuitems" /> + <tr> + <td colspan="2"><hr size="3" noshade /></td> + </tr> + </table> + </div> + |; - chop $line; +} - if ($line =~ /^\[/) { - $login = &login_name($line); - } - - if ($line =~ /^templates=/) { - ($null, $user{$login}) = split /=/, $line, 2; - } - - print CONF "$line\n"; - } - close(CONF); - unlink "${memberfile}.LCK"; +sub save { - # scan %user for $templatedir - foreach $login (keys %user) { - last if ($found = ($form->{templates} eq $user{$login})); - } + # no driver checked + $form->error($locale->text('Database Driver not checked!')) unless $form->{dbdriver}; - # if found keep directory otherwise delete - if (!$found) { - # delete it if there is a template directory - $dir = "$form->{templates}"; - if (-d "$dir") { - unlink <$dir/*>; - rmdir "$dir"; - } - } + # no spaces allowed in login name + $form->{login} =~ s/ //g; - if ($myconfig{dbconnect}) { - $myconfig{dbpasswd} = unpack 'u', $myconfig{dbpasswd}; - for (keys %myconfig) { $form->{$_} = $myconfig{$_} } - - User->delete_login(\%$form); - - # delete config file for user - unlink "$userspath/$form->{login}.conf"; - } + $form->isblank("login", $locale->text('Login name missing!')); - $form->redirect($locale->text('User deleted!')); - -} + # check for duplicates + if (!$form->{edit}) { + $temp = new User "$memberfile", "$form->{login}"; -sub login_name { - my $login = shift; - - $login =~ s/\[\]//g; - return ($login) ? $login : undef; - -} + if ($temp->{login}) { + $form->error("$form->{login} ".$locale->text('is already a member!')); + } + } + # no spaces allowed in directories + $form->{newtemplates} =~ s/( |\.\.|\*)//g; -sub change_admin_password { + if ($form->{newtemplates} ne "") { + $form->{templates} = $form->{newtemplates}; + } else { + $form->{templates} = ($form->{usetemplates}) ? $form->{usetemplates} : $form->{login}; + } - $form->{title} = qq|LedgerSMB |.$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Change Admin Password'); + # is there a basedir + if (! -d "$templates") { + $form->error($locale->text('Directory').": $templates ".$locale->text('does not exist')); + } - $form->{login} = "root login"; - $form->header; + # add base directory to $form->{templates} + $form->{templates} = "$templates/$form->{templates}"; - print qq| -<body class=admin> -<form method=post action=$form->{script}> + $myconfig = new User "$memberfile", "$form->{login}"; -<table> - <tr> - <tr class=listheading> - <th>|.$locale->text('Change Password').qq|</th> - </tr> - <tr size=5></tr> - <tr> - <td> - <table width=100%> - <tr> - <th align=right>|.$locale->text('Password').qq|</th> - <td><input type=password name=new_password></td> - </tr> - <tr> - <th align=right>|.$locale->text('Confirm').qq|</th> - <td><input type=password name=confirm_password></td> - </tr> - </table> - </td> - </tr> + # redo acs variable and delete all the acs codes + @acs = split /;/, $form->{acs}; -</table> + $form->{acs} = ""; -<br> -<hr size=3 noshade> -<input type=hidden name=path value=$form->{path}> -<input type=hidden name=sessionid value=$form->{sessionid}> + foreach $item (@acs) { -<p> -<input type=submit class=submit name=action value="|.$locale->text('Change Password').qq|"> + $item = $form->escape($item,1); -</form> + if (!$form->{$item}) { + $form->{acs} .= $form->unescape($form->unescape("$item")).";"; + } -</body> -</html> -|; + delete $form->{$item}; + } -} + # check which database was filled in + $form->{dbhost} = $form->{"$form->{dbdriver}_dbhost"}; + $form->{dbport} = $form->{"$form->{dbdriver}_dbport"}; + $form->{dbpasswd} = $form->{"$form->{dbdriver}_dbpasswd"}; + $form->{dbuser} = $form->{"$form->{dbdriver}_dbuser"}; + $form->{dbname} = $form->{"$form->{dbdriver}_dbname"}; -sub change_password { + $form->isblank("dbname", $locale->text('Dataset missing!')); + $form->isblank("dbuser", $locale->text('Database User missing!')); - $form->error($locale->text('Passwords do not match!')) if $form->{new_password} ne $form->{confirm_password}; - - $root->{password} = $form->{new_password}; - - $root->{'root login'} = 1; - $root->save_member($memberfile); + foreach $item (keys %{$form}) { + $myconfig->{$item} = $form->{$item}; + } - $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + $myconfig->{password} = $form->{old_password}; + $myconfig->{password} = $form->{new_password} if $form->{new_password} ne $form->{old_password}; + $myconfig->{timeout} = $form->{newtimeout}; - $form->redirect($locale->text('Password changed!')); + delete $myconfig->{stylesheet}; -} + if ($form->{userstylesheet}) { + $myconfig->{stylesheet} = $form->{userstylesheet}; + } -sub get_hash { - use Digest::MD5; - $form->{hash} = Digest::MD5::md5_hex rand(); - -} + $myconfig->{packpw} = 1; -sub check_password { + $myconfig->save_member($memberfile, $userspath); + # create user template directory and copy master files + if (! -d "$form->{templates}") { + umask(002); - $root = new User "$memberfile", "root login"; + if (mkdir "$form->{templates}", oct("771")) { - if ($root->{password}) { - - if ($form->{password}) { - $form->{callback} .= "&password=$form->{password}" if $form->{callback}; - $form->{sessionid} = time; - if ($root->{password} ne crypt $form->{password}, 'ro') { - &getpassword; - exit; - } + umask(007); - &get_hash; - - open(HASHFILE, "> $userspath/adminhash") - || $form->error("Can't Open Hashfile: $!"); - print HASHFILE $form->{hash}; + # copy templates to the directory + opendir TEMPLATEDIR, "$templates/." or $form->error("$templates : $!"); + @templates = grep /$form->{mastertemplates}-/, readdir TEMPLATEDIR; + closedir TEMPLATEDIR; - print qq|Set-Cookie: LedgerSMB=$form->{hash}; path=/;\n|; + foreach $file (@templates) { - } else { - if ($ENV{HTTP_USER_AGENT}) { - $ENV{HTTP_COOKIE} =~ s/;\s*/;/g; - %cookie = split /[=;]/, $ENV{HTTP_COOKIE}; # Changeme to %cookies - $cookie = ($form->{path} eq 'bin/lynx') ? $cookie{login} : $cookie{"LedgerSMB-root login"}; + open(TEMP, "$templates/$file") or $form->error("$templates/$file : $!"); - #fixes problem with first login and such - if (!(-f "$userspath/adminhash")) { - &get_hash; - open(HASHFILE, "> $userspath/adminhash") || $form->error("Can't Open Hashfile: $!"); - print HASHFILE $form->{hash}; - close(HASHFILE); - } + $file =~ s/$form->{mastertemplates}-//; + open(NEW, ">$form->{templates}/$file") or $form->error("$form->{templates}/$file : $!"); - open (HASHFILE, "< $userspath/adminhash") || $form->error("Can't Open Hashfile: $!"); + while ($line = <TEMP>) { + print NEW $line; + } - chomp($form->{hash} = <HASHFILE>); + close(TEMP); + close(NEW); + } - %cookies = split /[=;]/, $ENV{HTTP_COOKIE}; - - if (! $cookie || $cookie ne $form->{sessionid} || - $form->{hash} ne $cookies{LedgerSMB}) { - &getpassword; - exit; + } else { + $form->error("$form->{templates} : $!"); + } } - } - } - } + + $form->redirect($locale->text('User saved!')); } -sub pg_database_administration { +sub delete { - $form->{dbdriver} = 'Pg'; - &dbselect_source; + $form->{templates} = ($form->{templates}) ? "$templates/$form->{templates}" : "$templates/$form->{login}"; -} + $form->error("$memberfile ".$locale->text('locked!')) if (-f ${memberfile}.LCK); + open(FH, ">${memberfile}.LCK") or $form->error("${memberfile}.LCK : $!"); + close(FH); -sub pgpp_database_administration { + if (! open(CONF, "+<$memberfile")) { + unlink "${memberfile}.LCK"; + $form->error("$memberfile : $!"); + } - $form->{dbdriver} = 'PgPP'; - &dbselect_source; + @config = <CONF>; -} + seek(CONF, 0, 0); + truncate(CONF, 0); + while ($line = shift @config) { -sub oracle_database_administration { - - $form->{dbdriver} = 'Oracle'; - &dbselect_source; + chop $line; -} + if ($line =~ /^\[/) { + last if ($line eq "[$form->{login}]"); + $login = &login_name($line); + } + if ($line =~ /^templates=/) { + ($null, $user{$login}) = split /=/, $line, 2; + } -sub dbdriver_defaults { + print CONF "$line\n"; + } - # load some defaults for the selected driver - %driverdefaults = ( 'Pg' => { dbport => '', - dbuser => 'ledger-smb', - dbdefault => 'template1', - dbhost => '', - connectstring => $locale->text('Connect to') - }, - 'Oracle' => { dbport => '1521', - dbuser => 'oralin', - dbdefault => $sid, - dbhost => `hostname`, - connectstring => 'SID' - } - ); + # remove everything up to next login or EOF + # and save template variable + while ($line = shift @config) { - $driverdefaults{PgPP} = $driverdefaults{Pg}; + chop $line; - for (keys %{ $driverdefaults{Pg} }) { $form->{$_} = $driverdefaults{$form->{dbdriver}}{$_} } - -} - + ($key, $value) = split /=/, $line, 2; + $myconfig{$key} = $value; -sub dbselect_source { + last if ($line =~ /^\[/); + } - &dbdriver_defaults; + # this one is either the next login or EOF + print CONF "$line\n"; - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." / ".$locale->text('Database Administration'); - - $form->{login} = "root login"; - $form->header; + $login = &login_name($line); - print qq| -<body class=admin> -<center> -<h2>$form->{title}</h2> + while ($line = shift @config) { -<form method=post action=$form->{script}> + chop $line; -<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> + if ($line =~ /^\[/) { + $login = &login_name($line); + } - <th align=right>$form->{connectstring}</th> - <td colspan=3><input name=dbdefault size=10 value=$form->{dbdefault}></td> + if ($line =~ /^templates=/) { + ($null, $user{$login}) = split /=/, $line, 2; + } - </tr> - </table> - </td> - </tr> - </table> + print CONF "$line\n"; + } -<input name=callback type=hidden value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> -<input type=hidden name=path value=$form->{path}> -<input type=hidden name=sessionid value=$form->{sessionid}> + close(CONF); + unlink "${memberfile}.LCK"; -<br> + # scan %user for $templatedir + foreach $login (keys %user) { + last if ($found = ($form->{templates} eq $user{$login})); + } -<input type=submit class=submit name=action value="|.$locale->text('Create Dataset').qq|"> -<input type=submit class=submit name=action value="|.$locale->text('Update Dataset').qq|"> -<input type=submit class=submit name=action value="|.$locale->text('Delete Dataset').qq|"> + # if found keep directory otherwise delete + if (!$found) { -</form> + # delete it if there is a template directory + $dir = "$form->{templates}"; + if (-d "$dir") { + unlink <$dir/*>; + rmdir "$dir"; + } + } - </td> - </tr> -</table> + if ($myconfig{dbconnect}) { -<p>|.$locale->text('This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!') + $myconfig{dbpasswd} = unpack 'u', $myconfig{dbpasswd}; + for (keys %myconfig) { $form->{$_} = $myconfig{$_} } -.qq| -</body> -</html> -|; + User->delete_login(\%$form); -} + # delete config file for user + unlink "$userspath/$form->{login}.conf"; + } + $form->redirect($locale->text('User deleted!')); +} -sub continue { - &{ $form->{nextsub} }; +sub login_name { + my $login = shift; + $login =~ s/\[\]//g; + return ($login) ? $login : undef; } -sub update_dataset { - - %needsupdate = User->dbneedsupdate(\%$form); - - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Update Dataset'); - - $form->{login} = "root login"; - $form->header; +sub change_admin_password { - print qq| -<body class=admin> + $form->{title} = qq|LedgerSMB |.$locale->text('Accounting')." ".$locale->text('Administration')." / ".$locale->text('Change Admin Password'); + $form->{login} = "root login"; + $form->header; -<center> -<h2>$form->{title}</h2> -|; + print qq| + <body class="admin"> + <form method="post" action="$form->{script}"> + <table> + <tr class="listheading"> + <th>|.$locale->text('Change Password').qq|</th> + </tr> + <tr size="5"></tr> + <tr> + <td> + <table width="100%"> + <tr> + <th align="right">|.$locale->text('Password').qq|</th> + <td><input type="password" name="new_password" /></td> + </tr> + <tr> + <th align="right">|.$locale->text('Confirm').qq|</th> + <td><input type="password" name="confirm_password" /></td> + </tr> + </table> + </td> + </tr> + </table> + <br /> + <hr size="3" noshade /> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <p><input type="submit" class="submit" name="action" value="|.$locale->text('Change Password').qq|" /></p> + </form> + </body> + </html> + |; +} - foreach $key (sort keys %needsupdate) { - if ($needsupdate{$key} ne $form->{dbversion}) { - $upd .= qq|<input name="db$key" class=checkbox type=checkbox value=1 checked> $key\n|; - $form->{dbupdate} .= "db$key "; - } - } - chop $form->{dbupdate}; +sub change_password { + $form->error($locale->text('Passwords do not match!')) if $form->{new_password} ne $form->{confirm_password}; + $root->{password} = $form->{new_password}; + $root->{'root login'} = 1; + $root->save_member($memberfile); + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + $form->redirect($locale->text('Password changed!')); +} - if ($form->{dbupdate}) { +sub get_hash { + use Digest::MD5; + $form->{hash} = Digest::MD5::md5_hex rand(); - 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}> +sub check_password { -<tr class=listheading> - <th>|.$locale->text('The following Datasets need to be updated').qq|</th> -</tr> -<tr> -<td> + $root = new User "$memberfile", "root login"; -$upd + if ($root->{password}) { -</td> -</tr> -<tr> -<td> + if ($form->{password}) { -<input name=dbupdate type=hidden value="$form->{dbupdate}"> + $form->{callback} .= "&password=$form->{password}" if $form->{callback}; + $form->{sessionid} = time; -<input name=callback type=hidden value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> + if ($root->{password} ne crypt $form->{password}, 'ro') { + &getpassword; + exit; + } -<input type=hidden name=path value=$form->{path}> -<input type=hidden name=sessionid value=$form->{sessionid}> + &get_hash; -<input type=hidden name=nextsub value=dbupdate> + open(HASHFILE, "> $userspath/adminhash") || $form->error("Can't Open Hashfile: $!"); + print HASHFILE $form->{hash}; + print qq|Set-Cookie: LedgerSMB=$form->{hash}; path=/;\n|; -<hr size=3 noshade> + } else { -<br> -<input type=submit class=submit name=action value="|.$locale->text('Continue').qq|"> + if ($ENV{HTTP_USER_AGENT}) { -</td></tr> -</table> -</form> -|; + $ENV{HTTP_COOKIE} =~ s/;\s*/;/g; + %cookie = split /[=;]/, $ENV{HTTP_COOKIE}; # Changeme to %cookies + $cookie = ($form->{path} eq 'bin/lynx') ? $cookie{login} : $cookie{"LedgerSMB-root login"}; - } else { + #fixes problem with first login and such + if (!(-f "$userspath/adminhash")) { + &get_hash; + open(HASHFILE, "> $userspath/adminhash") || $form->error("Can't Open Hashfile: $!"); + print HASHFILE $form->{hash}; + close(HASHFILE); + } - print $locale->text('DBA')." : $form->{dbuser} : " .$locale->text('All Datasets up to date!'); + open (HASHFILE, "< $userspath/adminhash") || $form->error("Can't Open Hashfile: $!"); + chomp($form->{hash} = <HASHFILE>); + %cookies = split /[=;]/, $ENV{HTTP_COOKIE}; - } - - print qq| + if (! $cookie || $cookie ne $form->{sessionid} || $form->{hash} ne $cookies{LedgerSMB}) { -</body> -</html> -|; + &getpassword; + exit; + } + } + } + } } -sub dbupdate { - - User->dbupdate(\%$form); +sub pg_database_administration { - $form->redirect($locale->text('Dataset updated!')); - + $form->{dbdriver} = 'Pg'; + &dbselect_source; } -sub create_dataset { - - @dbsources = sort User->dbsources(\%$form); - - opendir SQLDIR, "sql/." or $form->error($!); - foreach $item (sort grep /-chart\.sql/, readdir SQLDIR) { - next if ($item eq 'Default-chart.sql'); - $item =~ s/-chart\.sql//; - push @charts, qq|<input name=chart class=radio type=radio value="$item">$item|; - } - closedir SQLDIR; - - # add Default at beginning - unshift @charts, qq|<input name=chart class=radio type=radio value="Default" checked>Default|; +sub pgpp_database_administration { - $selectencoding = qq|<option> - <option value=SQL_ASCII>ASCII - <option value=EUC_JP>Japanese EUC - <option value=EUC_CN>Chinese EUC - <option value=EUC_KR>Korean EUC - <option value=JOHAB>Korean EUC (Hangle base) - <option value=EUC_TW>Taiwan EUC - <option value=UNICODE>Unicode (UTF-8) - <option value=MULE_INTERNAL>Mule internal type - <option value=LATIN1>ISO 8859-1/ECMA 94 (Latin alphabet no. 1) - <option value=LATIN2>ISO 8859-2/ECMA 94 (Latin alphabet no. 2) - <option value=LATIN3>ISO 8859-3/ECMA 94 (Latin alphabet no. 3) - <option value=LATIN4>ISO 8859-4/ECMA 94 (Latin alphabet no. 4) - <option value=LATIN5>ISO 8859-9/ECMA 128 (Latin alphabet no. 5) - <option value=LATIN6>ISO 8859-10/ECMA 144 (Latin alphabet no. 6) - <option value=LATIN7>ISO 8859-13 (Latin alphabet no. 7) - <option value=LATIN8>ISO 8859-14 (Latin alphabet no. 8) - <option value=LATIN9>ISO 8859-15 (Latin alphabet no. 9) - <option value=LATIN10>ISO 8859-16/ASRO SR 14111 (Latin alphabet no. 10) - <option value=ISO_8859_5>ISO 8859-5/ECMA 113 (Latin/Cyrillic) - <option value=ISO_8859_6>ISO 8859-6/ECMA 114 (Latin/Arabic) - <option value=ISO_8859_7>ISO 8859-7/ECMA 118 (Latin/Greek) - <option value=ISO_8859_8>ISO 8859-8/ECMA 121 (Latin/Hebrew) - <option value=KOI8>KOI8-R(U) - <option value=WIN>Windows CP1251 - <option value=ALT>Windows CP866 - <option value=WIN1256>Windows CP1256 (Arabic) - <option value=TCVN>Windows CP1258 (Vietnamese) - <option value=WIN874>Windows CP874 (Thai) - |; - - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Create Dataset'); - - $form->{login} = "root login"; - $form->header; + $form->{dbdriver} = 'PgPP'; + &dbselect_source; - print qq| -<body class=admin> +} -<center> -<h2>$form->{title}</h2> +sub dbdriver_defaults { -<form method=post action=$form->{script}> + # load some defaults for the selected driver + %driverdefaults = ( 'Pg' => { dbport => '', + dbuser => 'ledger-smb', + dbdefault => 'template1', + dbhost => '', + connectstring => $locale->text('Connect to') + } ); -<table width=100%> - <tr class=listheading> - <th colspan=2> </th> - </tr> + $driverdefaults{PgPP} = $driverdefaults{Pg}; - <tr> + for (keys %{ $driverdefaults{Pg} }) { $form->{$_} = $driverdefaults{$form->{dbdriver}}{$_} } - <th align=right nowrap>|.$locale->text('Existing Datasets').qq|</th> - <td> -|; +} - for (@dbsources) { print "[ $_ ] " } - - print qq| - </td> - </tr> - - <tr> - <th align=right nowrap>|.$locale->text('Create Dataset').qq|</th> - <td><input name=db></td> +sub dbselect_source { - </tr> + &dbdriver_defaults; - <tr> + $form->{title} = "LedgerSMB ".$locale->text('Accounting')." / ".$locale->text('Database Administration'); - <th align=right nowrap>|.$locale->text('Multibyte Encoding').qq|</th> - <td><select name=encoding>$selectencoding</select></td> + $form->{login} = "root login"; + $form->header; - </tr> - - <tr> + #an insane amount of table nesting here, this should be cleaned up. + 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> + <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> + </td> + </tr> + </table> + <input type="hidden" name="dbdriver" value="$form->{dbdriver}" /> + <input name="callback" type="hidden" value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}" /> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <br /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Create Dataset').qq|" /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Update Dataset').qq|" /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Delete Dataset').qq|" /> + </form> + <p>|.$locale->text('This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!') + .qq|</p> + </center> + </body> + </html> + |; +} - <th align=right nowrap>|.$locale->text('Create Chart of Accounts').qq|</th> - <td> - <table> -|; - while (@charts) { - print qq| - <tr> -|; +sub continue { - for (0 .. 2) { print "<td>$charts[$_]</td>\n" } + &{ $form->{nextsub} }; +} - print qq| - </tr> -|; - splice @charts, 0, 3; - } +sub update_dataset { - print qq| - </table> - </td> - </tr> - <tr> - <td colspan=2> - <hr size=3 noshade> - </td> - </tr> -</table> -|; + %needsupdate = User->dbneedsupdate(\%$form); - $form->hide_form(qw(dbdriver dbuser dbhost dbport dbpasswd dbdefault path sessionid)); - - print qq| - -<input name=callback type=hidden value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> -<input type=hidden name=nextsub value=dbcreate> - -<br> -<input type=submit class=submit name=action value="|.$locale->text('Continue').qq|"> + $form->{title} = "LedgerSMB ".$locale->text('Accounting')." " + .$locale->text('Database Administration')." / " + .$locale->text('Update Dataset'); + $form->{login} = "root login"; + $form->header; + print qq| + <body class="admin"> + <center> + <h2>$form->{title}</h2> + |; -</form> + foreach $key (sort keys %needsupdate) { -</body> -</html> -|; + if ($needsupdate{$key} ne $form->{dbversion}) { + $upd .= qq|<input name="db$key" class="checkbox" type="checkbox" value="1" checked /> $key\n|; + $form->{dbupdate} .= "db$key "; + } + } -} + chop $form->{dbupdate}; + if ($form->{dbupdate}) { -sub dbcreate { + print qq| + <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}" /> + <input name="dbupdate" type="hidden" value="$form->{dbupdate}" /> + <input name="callback" type="hidden" value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}" /> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <input type="hidden" name="nextsub" value="dbupdate" /> + + <table width="100%"> + <tr class="listheading"> + <th>|.$locale->text('The following Datasets need to be updated').qq|</th> + </tr> + <tr> + <td> + $upd + </td> + </tr> + <tr> + <td> + <hr size="3" noshade /> + <br /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Continue').qq|" /> + </td> + </tr> + </table> + </form> + |; - $form->isblank("db", $locale->text('Dataset missing!')); + } else { - User->dbcreate(\%$form); - - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Create Dataset'); + print $locale->text('DBA')." : $form->{dbuser} : " .$locale->text('All Datasets up to date!'); + } - $form->{login} = "root login"; - $form->header; + print qq| + </body> + </html> + |; - print qq| -<body class=admin> +} -<center> -<h2>$form->{title}</h2> +sub dbupdate { -<form method=post action=$form->{script}>| + User->dbupdate(\%$form); + $form->redirect($locale->text('Dataset updated!')); +} -.$locale->text('Dataset')." $form->{db} ".$locale->text('successfully created!') -.qq| +sub create_dataset { -<input type=hidden name=path value="$form->{path}"> -<input type=hidden name=sessionid value=$form->{sessionid}> + @dbsources = sort User->dbsources(\%$form); -<input type=hidden name=nextsub value=list_users> + opendir SQLDIR, "sql/." or $form->error($!); -<p><input type=submit class=submit name=action value="|.$locale->text('Continue').qq|"> -</form> + foreach $item (sort grep /-chart\.sql/, readdir SQLDIR) { + next if ($item eq 'Default-chart.sql'); + $item =~ s/-chart\.sql//; + push @charts, qq|<input name="chart" class="radio" type="radio" value="$item" />$item|; + } + closedir SQLDIR; -</body> -</html> -|; + # add Default at beginning + unshift @charts, qq|<input name="chart" class="radio" type="radio" value="Default" checked />Default|; -} + $selectencoding = qq|<option></option> + <option value="SQL_ASCII">ASCII</option> + <option value="EUC_JP">Japanese EUC</option> + <option value="EUC_CN">Chinese EUC</option> + <option value="EUC_KR">Korean EUC</option> + <option value="JOHAB">Korean EUC (Hangle base)</option> + <option value="EUC_TW">Taiwan EUC</option> + <option value="UNICODE">Unicode (UTF-8)</option> + <option value="MULE_INTERNAL">Mule internal type</option> + <option value="LATIN1">ISO 8859-1/ECMA 94 (Latin alphabet no. 1)</option> + <option value="LATIN2">ISO 8859-2/ECMA 94 (Latin alphabet no. 2)</option> + <option value="LATIN3">ISO 8859-3/ECMA 94 (Latin alphabet no. 3)</option> + <option value="LATIN4">ISO 8859-4/ECMA 94 (Latin alphabet no. 4)</option> + <option value="LATIN5">ISO 8859-9/ECMA 128 (Latin alphabet no. 5)</option> + <option value="LATIN6">ISO 8859-10/ECMA 144 (Latin alphabet no. 6)</option> + <option value="LATIN7">ISO 8859-13 (Latin alphabet no. 7)</option> + <option value="LATIN8">ISO 8859-14 (Latin alphabet no. 8)</option> + <option value="LATIN9">ISO 8859-15 (Latin alphabet no. 9)</option> + <option value="LATIN10">ISO 8859-16/ASRO SR 14111 (Latin alphabet no. 10)</option> + <option value="ISO_8859_5">ISO 8859-5/ECMA 113 (Latin/Cyrillic)</option> + <option value="ISO_8859_6">ISO 8859-6/ECMA 114 (Latin/Arabic)</option> + <option value="ISO_8859_7">ISO 8859-7/ECMA 118 (Latin/Greek)</option> + <option value="ISO_8859_8">ISO 8859-8/ECMA 121 (Latin/Hebrew)</option> + <option value="KOI8">KOI8-R(U)</option> + <option value="WIN">Windows CP1251</option> + <option value="ALT">Windows CP866</option> + <option value="WIN1256">Windows CP1256 (Arabic)</option> + <option value="TCVN">Windows CP1258 (Vietnamese)</option> + <option value="WIN874">Windows CP874 (Thai)</option> + |; + $form->{title} = "LedgerSMB ".$locale->text('Accounting') + ." ".$locale->text('Database Administration') + ." / ".$locale->text('Create Dataset'); + $form->{login} = "root login"; + $form->header; -sub delete_dataset { + print qq| + <body class="admin"> + <center> + <h2>$form->{title}</h2> + <form method="post" action="$form->{script}" /> + <table width="100%"> + <tr class="listheading"> + <th colspan="2"> </th> + </tr> + <tr> + <th align="right" nowrap="nowrap">|.$locale->text('Existing Datasets').qq|</th> + <td> + |; - if (@dbsources = User->dbsources_unused(\%$form, $memberfile)) { - foreach $item (sort @dbsources) { - $dbsources .= qq|<input name=db class=radio type=radio value=$item> $item |; - } - } else { - $form->error($locale->text('Nothing to delete!')); - } + for (@dbsources) { print "[ $_ ] " } - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Delete Dataset'); + print qq| + </td> + </tr> + <tr> + <th align="right" nowrap="nowrap">|.$locale->text('Create Dataset').qq|</th> + <td><input name="db" /></td> + </tr> + <tr> + <th align="right" nowrap="nowrap">|.$locale->text('Multibyte Encoding').qq|</th> + <td><select name="encoding">$selectencoding</select></td> + </tr> + <tr> + <th align="right" nowrap="nowrap">|.$locale->text('Create Chart of Accounts').qq|</th> + <td> + <table> + |; - $form->{login} = "root login"; - $form->header; + while (@charts) { + print qq| <tr>|; - print qq| -<body class=admin> + for (0 .. 2) { print "<td>$charts[$_]</td>\n" } -<h2>$form->{title}</h2> + print qq| </tr>|; -<form method=post action=$form->{script}> + splice @charts, 0, 3; + } -<table width=100%> - <tr class=listheading> - <th>|.$locale->text('The following Datasets are not in use and can be deleted').qq|</th> - </tr> + print qq| </table> + </td> + </tr> + <tr> + <td colspan="2"> + <hr size="3" noshade /> + </td> + </tr> + </table> + |; - <tr> - <td> - $dbsources - </td> - </tr> - - <tr><td> -<p> -<input type=hidden name=dbdriver value=$form->{dbdriver}> -<input type=hidden name=dbuser value=$form->{dbuser}> -<input type=hidden name=dbhost value=$form->{dbhost}> -<input type=hidden name=dbport value=$form->{dbport}> -<input type=hidden name=dbpasswd value=$form->{dbpasswd}> -<input type=hidden name=dbdefault value=$form->{dbdefault}> + $form->hide_form(qw(dbdriver dbuser dbhost dbport dbpasswd dbdefault path sessionid)); -<input name=callback type=hidden value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> + print qq| + <input name="callback" type="hidden" value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}" /> + <input type="hidden" name="nextsub" value="dbcreate" /> + <br /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Continue').qq|" /> + </form> + </body> + </html> + |; -<input type=hidden name=path value="$form->{path}"> -<input type=hidden name=sessionid value=$form->{sessionid}> +} -<input type=hidden name=nextsub value=dbdelete> -<hr size=3 noshade> +sub dbcreate { -<br> -<input type=submit class=submit name=action value="|.$locale->text('Continue').qq|"> + $form->isblank("db", $locale->text('Dataset missing!')); - </td></tr> -</table> + User->dbcreate(\%$form); -</form> + $form->{title} = "LedgerSMB ".$locale->text('Accounting') + ." ".$locale->text('Database Administration') + ." / ".$locale->text('Create Dataset'); -</body> -</html> -|; + $form->{login} = "root login"; + $form->header; + print qq| + <body class="admin"> + <center> + <h2>$form->{title}</h2> + <form method="post" action="$form->{script}">| + .$locale->text('Dataset')." $form->{db} ".$locale->text('successfully created!') + .qq| + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <input type="hidden" name="nextsub" value="list_users" /> + <p><input type="submit" class="submit" name="action" value="|.$locale->text('Continue').qq|" /></p> + </form> + </center> + </body> + </html> + |; } -sub dbdelete { - - if (!$form->{db}) { - $form->error($locale->text('No Dataset selected!')); - } - - User->dbdelete(\%$form); +sub delete_dataset { - $form->{title} = "LedgerSMB ".$locale->text('Accounting')." ".$locale->text('Database Administration')." / ".$locale->text('Delete Dataset'); + if (@dbsources = User->dbsources_unused(\%$form, $memberfile)) { - $form->{login} = "root login"; - $form->header; + foreach $item (sort @dbsources) { + $dbsources .= qq|<input name="db" class="radio" type="radio" value="$item" /> $item |; + } - print qq| -<body class=admin> + } else { + $form->error($locale->text('Nothing to delete!')); + } + $form->{title} = "LedgerSMB ".$locale->text('Accounting') + ." ".$locale->text('Database Administration') + ." / ".$locale->text('Delete Dataset'); -<center> -<h2>$form->{title}</h2> + $form->{login} = "root login"; + $form->header; -<form method=post action=$form->{script}> + print qq| + <body class="admin"> + <h2>$form->{title}</h2> + <form method="post" action="$form->{script}" /> + <input type="hidden" name="dbdriver" value="$form->{dbdriver}" /> + <input type="hidden" name="dbuser" value="$form->{dbuser}" /> + <input type="hidden" name="dbhost" value="$form->{dbhost}" /> + <input type="hidden" name="dbport" value="$form->{dbport}" /> + <input type="hidden" name="dbpasswd" value="$form->{dbpasswd}" /> + <input type="hidden" name="dbdefault" value="$form->{dbdefault}" /> + <input name=callback type="hidden" value="$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <input type="hidden" name="nextsub" value="dbdelete" /> + <table width="100%"> + <tr class="listheading"> + <th>|.$locale->text('The following Datasets are not in use and can be deleted').qq|</th> + </tr> + <tr> + <td> + $dbsources + </td> + </tr> + <tr> + <td> + <hr size="3" noshade /> + <br /> + <input type="submit" class="submit" name="action" value="|.$locale->text('Continue').qq|" /> + </td> + </tr> + </table> + </form> + </body> + </html> + |; -$form->{db} |.$locale->text('successfully deleted!') +} -.qq| -<input type=hidden name=path value="$form->{path}"> -<input type=hidden name=sessionid value=$form->{sessionid}> +sub dbdelete { -<input type=hidden name=nextsub value=list_users> + if (!$form->{db}) { + $form->error($locale->text('No Dataset selected!')); + } -<p><input type=submit class=submit name=action value="|.$locale->text('Continue').qq|"> -</form> + User->dbdelete(\%$form); + $form->{title} = "LedgerSMB ".$locale->text('Accounting') + ." ".$locale->text('Database Administration') + ." / ".$locale->text('Delete Dataset'); -</body> -</html> -|; + $form->{login} = "root login"; + $form->header; + print qq| + <body class="admin"> + <center> + <h2>$form->{title}</h2> + $form->{db} |.$locale->text('successfully deleted!') + .qq| + <form method="post" action="$form->{script}" /> + <input type="hidden" name="path" value="$form->{path}" /> + <input type="hidden" name="sessionid" value="$form->{sessionid}" /> + <input type="hidden" name="nextsub" value="list_users" /> + <p><input type="submit" class="submit" name="action" value="|.$locale->text('Continue').qq|" /></p> + </form> + </body> + </html> + |; } sub unlock_system { - unlink "$userspath/nologin"; - - $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; - - $form->redirect($locale->text('Lockfile removed!')); - + unlink "$userspath/nologin"; + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + $form->redirect($locale->text('Lockfile removed!')); } sub lock_system { - open(FH, ">$userspath/nologin") or $form->error($locale->text('Cannot create Lock!')); - close(FH); - - $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; - - $form->redirect($locale->text('Lockfile created!')); - + open(FH, ">$userspath/nologin") or $form->error($locale->text('Cannot create Lock!')); + close(FH); + $form->{callback} = "$form->{script}?action=list_users&path=$form->{path}&sessionid=$form->{sessionid}"; + $form->redirect($locale->text('Lockfile created!')); } - - - |
