Revision: 3077
          http://ipcop.svn.sourceforge.net/ipcop/?rev=3077&view=rev
Author:   riddles
Date:     2009-06-17 15:18:40 +0000 (Wed, 17 Jun 2009)

Log Message:
-----------
Template dhcp.cgi and netstatus.cgi

Modified Paths:
--------------
    ipcop/branches/template-branch/config/rootfiles/common/Template-Toolkit
    ipcop/branches/template-branch/html/cgi-bin/dhcp.cgi
    ipcop/branches/template-branch/html/cgi-bin/netstatus.cgi
    ipcop/branches/template-branch/src/libs/general-functions.pl

Added Paths:
-----------
    ipcop/branches/template-branch/html/html/pages/dhcp.tpl
    ipcop/branches/template-branch/html/html/pages/netstatus.tpl

Modified: 
ipcop/branches/template-branch/config/rootfiles/common/Template-Toolkit
===================================================================
--- ipcop/branches/template-branch/config/rootfiles/common/Template-Toolkit     
2009-06-17 15:14:05 UTC (rev 3076)
+++ ipcop/branches/template-branch/config/rootfiles/common/Template-Toolkit     
2009-06-17 15:18:40 UTC (rev 3077)
@@ -36,7 +36,7 @@
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Autoformat.pm
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/CGI.pm
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Datafile.pm
-#usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Date.pm
+usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Date.pm
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Directory.pm
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/Dumper.pm
 #usr/lib/perl5/site_perl/5.8.8/MACHINE-linux/Template/Plugin/File.pm

Modified: ipcop/branches/template-branch/html/cgi-bin/dhcp.cgi
===================================================================
--- ipcop/branches/template-branch/html/cgi-bin/dhcp.cgi        2009-06-17 
15:14:05 UTC (rev 3076)
+++ ipcop/branches/template-branch/html/cgi-bin/dhcp.cgi        2009-06-17 
15:18:40 UTC (rev 3077)
@@ -25,17 +25,16 @@
 #
 
 use strict;
+use Template;
 
 # enable only the following on debugging purpose
-#use warnings; no warnings 'once';
-#use CGI::Carp 'fatalsToBrowser';
+use warnings; no warnings 'once';
+use CGI::Carp 'fatalsToBrowser';
 
 require '/usr/lib/ipcop/general-functions.pl';
 require '/usr/lib/ipcop/lang.pl';
 require '/usr/lib/ipcop/header.pl';
 
-&Header::showhttpheaders();
-
 my %dhcpsettings = ();
 my %netsettings  = ();
 my %mainsettings = ();
@@ -45,7 +44,6 @@
 my $errormessage     = '';
 my $error_save_main  = '';
 my $error_save_fixed = '';
-my $warnmessage      = '';
 
 # owes: TODO add Blue only when defined
 my @INTERFACEs = ('GREEN', 'BLUE');
@@ -60,6 +58,24 @@
 my $disable_main  = 0;          # 1 = only show (non-editable) some vital 
information in the main box
 my $disable_fixed = 1;          # 1 = only show fixed leases, 0 = fields to 
add fixed lease become usable
 
+my $page_vars = &Header::get_page_vars();
+
+##
+## Initialize Template
+##
+my $tt = Template->new({
+    INCLUDE_PATH => '/home/httpd/html/pages:/home/httpd/html/themes',
+    FILTERS => { 
+        'loc' => \&Header::maketext,
+        'color_devices' => \&General::color_devices,
+    },
+}) || die "$Template::ERROR\n";
+
+##
+## Start Page
+##
+&Header::showhttpheaders();
+
 # get IPCop settings
 &General::readhash('/var/ipcop/ethernet/settings', \%netsettings);
 &General::readhash('/var/ipcop/main/settings',     \%mainsettings);
@@ -92,6 +108,7 @@
 $dhcpsettings{'FIXED_FILENAME'}      = '';
 $dhcpsettings{'FIXED_ROOTPATH'}      = '';
 $dhcpsettings{'KEY_FIXED'}           = '';
+$dhcpsettings{'SORT_LEASELIST'}      = 'IPADDR';
 
 # read the fixed leases
 my @fixedleases;
@@ -110,9 +127,6 @@
     }
 }
 
-&Header::openpage($Lang::tr{'dhcp configuration'}, 1, '');
-&Header::openbigbox('100%', 'left', '', '');
-
 ###############
 # DEBUG DEBUG
 if ($debug) {
@@ -252,8 +266,8 @@
                     if (   ($dhcpsettings{"NTP1_${interface}_${counter}"} eq 
$netsettings{"${interface}_${counter}_ADDRESS"})
                         && ($timesettings{'ENABLED_NTP'} ne 'on'))
                     {
-                        $warnmessage =
-                            "DHCP on ${interface}: " . $Lang::tr{'local ntp 
server specified but not enabled'};
+                        push(@{$page_vars->{'warnmessages'}}, 
+                            "DHCP on ${interface}: " . $Lang::tr{'local ntp 
server specified but not enabled'});
                     }
                 }
                 if ($dhcpsettings{"NTP2_${interface}_${counter}"}) {
@@ -264,8 +278,8 @@
                     if (   ($dhcpsettings{"NTP2_${interface}_${counter}"} eq 
$netsettings{"${interface}_${counter}_ADDRESS"})
                         && ($timesettings{'ENABLED_NTP'} ne 'on'))
                     {
-                        $warnmessage =
-                            "DHCP on ${interface}: " . $Lang::tr{'local ntp 
server specified but not enabled'};
+                        push(@{$page_vars->{'warnmessages'}}, 
+                            "DHCP on ${interface}: " . $Lang::tr{'local ntp 
server specified but not enabled'});
                     }
                     if (!$dhcpsettings{"NTP1_${interface}_${counter}"}) {
                         $errormessage =
@@ -279,9 +293,13 @@
     }    # foreach interface
     &writeconfig(1);
 ERROR_SAVE_MAIN:
-    $error_save_main = 'error' if ($errormessage);
+    if ($errormessage) {
+        $error_save_main = 'error';
+        push(@{$page_vars->{'errormessages'}}, $errormessage);
+    }
 }
 else {
+    &General::CheckSortOrder;
     &General::readhash('/var/ipcop/dhcp/settings', \%dhcpsettings);
 }
 
@@ -364,10 +382,10 @@
             }
         }
     }
-    if ($insubnet == 0) {
-        $errormessage = $Lang::tr{'invalid fixed ip address'};
-        goto ERROR_SAVE_FIXED;
-    }
+    #if ($insubnet == 0) {
+    #    $errormessage = $Lang::tr{'invalid fixed ip address'};
+    #    goto ERROR_SAVE_FIXED;
+    #}
 
     # TODO: test for duplicate MAC addresses
     # Duplicate MAC is OK, as long as the to be assigned IP addresses are in 
different networks
@@ -396,6 +414,7 @@
         $error_save_fixed = 'error';
         $disable_main     = 1;
         $disable_fixed    = 0;
+        push(@{$page_vars->{'errormessages'}}, $errormessage);
     }
 }
 
@@ -419,345 +438,68 @@
     &writefixedleases(0);
 }
 
-#
-# display box with warnmessage in case of warning
-#
-if ($warnmessage) {
-    &Header::openbox('100%', 'left', $Lang::tr{'capswarning'}, 'warning');
-    print "<font class='base'>$warnmessage&nbsp;</font>\n";
-    &Header::closebox();
-}
+##
+## Read fixed leases
+##
+...@fixedleases = ();
+open(FILE, '/var/ipcop/dhcp/fixedleases');
+    while (<FILE>) {
+        chomp($_);
+        my @temp = split(/\,/, $_);
+        my %lease = (
+                'mac'      => $temp[0],
+                'ip'       => $temp[1],
+                'enabled'  => $temp[2],
+                'nextaddr' => $temp[3],
+                'filename' => $temp[4],
+                'rootpath' => $temp[5],
+                'remark'   => $temp[6],
+                'hostname' => $temp[7],
+        );
+        push (@fixedleases, \%lease);
+    }
+close(FILE);
 
-#
-# display box with errormessage in case of error
-#
-if ($errormessage) {
-    &Header::openbox('100%', 'left', "$Lang::tr{'error messages'}:", 'error');
-    print "<font class='base'>$errormessage&nbsp;</font>\n";
-    &Header::closebox();
-}
-
-#
-# display box with main settings
-#
-&Header::openbox('100%', 'left', "$Lang::tr{'settings'}:", $error_save_main);
+##
+## Display DHCP Server running
+##
 my $sactive = &General::isrunning('dhcpd', 'nosize');
 
-print <<END
-<form method='post' name='frm_main' action='$ENV{'SCRIPT_NAME'}'>
-<table width='100%'>
-<tr>
-    <td width='25%'>$Lang::tr{'dhcp server'}:</td>
-    $sactive
-    <td width='25%'>&nbsp;</td>
-    <td width='25%'>&nbsp;</td>
-</tr>
-</table>
-<hr />
-END
-;
-
+##
+## Get Actual DHCP Leases
+##
+my @leases = ();
+$enabled_count = 1;
 foreach $interface (@INTERFACEs) {
     for ($counter = 1; $counter <= $netsettings{"${interface}_COUNT"}; 
$counter++) {
-        my $lc_interface = lc($interface);
-        $checked{'ENABLED'}{'on'} =
-            ($dhcpsettings{"ENABLED_${interface}_${counter}"} ne 'on') ? '' : 
"checked='checked'";
-        $checked{'ENABLED_BOOTP'}{'on'} =
-            ($dhcpsettings{"ENABLED_BOOTP_${interface}_${counter}"} ne 'on') ? 
'' : "checked='checked'";
-        my $disable_text = '';
-        $disable_text = "disabled='disabled'" if ($disable_main == 1);
-
-        print <<END
-<table width='100%'>
-<tr>
-    <td width='25%' class='boldbase'><span 
class='ipcop_iface_$lc_interface'>$Lang::tr{"$lc_interface"}</span></td>
-    <td width='25%' class='base'>$Lang::tr{'enabled'}:<input type='checkbox' 
name='ENABLED_${interface}_${counter}' $checked{'ENABLED'}{'on'} $disable_text 
/></td>
-    <td width='25%' class='base'>$Lang::tr{'ip 
address'}/$Lang::tr{'netmask'}:</td>
-    <td width='25%' 
class='base'><b>$netsettings{"${interface}_${counter}_ADDRESS"}/$netsettings{"${interface}_${counter}_NETMASK"}</b></td>
-</tr><tr>
-    <td width='25%' class='base'>$Lang::tr{'start address'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td width='25%'><input type='text' 
name='START_ADDR_${interface}_${counter}' 
value='$dhcpsettings{"START_ADDR_${interface}_${counter}"}' $disable_text 
/></td>
-    <td width='25%' class='base'>$Lang::tr{'end address'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td width='25%'><input type='text' name='END_ADDR_${interface}_${counter}' 
value='$dhcpsettings{"END_ADDR_${interface}_${counter}"}' $disable_text /></td>
-</tr>
-END
-            ;
-        if ($disable_main == 0) {
-            print <<END
-<tr>
-    <td class='base'>$Lang::tr{'default lease time'}:</td>
-    <td><input type='text' name='DEFAULT_LEASE_TIME_${interface}_${counter}' 
value='$dhcpsettings{"DEFAULT_LEASE_TIME_${interface}_${counter}"}' size='5' 
/></td>
-    <td class='base'>$Lang::tr{'domain name suffix'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='DOMAIN_NAME_${interface}_${counter}' 
value='$dhcpsettings{"DOMAIN_NAME_${interface}_${counter}"}' /></td>
-</tr><tr>
-    <td>$Lang::tr{'dhcp allow bootp'}:</td>
-    <td><input type='checkbox' name='ENABLED_BOOTP_${interface}_${counter}' 
$checked{'ENABLED_BOOTP'}{'on'} /></td>
-    <td>&nbsp;</td><td>&nbsp;</td>
-</tr><tr>
-    <td class='base'>$Lang::tr{'primary dns'}:</td>
-    <td><input type='text' name='DNS1_${interface}_${counter}' 
value='$dhcpsettings{"DNS1_${interface}_${counter}"}' /></td>
-    <td class='base'>$Lang::tr{'secondary dns'}:&nbsp;<img src='/blob.gif' 
alt='*' /></td>
-    <td><input type='text' name='DNS2_${interface}_${counter}' 
value='$dhcpsettings{"DNS2_${interface}_${counter}"}' /></td>
-</tr><tr>
-    <td class='base'>$Lang::tr{'primary ntp server'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='NTP1_${interface}_${counter}' 
value='$dhcpsettings{"NTP1_${interface}_${counter}"}' /></td>
-    <td class='base'>$Lang::tr{'secondary ntp server'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='NTP2_${interface}_${counter}' 
value='$dhcpsettings{"NTP2_${interface}_${counter}"}' /></td>
-</tr><tr>
-    <td class='base'>$Lang::tr{'primary wins server address'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='WINS1_${interface}_${counter}' 
value='$dhcpsettings{"WINS1_${interface}_${counter}"}' /></td>
-    <td class='base'>$Lang::tr{'secondary wins server address'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='WINS2_${interface}_${counter}' 
value='$dhcpsettings{"WINS2_${interface}_${counter}"}' /></td>
-</tr>
-END
-                ;
-        }
-        print "</table><hr />";
-    }
-}
-
-if ($disable_main == 1) {
-    print "</form>";
-}
-else {
-    print <<END
-<table width='100%'>
-<tr>
-    <td class='comment1button'><img src='/blob.gif' align='top' alt='*' 
/>&nbsp;$Lang::tr{'this field may be blank'}</td>
-    <td class='button1button'><input type='hidden' name='ACTION' 
value='SAVE_MAIN' /><input type='submit' name='SUBMIT' 
value='$Lang::tr{'save'}' /></td>
-    <td class='button1button'>
-        <a href='${General::adminmanualurl}/services-dhcp.html' 
target='_blank'>
-        <img src='/images/web-support.png' alt='$Lang::tr{'online help en'}' 
title='$Lang::tr{'online help en'}' /></a></td>
-</tr>
-</table>
-</form>
-END
-        ;
-}
-&Header::closebox();
-
-#
-# display box with fixed leases
-#
-
-if ($disable_fixed == 0) {
-    $checked{'FIXED_ENABLED'}{'on'} = ($dhcpsettings{'FIXED_ENABLED'} ne 'on') 
? '' : "checked='checked'";
-
-    # if KEY_FIXED is set, this is edit/update not add
-
-    if ($dhcpsettings{'KEY_FIXED'} ne '') {
-        $buttontext  = $Lang::tr{'update'};
-        &Header::openbox('100%', 'left', "$Lang::tr{'edit an existing 
lease'}:", $error_save_fixed);
-    }
-    else {
-        &Header::openbox('100%', 'left', "$Lang::tr{'add new lease'}:", 
$error_save_fixed);
-    }
-
-    print <<END
-<form method='post' name='frm_fixed' action='$ENV{'SCRIPT_NAME'}'>
-<table width='100%' border='0'>
-<tr>
-    <td class='base'>$Lang::tr{'enabled'}:</td>
-    <td><input type='checkbox' name='FIXED_ENABLED' 
$checked{'FIXED_ENABLED'}{'on'} /></td>
-    <td colspan='2'>&nbsp;</td>
-</tr><tr>
-    <td width='25%' class='base'>$Lang::tr{'mac address'}:</td>
-    <td width='25%'><input type='text' name='FIXED_MAC' 
value='$dhcpsettings{'FIXED_MAC'}' size='18' /></td>
-    <td width='25%' class='base'>$Lang::tr{'ip address'}:</td>
-    <td width='25%'><input type='text' name='FIXED_IP' 
value='$dhcpsettings{'FIXED_IP'}' size='18' /></td>
-</tr><tr>
-    <td class='base'>$Lang::tr{'hostname'} $Lang::tr{'or'} FQDN:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td colspan='3'><input type='text' name='FIXED_HOSTNAME' 
value='$dhcpsettings{'FIXED_HOSTNAME'}' size='40' /></td>
-</tr><tr>
-    <td width='25%' class='base'>$Lang::tr{'remark'}:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
-    <td colspan='3'><input type='text' name='FIXED_REMARK' 
value='$dhcpsettings{'FIXED_REMARK'}' size='40' /></td>
-</tr><tr>
-    <td colspan = '4'><b>$Lang::tr{'dhcp bootp pxe data'}</b></td>
-</tr><tr>
-    <td class='base'>filename:&nbsp;<img src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='FIXED_FILENAME' 
value='$dhcpsettings{'FIXED_FILENAME'}' size='18' /></td>
-    <td class='base'>root-path:&nbsp;<img src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='FIXED_ROOTPATH' 
value='$dhcpsettings{'FIXED_ROOTPATH'}' size='18' /></td>
-</tr><tr>
-    <td class='base'>next-server:&nbsp;<img src='/blob.gif' alt='*' /></td>
-    <td><input type='text' name='FIXED_NEXTADDR' 
value='$dhcpsettings{'FIXED_NEXTADDR'}' size='18' /></td>
-    <td colspan='2'>&nbsp;</td>
-</tr>
-</table>
-<hr />
-<table width='100%'>
-<tr>
-    <td class='comment1button'><img src='/blob.gif' align='top' alt='*' 
/>&nbsp;$Lang::tr{'this field may be blank'}
-        &nbsp;&nbsp;$Lang::tr{'dhcp fixed lease help1'}</td>
-    <td class='button1button'><input type='hidden' name='ACTION' 
value='SAVE_FIXED_LEASE' />
-        <input type='hidden' name='KEY_FIXED' 
value='$dhcpsettings{'KEY_FIXED'}' />
-        <input type='submit' name='SUBMIT' value='$buttontext' /></td>
-    <td class='onlinehelp'>&nbsp;</td>
-</tr>
-</table>
-</form>
-END
-        ;
-}
-else {
-    &Header::openbox('100%', 'left', "$Lang::tr{'current fixed leases'}:", 
$error_save_fixed);
-
-    print <<END
-<form method='post' name='frm_fixed_add' action='$ENV{'SCRIPT_NAME'}'>
-<table width='100%'>
-<tr>
-    <td class='comment1button'>&nbsp;</td>
-    <td class='button1button'>
-        <img src='/images/null.gif' width='21' height='1' alt='' />
-        <input type='hidden' name='ACTION' value='ADD_FIXED_LEASE' />
-        <input type='submit' name='SUBMIT' value='$Lang::tr{'add new lease'}' 
/>
-    <td class='onlinehelp'>&nbsp;</td>
-</tr>
-</table>
-&nbsp;&nbsp;
-</form>
-END
-        ;
-}
-
-# Add visual indicators to column headings to show sort order - EO
-my $sortarrow1 = '';
-my $sortarrow2 = '';
-
-if ($dhcpsettings{'SORT_FIXEDLEASELIST'} eq 'FIXEDMACRev') {
-    $sortarrow1 = $Header::sortdn;
-}
-elsif ($dhcpsettings{'SORT_FIXEDLEASELIST'} eq 'FIXEDMAC') {
-    $sortarrow1 = $Header::sortup;
-}
-elsif ($dhcpsettings{'SORT_FIXEDLEASELIST'} eq 'FIXEDIPRev') {
-    $sortarrow2 = $Header::sortdn;
-}
-else {
-    $sortarrow2 = $Header::sortup;
-}
-
-print <<END
-<hr /><table width='100%'>
-<tr>
-    <td width='13%' align='center' nowrap='nowrap'><a 
href='$ENV{'SCRIPT_NAME'}?FIXEDMAC'><b>$Lang::tr{'mac address'}</b></a> 
$sortarrow1</td>
-    <td width='13%' align='center' nowrap='nowrap'><a 
href='$ENV{'SCRIPT_NAME'}?FIXEDIP'><b>$Lang::tr{'ip address'}</b></a> 
$sortarrow2</td>
-    <td width='14%' class='boldbase' 
align='center'><b>$Lang::tr{'hostname'}</b></td>
-    <td width='15%' align='center'><b>$Lang::tr{'remark'}</b></td>
-    <td width='15%' class='boldbase' align='center'><b>next-server</b></td>
-    <td width='15%' class='boldbase' align='center'><b>filename</b></td>
-    <td width='15%' class='boldbase' align='center'><b>root-path</b></td>
-    <td colspan='3' class='boldbase' 
align='center'><b>$Lang::tr{'action'}</b></td>
-</tr>
-END
-    ;
-
-$key = 0;
-foreach $line (@fixedleases) {
-    my $gif   = '';
-    my $gdesc = '';
-
-    chomp($line);
-    my @temp = split(/\,/, $line);
-
-    if ($temp[2] eq "on") {
-        $gif   = 'on.gif';
-        $gdesc = $Lang::tr{'click to disable'};
-    }
-    else {
-        $gif   = 'off.gif';
-        $gdesc = $Lang::tr{'click to enable'};
-    }
-
-    if ($dhcpsettings{'KEY_FIXED'} eq $key) {
-        print "<tr class='selectcolour'>";
-    }
-    else {
-        print "<tr class='table".int(($key % 2) + 1)."colour'>";
-    }
-    print <<END
-<td align='center'>$temp[0]</td>
-<td align='center'>$temp[1]</td>
-<td align='center'>$temp[7]&nbsp;</td>
-<td align='center'>$temp[6]&nbsp;</td>
-<td align='center'>$temp[3]&nbsp;</td>
-<td align='center'>$temp[4]&nbsp;</td>
-<td align='center'>$temp[5]&nbsp;</td>
-
-<td align='center'>
-    <form method='post' name='frm_fixed_ted_$key' action='$ENV{'SCRIPT_NAME'}'>
-    <input type='hidden' name='ACTION' value='$Lang::tr{'toggle enable 
disable'}_fixed' />
-    <input type='image' name='$Lang::tr{'toggle enable disable'}' 
src='/images/$gif' alt='$gdesc' title='$gdesc' />
-    <input type='hidden' name='KEY_FIXED' value='$key' />
-    </form>
-</td>
-
-<td align='center'>
-    <form method='post' name='frm_fixed_e_$key' action='$ENV{'SCRIPT_NAME'}'>
-    <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}_fixed' />
-    <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' 
alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
-    <input type='hidden' name='KEY_FIXED' value='$key' />
-    </form>
-</td>
-
-<td align='center'>
-    <form method='post' name='frm_fixed_r_$key' action='$ENV{'SCRIPT_NAME'}'>
-    <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}_fixed' />
-    <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' 
alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' />
-    <input type='hidden' name='KEY_FIXED' value='$key' />
-    </form>
-</td>
-</tr>
-END
-        ;
-    $key++;
-}    # for all fixed leases
-
-print "</table>";
-
-# If the fixed leases file contains entries, print a legend
-if ($key && $disable_fixed) {
-    print <<END
-<table>
-<tr>
-    <td class='boldbase'>&nbsp;<b>$Lang::tr{'legend'}:&nbsp;</b></td>
-    <td><img src='/images/on.gif' alt='$Lang::tr{'click to disable'}' /></td>
-    <td class='base'>$Lang::tr{'click to disable'}</td>
-    <td>&nbsp;&nbsp;</td>
-    <td><img src='/images/off.gif' alt='$Lang::tr{'click to enable'}' /></td>
-    <td class='base'>$Lang::tr{'click to enable'}</td>
-    <td>&nbsp;&nbsp;</td>
-    <td><img src='/images/edit.gif' alt='$Lang::tr{'edit'}' /></td>
-    <td class='base'>$Lang::tr{'edit'}</td>
-    <td>&nbsp;&nbsp;</td>
-    <td><img src='/images/delete.gif' alt='$Lang::tr{'remove'}' /></td>
-    <td class='base'>$Lang::tr{'remove'}</td>
-</tr>
-</table>
-END
-        ;
-}
-
-&Header::closebox();
-
-#
-# display box with dynamic leases if we have one or more enabled interface(s)
-#
-$enabled_count = 0;
-foreach $interface (@INTERFACEs) {
-    for ($counter = 1; $counter <= $netsettings{"${interface}_COUNT"}; 
$counter++) {
         if ($dhcpsettings{"ENABLED_${interface}_${counter}"} eq 'on') {
             $enabled_count++;
         }
     }
 }
 if ($enabled_count > 0) {
-    &General::PrintActualLeases;
+    &General::GetActualLeases(\...@leases);
 }
 
-&Header::closebigbox();
-&Header::closepage();
 
+##
+## Process Template and Exit
+##
+$tt->process('dhcp.tpl', {
+    'page'          => $page_vars,
+    'system'        => \&Header::get_system_vars,
+    'error_main'    => $error_save_main,
+    'error_fixed'   => $error_save_fixed,
+    'interfaces'    => \...@interfaces,
+    'dhcpsettings'  => \%dhcpsettings,
+    'netsettings'   => \%netsettings,
+    'disable_main'  => $disable_main,
+    'disable_fixed' => $disable_fixed,
+    'sactive'       => $sactive,
+    'leases'        => \...@leases,
+    'fixedleases'   => \...@fixedleases,
+}) || die $tt->error(), "\n";
+
 #
 # write config files, dhcpd.conf etc.
 #

Modified: ipcop/branches/template-branch/html/cgi-bin/netstatus.cgi
===================================================================
--- ipcop/branches/template-branch/html/cgi-bin/netstatus.cgi   2009-06-17 
15:14:05 UTC (rev 3076)
+++ ipcop/branches/template-branch/html/cgi-bin/netstatus.cgi   2009-06-17 
15:18:40 UTC (rev 3077)
@@ -10,6 +10,7 @@
 #
 
 use strict;
+use Template;
 
 # enable only the following on debugging purpose
 #use warnings;
@@ -19,173 +20,139 @@
 require '/usr/lib/ipcop/lang.pl';
 require '/usr/lib/ipcop/header.pl';
 
-my %dhcpsettings=();
-my %netsettings=();
-my %dhcpinfo=();
-my %pppsettings=();
-my $output='';
-$dhcpinfo{'DOMAIN'}=''; # because it may not be defined in the answer
-my $dhcpserver = 0;
+my %dhcpsettings = ();
+my %netsettings  = ();
+my %dhcpinfo     = ();
+my %pppsettings  = ();
+$dhcpinfo{'DOMAIN'} = ''; # because it may not be defined in the answer
+my $dhcpserver   = 0;
+my $page_vars    = &Header::get_page_vars();
 
+##
+## Initialize Template
+##
+my $tt = Template->new({
+    INCLUDE_PATH => '/home/httpd/html/pages:/home/httpd/html/themes',
+    FILTERS => { 
+        'loc' => \&Header::maketext,
+        'color_devices' => \&General::color_devices,
+    },
+}) || die "$Template::ERROR\n";
+
+##
+## Start Page
+##
+&General::CheckSortOrder;
 &General::readhash('/var/ipcop/dhcp/settings', \%dhcpsettings);
 &General::readhash('/var/ipcop/ethernet/settings', \%netsettings);
 &General::readhash('/var/ipcop/ppp/settings', \%pppsettings);
 &Header::showhttpheaders();
-&Header::openpage($Lang::tr{'network status information'}, 1, '');
 
-my @DHCPINTERFACEs=('GREEN','BLUE');
-foreach my $interface (@DHCPINTERFACEs) {
-    for (my $counter = 1; $counter <= $netsettings{"${interface}_COUNT"}; 
$counter++) {
-        if ( $dhcpsettings{"ENABLED_${interface}_${counter}"} eq 'on' ) {
-            $dhcpserver++;
-        }
-    }
-}
+##
+## Interfaces
+##
+my $interfaces = `/sbin/ifconfig -a`;
+$interfaces = &General::color_devices($interfaces);
 
-&Header::openbigbox('100%', 'left');
-
-print "<table width='100%' cellspacing='0' cellpadding='5'border='0'>\n";
-print "<tr><td style='background-color: #FFFFFF;' align='left'>\n";
-print "<a href='#interfaces'>$Lang::tr{'interfaces'}:</a> |\n";
-if ( ($netsettings{'RED_COUNT'} >= 1) && $netsettings{'RED_1_TYPE'} eq "DHCP") 
{
-    print "<a href='#reddhcp'>RED  $Lang::tr{'dhcp configuration'}:</a> |\n";
-}
-if ($dhcpserver > 0) {
-    print "<a href='#leases'>$Lang::tr{'current dynamic leases'}:</a> |\n";
-}
-if ($pppsettings{'TYPE'} =~ 
/^(bewanadsl|alcatelusbk|conexantpciadsl|eagleusbadsl|wanpipe)$/) {
-    print "<a href='#adsl'>$Lang::tr{'adsl settings'}</a> |\n";
-}
-print "<a href='#routing'>$Lang::tr{'routing table entries'}:</a> |\n";
-print "<a href='#arp'> $Lang::tr{'arp table entries'}:</a>\n";
-print "</td></tr></table>\n";
-
-print "<a name='interfaces'/>\n";
-&Header::openbox('100%', 'left', "$Lang::tr{'interfaces'}:");
-$output = `/sbin/ifconfig -a`;
-$output = &General::color_devices($output);
-print "<pre>$output</pre>\n";
-&Header::closebox();
-
-
+##
+## RED DHCP
+##
 if ( ($netsettings{'RED_COUNT'} >= 1)  && $netsettings{'RED_1_TYPE'} eq 
"DHCP") {
-
-    print "<a name='reddhcp'/>\n";
-    &Header::openbox('100%', 'left', "RED $Lang::tr{'dhcp configuration'}:");
     if (-s "/var/log/dhcpclient.info") {
-
         &General::readhash("/var/log/dhcpclient.info", \%dhcpinfo);
-
         my $lsetme=0;
-        my $leasetime="";
+        $dhcpinfo{'leasetime'}="";
         if ($dhcpinfo{'DHCLIENT_LEASETIME'} ne "") {
             $lsetme=$dhcpinfo{'DHCLIENT_LEASETIME'};
             $lsetme=($lsetme/60);
             if ($lsetme > 59) {
-                $lsetme=($lsetme/60); $leasetime=$lsetme." Hour";
+                $lsetme=($lsetme/60); $dhcpinfo{'leasetime'}=$lsetme." Hour";
             } 
             else {
-                $leasetime=$lsetme." Minute";
+                $dhcpinfo{'leasetime'}=$lsetme." Minute";
             }
             if ($lsetme > 1) {
-                $leasetime=$leasetime."s";
+                $dhcpinfo{'leasetime'}=$dhcpinfo{'leasetime'}."s";
             }
         }
-        my $leaseexpires = localtime($dhcpinfo{'DHCLIENT_EXPIRY'});
+        $dhcpinfo{'leaseexpires'} = localtime($dhcpinfo{'DHCLIENT_EXPIRY'});
+    }
+}
 
-        print "<table width='100%'>";
-        if ($dhcpinfo{'DHCLIENT_HOSTNAME'}) {
-            print "<tr><td 
width='30%'>$Lang::tr{'hostname'}:</td><td>$dhcpinfo{'DHCLIENT_HOSTNAME'}.$dhcpinfo{'DHCLIENT_DOMAIN'}</td></tr>\n";
-        } 
-        else {
-            print "<tr><td 
width='30%'>$Lang::tr{'domain'}:</td><td>$dhcpinfo{'DHCLIENT_DOMAIN'}</td></tr>\n";
+##
+## DHCP Server
+##
+my @DHCPINTERFACEs=('GREEN','BLUE');
+foreach my $interface (@DHCPINTERFACEs) {
+    for (my $counter = 1; $counter <= $netsettings{"${interface}_COUNT"}; 
$counter++) {
+        if ( $dhcpsettings{"ENABLED_${interface}_${counter}"} eq 'on' ) {
+            $dhcpserver++;
         }
-        print <<END
-    
<tr><td>$Lang::tr{'gateway'}:</td><td>$dhcpinfo{'DHCLIENT_GATEWAY'}</td></tr>
-    <tr><td>$Lang::tr{'primary 
dns'}:</td><td>$dhcpinfo{'DHCLIENT_DNS1'}</td></tr>
-    <tr><td>$Lang::tr{'secondary 
dns'}:</td><td>$dhcpinfo{'DHCLIENT_DNS2'}</td></tr>
-    <tr><td>$Lang::tr{'dhcp 
server'}:</td><td>$dhcpinfo{'DHCLIENT_SIADDR'}</td></tr>
-    <tr><td>$Lang::tr{'def lease time'}:</td><td>$leasetime</td></tr>
-    <tr><td>$Lang::tr{'lease expires'}:</td><td>$leaseexpires</td></tr>
-</table>
-END
-    ;
     }
-    else {
-        print "$Lang::tr{'no dhcp lease'}";
-    }
-    &Header::closebox();
 }
 
-if ($dhcpserver > 0) {
-    print "<a name='leases'/>";
-    &General::CheckSortOrder;
-    &General::PrintActualLeases;
-}
+my @leases = ();
+#if ($dhcpserver > 0) {
+    &General::GetActualLeases(\...@leases);
+#}
 
+##
+## ADSL Settings / Status
+##
+my $adsl = '';
 if ( ($netsettings{'RED_COUNT'} == 0)  && (exists($pppsettings{'TYPE'})) ) {
-    my $output1='';
-    my $output2='';
     if ($pppsettings{'TYPE'} eq 'bewanadsl') {
-        print "<a name='adsl'/>\n";
-        &Header::openbox('100%', 'left', "$Lang::tr{'adsl settings'}:");
+        my $output1='';
+        my $output2='';
         $output1 = `/usr/bin/unicorn_status`;
         $output1 = &Header::cleanhtml($output1,"y");
         $output2 = `/bin/cat /proc/net/atm/UNICORN:*`;
         $output2 = &Header::cleanhtml($output2,"y");
-        print "<pre>$output1$output2</pre>\n";
-        &Header::closebox();
+        $adsl = $output1 . $output2;
     }
     if ($pppsettings{'TYPE'} eq 'alcatelusbk') {
-        print "<a name='adsl'/>\n";
-        &Header::openbox('100%', 'left', "$Lang::tr{'adsl settings'}:");
-        $output = `/bin/cat /proc/net/atm/speedtch:*`;
-        $output = &Header::cleanhtml($output,"y");
-        print "<pre>$output</pre>\n";
-        &Header::closebox();
+        $adsl = `/bin/cat /proc/net/atm/speedtch:*`;
+        $adsl = &Header::cleanhtml($adsl,"y");
     }
     if ($pppsettings{'TYPE'} eq 'conexantpciadsl') {
-        print "<a name='adsl'/>\n";
-        &Header::openbox('100%', 'left', "$Lang::tr{'adsl settings'}:");
-        $output = `/bin/cat /proc/net/atm/CnxAdsl:*`;
-        $output = &Header::cleanhtml($output,"y");
-        print "<pre>$output</pre>\n";
-        &Header::closebox();
+        $adsl = `/bin/cat /proc/net/atm/CnxAdsl:*`;
+        $adsl = &Header::cleanhtml($adsl,"y");
     }
     if ($pppsettings{'TYPE'} eq 'eagleusbadsl') {
-        print "<a name='adsl'/>\n";
-        &Header::openbox('100%', 'left', "$Lang::tr{'adsl settings'}:");
-        $output = `/usr/sbin/eaglestat`;
-        $output = &Header::cleanhtml($output,"y");
-        print "<pre>$output</pre>\n";
-        &Header::closebox();
+        $adsl = `/usr/sbin/eaglestat`;
+        $adsl = &Header::cleanhtml($adsl,"y");
     }
     if ($pppsettings{'TYPE'} eq 'wanpipe') {
-        print "<a name='adsl'/>\n";
-        &Header::openbox('100%', 'left', "$Lang::tr{'adsl settings'}:");
-        $output = `/bin/cat /proc/net/wanrouter/config | /usr/bin/sort`;
-        $output = &Header::cleanhtml($output,"y");
-        print "<pre>$output</pre>\n";
-        &Header::closebox();
+        $adsl = `/bin/cat /proc/net/wanrouter/config | /usr/bin/sort`;
+        $adsl = &Header::cleanhtml($adsl,"y");
     }
 }
 
-print "<a name='routing'/>\n";
-&Header::openbox('100%', 'left', "$Lang::tr{'routing table entries'}:");
-$output = `/sbin/route -n`;
-$output = &Header::cleanhtml($output,"y");
-$output = &General::color_devices($output);
-print "<pre>$output</pre>\n";
-&Header::closebox();
+##
+## Routing table
+##
+my $route = `/sbin/route -n`;
+$route = &Header::cleanhtml($route,"y");
 
-print "<a name='arp'/>\n";
-&Header::openbox('100%', 'left', "$Lang::tr{'arp table entries'}:");
-$output = `/sbin/arp -n`;
-$output = &Header::cleanhtml($output,"y");
-$output = &General::color_devices($output);
-print "<pre>$output</pre>\n";
-&Header::closebox();
+##
+## ARP Table
+##
+my $arp = `/sbin/arp -n`;
+$arp = &Header::cleanhtml($arp,"y");
 
-&Header::closebigbox();
-
-&Header::closepage();
+##
+## Process Template and Exit
+##
+$tt->process('netstatus.tpl', {
+    'page'        => $page_vars,
+    'system'      => \&Header::get_system_vars,
+    'dhcpserver'  => $dhcpserver,
+    'dhcpsettings'=> \%dhcpsettings,
+    'pppsettings' => \%pppsettings,
+    'netsettings' => \%netsettings,
+    'interfaces'  => $interfaces,
+    'leases'      => \...@leases,
+    'adsl'        => $adsl,
+    'route'       => $route,
+    'arp'         => $arp,
+}) || die $tt->error(), "\n";

Added: ipcop/branches/template-branch/html/html/pages/dhcp.tpl
===================================================================
--- ipcop/branches/template-branch/html/html/pages/dhcp.tpl                     
        (rev 0)
+++ ipcop/branches/template-branch/html/html/pages/dhcp.tpl     2009-06-17 
15:18:40 UTC (rev 3077)
@@ -0,0 +1,331 @@
+[% location = 'alt services' | loc %] 
+[% sublocation = 'dhcp server' | loc %]
+[% title = 'dhcp configuration' | loc %]
+
+[% PROCESS "$page.theme/vars.tpl" %]
+[% INCLUDE "$page.theme/header.tpl" %]
+[% INCLUDE "$page.theme/openbigbox.tpl" 
+    width = '100%'
+    align = 'left' %]
+
+[% INCLUDE "$page.theme/errorbox.tpl" %]
+[% INCLUDE "$page.theme/warningbox.tpl" %]
+
+[% caption = 'settings' FILTER loc %]
+[% boxframe = error_main %]
+[% INCLUDE "$page.theme/openbox.tpl"
+    width = '100%'
+    align = 'left'
+    caption = caption 
+    boxframe = boxframe %]
+<form method='post' name='frm_main' action='[% page.url %]'>
+<table width='100%'>
+<tr>
+    <td width='25%'>[% 'dhcp server' | loc %]:</td>
+    [% sactive %]
+    <td width='25%'>&nbsp;</td>
+    <td width='25%'>&nbsp;</td>
+</tr>
+</table>
+<hr />
+[% FOREACH interface IN interfaces %]
+    [% interface_count = interface _ "_COUNT" %]
+    [% FOREACH count IN [ 1 .. netsettings.${interface_count} ] %]
+        [% lc_interface = interface | lower %]
+        [% disable_text = 'disabled=\'disabled\'' IF disable_main %]
+
+        <table width='100%'>
+        <tr>
+            [% enabled_interface_count = 'ENABLED_' _ interface _ '_' _ count 
%]
+            <td width='25%' class='boldbase'><span class='ipcop_iface_[% 
lc_interface %]'>[% lc_interface | loc %]</span></td>
+            <td width='25%' class='base'>[% 'enabled' | loc %]:<input 
type='checkbox' name='ENABLED_[% interface %]_[% count %]' [% 
'checked=\'checked\'' IF dhcpsettings.${enabled_interface_count} == 'on' %] [% 
disable_text %] /></td>
+            <td width='25%' class='base'>[% 'ip address' | loc %]/[% 'netmask' 
| loc %]:</td>
+            [% interface_count_address = interface _ '_' _ count _ '_ADDRESS' 
%]
+            [% interface_count_netmask = interface _ '_' _ count _ '_NETMASK' 
%]
+            <td width='25%' class='base'><b>[% 
netsettings.${interface_count_address} %]/[% 
netsettings.${interface_count_netmask} %]</b></td>
+        </tr><tr>
+            [% start_addr_interface_count = 'START_ADDR_' _ interface _ '_' _ 
count %]
+            <td width='25%' class='base'>[% 'start address' | loc 
%]:&nbsp;<img src='/blob.gif' alt='*' /></td>
+            <td width='25%'><input type='text' name='START_ADDR_[% interface 
%]_[% count %]' value='[% dhcpsettings.${start_addr_interface_count} %]' [% 
disable_text %] /></td>
+            [% end_addr_interface_count = 'END_ADDR_' _ interface _ '_' _ 
count %]
+            <td width='25%' class='base'>[% 'end address' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+            <td width='25%'><input type='text' name='END_ADDR_[% interface 
%]_[% count %]' value='[% dhcpsettings.${end_addr_interface_count} %]' [% 
disable_text %] /></td>
+        </tr>
+    [% IF disable_main == 0 %]
+        <tr>
+            [% default_lease_time_interface_count = 'DEFAULT_LEASE_TIME_' _ 
interface _ '_' _ count %]
+            <td class='base'>[% 'default lease time' | loc %]:</td>
+            <td><input type='text' name='DEFAULT_LEASE_TIME_[% interface %]_[% 
count %]' value='[% dhcpsettings.${default_lease_time_interface_count} %]' 
size='5' /></td>
+            [% domain_name_interface_count = 'DOMAIN_NAME_' _ interface _ '_' 
_ count %]
+            <td class='base'>[% 'domain name suffix' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='DOMAIN_NAME_[% interface %]_[% count 
%]' value='[% dhcpsettings.${domain_name_interface_count} %]' /></td>
+        </tr><tr>
+            [% enabled_bootp_interface_count = 'ENABLED_BOOTP_' _ interface _ 
'_' _ count %]
+            <td>[% 'dhcp allow bootp' | loc %]:</td>
+            <td><input type='checkbox' name='ENABLED_BOOTP_[% interface %]_[% 
count %]' [% 'checked=\'checked\'' IF 
dhcpsettings.${enabled_bootp_interface_count} == 'on' %] /></td>
+            <td>&nbsp;</td><td>&nbsp;</td>
+        </tr><tr>
+            [% dns1_interface_count = 'DNS1_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'primary dns' | loc %]:</td>
+            <td><input type='text' name='DNS1_[% interface %]_[% count %]' 
value='[% dhcpsettings.${dns1_interface_count} %]' /></td>
+            [% dns2_interface_count = 'DNS2_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'secondary dns' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='DNS2_[% interface %]_[% count %]' 
value='[% dhcpsettings.${dns2_interface_count} %]' /></td>
+        </tr><tr>
+            [% ntp1_interface_count = 'NTP1_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'primary ntp server' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='NTP1_[% interface %]_[% count %]' 
value='[% dhcpsettings.${ntp1_interface_count} %]' /></td>
+            [% ntp2_interface_count = 'NTP2_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'secondary ntp server' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='NTP2_[% interface %]_[% count %]' 
value='[% dhcpsettings.${ntp2_interface_count} %]' /></td>
+        </tr><tr>
+            [% wins1_interface_count = 'WINS1_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'primary wins server address' | loc 
%]:&nbsp;<img src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='WINS1_[% interface %]_[% count %]' 
value='[% dhcpsettings.${wins1_interface_count} %]' /></td>
+            [% wins2_interface_count = 'WINS2_' _ interface _ '_' _ count %]
+            <td class='base'>[% 'secondary wins server address' | loc 
%]:&nbsp;<img src='/blob.gif' alt='*' /></td>
+            <td><input type='text' name='WINS2_[% interface %]_[% count %]' 
value='[% dhcpsettings.${wins2_interface_count} %]' /></td>
+        </tr>
+    [% END %]
+    </table><hr />
+    [% END %]
+[% END %]
+
+[% IF disable_main == 1 %]
+    </form>
+[% ELSE %]
+    <table width='100%'>
+    <tr>
+       <td class='comment1button'><img src='/blob.gif' align='top' alt='*' 
/>&nbsp;[% 'this field may be blank' | loc %]</td>
+       <td class='button1button'><input type='hidden' name='ACTION' 
value='SAVE_MAIN' /><input type='submit' name='SUBMIT' value='[% 'save' | loc 
%]' /></td>
+        <td class='button1button'>
+           <a href='[% system.adminmanualurl %]/services-dhcp.html' 
target='_blank'>
+            <img src='/images/web-support.png' alt='[% 'online help en' | loc 
%]' title='[% 'online help en' | loc %]' /></a></td>
+    </tr>
+</table>
+</form>
+[% END %]
+[% INCLUDE "$page.theme/closebox.tpl" %]
+
+[% boxframe = error_fixed %]
+[% IF disable_fixed == 0 %]
+    [% IF dhcpsettings.KEY_FIXED != '' %]
+        [% buttontext = 'update' FILTER loc %]
+        [% caption = 'edit an existing lease' FILTER loc %]
+    [% ELSE %]
+        [% buttontext = 'add' FILTER loc %]
+        [% caption = 'add new lease' FILTER loc %]
+    [% END %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = caption _ ':'
+        boxframe = boxframe %]
+
+    <form method='post' name='frm_fixed' action='[% page.url %]'>
+    <table width='100%' border='0'>
+    <tr>
+        <td class='base'>[% 'enabled' | loc %]:</td>
+        <td><input type='checkbox' name='FIXED_ENABLED' [% 
'checked=\'checked\'' IF dhcpsettings.FIXED_ENABLED == 'on' %]/></td>
+        <td colspan='2'>&nbsp;</td>
+    </tr><tr>
+        <td width='25%' class='base'>[% 'mac address' | loc %]:</td>
+        <td width='25%'><input type='text' name='FIXED_MAC' value='[% 
dhcpsettings.FIXED_MAC %]' size='18' /></td>
+        <td width='25%' class='base'>[% 'ip address' | loc %]:</td>
+        <td width='25%'><input type='text' name='FIXED_IP' value='[% 
dhcpsettings.FIXED_IP %]' size='18' /></td>
+    </tr><tr>
+        <td class='base'>[% 'hostname' | loc %] [% 'or' | loc %] 
FQDN:&nbsp;<img src='/blob.gif' alt='*' /></td>
+        <td colspan='3'><input type='text' name='FIXED_HOSTNAME' value='[% 
dhcpsettings.FIXED_HOSTNAME %]' size='40' /></td>
+    </tr><tr>
+        <td width='25%' class='base'>[% 'remark' | loc %]:&nbsp;<img 
src='/blob.gif' alt='*' /></td>
+        <td colspan='3'><input type='text' name='FIXED_REMARK' value='[% 
dhcpsettings.FIXED_REMARK %]' size='40' /></td>
+    </tr><tr>
+        <td colspan = '4'><b>[% 'dhcp bootp pxe data' | loc %]</b></td>
+    </tr><tr>
+        <td class='base'>filename:&nbsp;<img src='/blob.gif' alt='*' /></td>
+        <td><input type='text' name='FIXED_FILENAME' value='[% 
dhcpsettings.FIXED_FILENAME %]' size='18' /></td>
+        <td class='base'>root-path:&nbsp;<img src='/blob.gif' alt='*' /></td>
+        <td><input type='text' name='FIXED_ROOTPATH' value='[% 
dhcpsettings.FIXED_ROOTPATH %]' size='18' /></td>
+    </tr><tr>
+        <td class='base'>next-server:&nbsp;<img src='/blob.gif' alt='*' /></td>
+        <td><input type='text' name='FIXED_NEXTADDR' value='[% 
dhcpsettings.FIXED_NEXTADDR %]' size='18' /></td>
+        <td colspan='2'>&nbsp;</td>
+    </tr>
+    </table><hr />
+    <table width='100%'>
+    <tr>
+        <td class='comment1button'><img src='/blob.gif' align='top' alt='*' 
/>&nbsp;[% 'this field may be blank' | loc %]
+            &nbsp;&nbsp;[% 'dhcp fixed lease help1' | loc %]</td>
+        <td class='button1button'><input type='hidden' name='ACTION' 
value='SAVE_FIXED_LEASE' />
+            <input type='hidden' name='KEY_FIXED' value='[% 
dhcpsettings.KEY_FIXED %]' />
+            <input type='submit' name='SUBMIT' value='[% buttontext %]' /></td>
+        <td class='onlinehelp'>&nbsp;</td>
+    </tr>
+    </table>
+    </form>
+[% ELSE %]
+    [% caption = 'current fixed leases' FILTER loc %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = caption _ ':'
+        boxframe = boxframe %]
+
+    <form method='post' name='frm_fixed_add' action='[% page.url %]'>
+    <table width='100%'>
+    <tr>
+        <td class='comment1button'>&nbsp;</td>
+        <td class='button1button'>
+            <img src='/images/null.gif' width='21' height='1' alt='' />
+            <input type='hidden' name='ACTION' value='ADD_FIXED_LEASE' />
+            <input type='submit' name='SUBMIT' value='[% 'add new lease' | loc 
%]' />
+        <td class='onlinehelp'>&nbsp;</td>
+    </tr>
+    </table>
+    &nbsp;&nbsp;
+    </form>
+[% END %]
+
+[% IF dhcpsettings.SORT_FIXEDLEASELIST == 'FIXEDMACRev' %]
+    [% sortarrow1 = mytheme.srtdn %]
+    [% sortarrow2 = '' %]
+[% ELSIF dhcpsettings.SORT_FIXEDLEASELIST == 'FIXEDMAC' %]
+    [% sortarrow1 = mytheme.sortup %]
+    [% sortarrow2 = '' %]
+[% ELSIF dhcpsettings.SORT_FIXEDLEASELIST == 'FIXEDIPRev' %]
+    [% sortarrow1 = '' %]
+    [% sortarrow2 = mytheme.sortdn %]
+[% ELSE %]
+    [% sortarrow1 = '' %]
+    [% sortarrow2 = mytheme.sortup %]
+[% END %]
+<hr /><table width='100%'>
+<tr>
+    <td width='13%' align='center' nowrap='nowrap'><a href='[% page.url 
%]?FIXEDMAC'><b>[% 'mac address' | loc %]</b></a> [% sortarrow1 %]</td>
+    <td width='13%' align='center' nowrap='nowrap'><a href='[% page.url 
%]?FIXEDIP'><b>[% 'ip address' | loc %]</b></a> [% sortarrow2 %]</td>
+    <td width='14%' class='boldbase' align='center'><b>[% 'hostname' | loc 
%]</b></td>
+    <td width='15%' align='center'><b>[% 'remark' | loc %]</b></td>
+    <td width='15%' class='boldbase' align='center'><b>next-server</b></td>
+    <td width='15%' class='boldbase' align='center'><b>filename</b></td>
+    <td width='15%' class='boldbase' align='center'><b>root-path</b></td>
+    <td colspan='3' class='boldbase' align='center'><b>[% 'action' | loc 
%]</b></td>
+</tr>
+
+[% FOREACH lease IN fixedleases %]
+    [% IF lease.enabled == 'on' %]
+        [% gif = 'on.gif' %]
+        [% gdesc = 'click to disable' FILTER loc %]
+    [% ELSE %]
+        [% gif = 'off.gif' %]
+        [% gdesc = 'click to enable' FILTER loc %]
+    [% END %]
+    
+    [% IF loop.index == dhcpsettings.KEY_FIXED %]
+        <tr class='selectcolour'>
+    [% ELSE %]
+         <tr class='table[% (loop.index % 2) + 1 %]colour'>
+    [% END %]
+
+    <td align='center'>[% lease.mac %]</td>
+    <td align='center'>[% lease.ip %]</td>
+    <td align='center'>[% lease.hostname %]&nbsp;</td>
+    <td align='center'>[% lease.remark %]&nbsp;</td>
+    <td align='center'>[% lease.nextaddr %]&nbsp;</td>
+    <td align='center'>[% lease.filename %]&nbsp;</td>
+    <td align='center'>[% lease.rootpath %]&nbsp;</td>
+
+    <td align='center'>
+        <form method='post' name='frm_fixed_ted_[% loop.index %]' action='[% 
page.url %]'>
+            <input type='hidden' name='ACTION' value='[% 'toggle enable 
disable' | loc %]_fixed' />
+            <input type='image' name='[% 'toggle enable disable' | loc %]' 
src='/images/[% gif %]' alt='[% gdesc %]' title='[% gdesc %]' />
+            <input type='hidden' name='KEY_FIXED' value='[% loop.index %]' />
+        </form>
+    </td>
+
+    <td align='center'>
+        <form method='post' name='frm_fixed_e_[% loop.indx %]' action='[% 
page.url %]'>
+            <input type='hidden' name='ACTION' value='[% 'edit' | loc 
%]_fixed' />
+            <input type='image' name='[% 'edit' | loc %]' 
src='/images/edit.gif' alt='[% 'edit' | loc %]' title='[% 'edit' | loc %]' />
+            <input type='hidden' name='KEY_FIXED' value='[% loop.index %]' />
+        </form>
+    </td>
+
+    <td align='center'>
+        <form method='post' name='frm_fixed_r_[% loop.indx %]' action='[% 
page.url %]'>
+            <input type='hidden' name='ACTION' value='[% 'remove' | loc 
%]_fixed' />
+            <input type='image' name='[% 'remove' | loc %]' 
src='/images/delete.gif' alt='[% 'remove' | loc %]' title='[% 'remove' | loc 
%]' />
+            <input type='hidden' name='KEY_FIXED' value='[% loop.index %]' />
+        </form>
+    </td>
+</tr>
+[% END %]
+</table>
+
+[% IF fixedleases.size > 0 && disable_fixed %]
+<table>
+<tr>
+    <td class='boldbase'>&nbsp;<b>[% 'legend' | loc %]:&nbsp;</b></td>
+    <td><img src='/images/on.gif' alt='[% 'click to disable' | loc %]' /></td>
+    <td class='base'>[% 'click to disable' | loc %]</td>
+    <td>&nbsp;&nbsp;</td>
+    <td><img src='/images/off.gif' alt='[% 'click to enable' | loc %]' /></td>
+    <td class='base'>[% 'click to enable' | loc %]</td>
+    <td>&nbsp;&nbsp;</td>
+    <td><img src='/images/edit.gif' alt='[% 'edit' | loc %]' /></td>
+    <td class='base'>[% 'edit' | loc %]</td>
+    <td>&nbsp;&nbsp;</td>
+    <td><img src='/images/delete.gif' alt='[% 'remove' | loc %]' /></td>
+    <td class='base'>[% 'remove' | loc %]</td>
+</tr>
+</table>
+[% END %]
+[% INCLUDE "$page.theme/closebox.tpl" %]
+
+[% IF leases.size > 0 %]
+    [% caption = 'current dynamic leases' FILTER loc %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = caption _ ':'
+        boxframe = boxframe %]
+
+    <table width='100%'>
+    <tr>
+        <td width='25%' align='center'><a href='[% page.url %]?ETHER[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'ETHER' %]'><b>[% 'mac address' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'ETHERRev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'ETHER' %]</td>
+        <td width='25%' align='center'><a href='[% page.url %]?IPADDR[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'IPADDR' %]'><b>[% 'ip address' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'IPADDRRev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'IPADDR' 
%]</td>
+        <td width='20%' align='center'><a href='[% page.url %]?HOSTNAME[% 
'Rev' IF dhcpsettings.SORT_LEASELIST == 'HOSTNAME' %]'><b>[% 'hostname' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'HOSTNAMERev' 
%]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'HOSTNAME' 
%]</td>
+        <td width='30%' align='center'><a href='[% page.url %]?ENDTIME[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'ENDTIME' %]'><b>[% 'lease expires' | loc %] 
(local time d/m/y)</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'ENDTIMERev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'ENDTIME' 
%]</td>
+    </tr>
+    [% FOREACH lease IN leases %]
+        <tr class='table[% (loop.index % 2) + 1 %]colour'>
+            <td align='center'>[% lease.ETHER %]</td>
+            <td align='center'>[% lease.IPADDR %]</td>
+            <td align='center'>&nbsp;[% lease.HOSTNAME %]</td>
+            <td align='center'>
+            [% IF lease.ENDTIME == 'never' %]
+                [% 'no time limit' | loc %]
+            [% ELSE %]
+                [% USE date %]
+                [% now = date.format(date.now, '%s') %]
+                [% IF now > lease.ENDTIME %]
+                    <strike>[% date.format(lease.ENDTIME, format="%d/%m/%y 
%H:%M:%S") %]</strike>
+                [% ELSE %]
+                    [% date.format(lease.ENDTIME, format="%d/%m/%y %H:%M:%S") 
%]
+                [% END %]
+            [% END %]
+        </td></tr>
+    [% END %]
+    </table>
+    [% INCLUDE "$page.theme/closebox.tpl" %]
+[% END %]
+
+[% INCLUDE "$page.theme/closebigbox.tpl" %]
+[% INCLUDE "$page.theme/footer.tpl" %]

Added: ipcop/branches/template-branch/html/html/pages/netstatus.tpl
===================================================================
--- ipcop/branches/template-branch/html/html/pages/netstatus.tpl                
                (rev 0)
+++ ipcop/branches/template-branch/html/html/pages/netstatus.tpl        
2009-06-17 15:18:40 UTC (rev 3077)
@@ -0,0 +1,145 @@
+[% location = 'network' | loc %]
+[% sublocation = 'ssnetwork status' | loc %]
+[% title = 'network status information' | loc %]
+
+[% PROCESS "$page.theme/vars.tpl" %]
+[% INCLUDE "$page.theme/header.tpl" %]
+[% INCLUDE "$page.theme/openbigbox.tpl" 
+    align = 'left' %]
+
+[% INCLUDE "$page.theme/errorbox.tpl" %]
+[% INCLUDE "$page.theme/warningbox.tpl" %]
+
+<table width='100%' cellspacing='0' cellpadding='5'border='0'>
+<tr><td style='background-color: #FFFFFF;' align='left'>
+    <a href='#interfaces'>[% 'interfaces' | loc %]:</a> |
+    [% IF netsettings.RED_COUNT >= 1 AND netsettings.RED_1_TYPE == 'DHCP' %]
+        <a href='#reddhcp'>RED  [% 'dhcp configuration' | loc %]:</a> |
+    [% END %]
+    [% IF dhcpserver > 0 %]
+        <a href='#leases'>[% 'current dynamic leases' | loc %]:</a> |
+    [% END %]
+    [% IF pppsettings.TYPE.match 
('^(bewanadsl|alcatelusbk|conexantpciadsl|eagleusbadsl|wanpipe)$') %]
+        <a href='#adsl'>[% 'adsl settings' | loc %]</a> |
+    [% END %]
+    <a href='#routing'>[% 'routing table entries' | loc %]:</a> |
+    <a href='#arp'>[% 'arp table entries' | loc %]:</a>
+    </td>
+</tr></table>
+
+<a name='interfaces'/>
+[% caption = 'interfaces'|loc %]
+[% INCLUDE "$page.theme/openbox.tpl"
+    width = '100%'
+    align = 'left'
+    caption = caption _ ":" %]
+<pre>[% interfaces %]</pre>
+[% INCLUDE "$page.theme/closebox.tpl" %]
+
+[% IF netsettings.RED_COUNT >= 1 AND netsettings.RED_1_TYPE == 'DHCP' %]
+    <a name='reddhcp'/>
+    [% caption = 'dhcp configuration'|loc %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = "RED " _ caption _ ":" %]
+    
+    [% IF dhcpinfo.size > 0 %]
+        <table width='100%'>
+        [% IF dhcpinfo.DHCLIENT_HOSTNAME %]
+            <tr><td width='30%'>[% 'hostname' | loc %]:</td>
+                <td>[% dhcpinfo.DHCLIENT_HOSTNAME %].[% 
dhcpinfo.DHCLIENT_DOMAIN %]</td></tr>
+        [% ELSE %]
+            <tr><td width='30%'>[% 'domain' | loc %]:</td><td>[% 
dhcpinfo.DHCLIENT_DOMAIN %]</td></tr>\n";
+        [% END %]
+        <tr><td>[% 'gateway' | loc %]:</td><td>[% dhcpinfo.DHCLIENT_GATEWAY 
%]</td></tr>
+        <tr><td>[% 'primary dns' | loc %]:</td><td>[% dhcpinfo.DHCLIENT_DNS1 
%]</td></tr>
+        <tr><td>[% 'secondary dns' | loc %]:</td><td>[% dhcpinfo.DHCLIENT_DNS2 
%]</td></tr>
+        <tr><td>[% 'dhcp server' | loc %]:</td><td>[% dhcpinfo.DHCLIENT_SIADDR 
%]</td></tr>
+        <tr><td>[% 'def lease time' | loc %]:</td><td>[% dhcpinfo.leasetime 
%]</td></tr>
+        <tr><td>[% 'lease expires' | loc %]:</td><td>[% dhcpinfo.leaseexpires 
%]</td></tr>
+        </table>
+    [% ELSE %]
+        [% 'no dhcp lease' | loc %]
+    [% END %]
+    [% INCLUDE "$page.theme/closebox.tpl" %]
+[% END %]
+
+[% IF leases.size > 0 %]
+    <a name='leases'/>
+    [% caption = 'current dynamic leases' FILTER loc %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = caption _ ':'
+        boxframe = boxframe %]
+
+    <table width='100%'>
+    <tr>
+        <td width='25%' align='center'><a href='[% page.url %]?ETHER[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'ETHER' %]'><b>[% 'mac address' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'ETHERRev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'ETHER' %]</td>
+        <td width='25%' align='center'><a href='[% page.url %]?IPADDR[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'IPADDR' %]'><b>[% 'ip address' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'IPADDRRev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'IPADDR' 
%]</td>
+        <td width='20%' align='center'><a href='[% page.url %]?HOSTNAME[% 
'Rev' IF dhcpsettings.SORT_LEASELIST == 'HOSTNAME' %]'><b>[% 'hostname' | loc 
%]</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'HOSTNAMERev' 
%]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'HOSTNAME' 
%]</td>
+        <td width='30%' align='center'><a href='[% page.url %]?ENDTIME[% 'Rev' 
IF dhcpsettings.SORT_LEASELIST == 'ENDTIME' %]'><b>[% 'lease expires' | loc %] 
(local time d/m/y)</b></a>
+            [% mytheme.sortdn IF dhcpsettings.SORT_LEASELIST == 'ENDTIMERev' %]
+            [% mytheme.sortup IF dhcpsettings.SORT_LEASELIST == 'ENDTIME' 
%]</td>
+    </tr>
+    [% FOREACH lease IN leases %]
+        <tr class='table[% (loop.index % 2) + 1 %]colour'>
+            <td align='center'>[% lease.ETHER %]</td>
+            <td align='center'>[% lease.IPADDR %]</td>
+            <td align='center'>&nbsp;[% lease.HOSTNAME %]</td>
+            <td align='center'>
+            [% IF lease.ENDTIME == 'never' %]
+                [% 'no time limit' | loc %]
+            [% ELSE %]
+                [% USE date %]
+                [% now = date.format(date.now, '%s') %]
+                [% IF now > lease.ENDTIME %]
+                    <strike>[% date.format(lease.ENDTIME, format="%d/%m/%y 
%H:%M:%S") %]</strike>
+                [% ELSE %]
+                    [% date.format(lease.ENDTIME, format="%d/%m/%y %H:%M:%S") 
%]
+                [% END %]
+            [% END %]
+        </td></tr>
+    [% END %]
+    </table>
+    [% INCLUDE "$page.theme/closebox.tpl" %]
+[% END %]
+
+[% IF pppsettings.TYPE.match 
('^(bewanadsl|alcatelusbk|conexantpciadsl|eagleusbadsl|wanpipe)$') %]
+    <a name='adsl'/>
+    [% caption = 'adsl settings'|loc %]
+    [% INCLUDE "$page.theme/openbox.tpl"
+        width = '100%'
+        align = 'left'
+        caption = caption _ ":" %]
+    <pre>[% adsl %]</pre>
+    [% INCLUDE "$page.theme/closebox.tpl" %]
+[% END %]
+
+<a name='routing'/>
+[% caption = 'routing table entries'|loc %]
+[% INCLUDE "$page.theme/openbox.tpl"
+    width = '100%'
+    align = 'left'
+    caption = caption _ ":" %]
+<pre>[% route | color_devices %]</pre>
+[% INCLUDE "$page.theme/closebox.tpl" %]
+
+<a name='arp'/>
+[% caption = 'arp table entries'|loc %]
+[% INCLUDE "$page.theme/openbox.tpl"
+    width = '100%'
+    align = 'left'
+    caption = caption _ ":" %]
+<pre>[% arp | color_devices %]</pre>
+[% INCLUDE "$page.theme/closebox.tpl" %]
+
+[% INCLUDE "$page.theme/closebigbox.tpl" %]
+[% INCLUDE "$page.theme/footer.tpl" %]

Modified: ipcop/branches/template-branch/src/libs/general-functions.pl
===================================================================
--- ipcop/branches/template-branch/src/libs/general-functions.pl        
2009-06-17 15:14:05 UTC (rev 3076)
+++ ipcop/branches/template-branch/src/libs/general-functions.pl        
2009-06-17 15:18:40 UTC (rev 3077)
@@ -1075,6 +1075,69 @@
     &Header::closebox();
 }
 
+sub GetActualLeases
+{
+    my $list     = $_[0];
+    our %dhcpsettings = ();
+
+    sub leasesort
+    {
+        my $qs = '';
+        if (rindex($dhcpsettings{'SORT_LEASELIST'}, 'Rev') != -1) {
+            $qs = substr($dhcpsettings{'SORT_LEASELIST'}, 0, 
length($dhcpsettings{'SORT_LEASELIST'}) - 3);
+            if ($qs eq 'IPADDR') {
+                my @a = split(/\./, $a->{$qs});
+                my @b = split(/\./, $b->{$qs});
+                       ($b[0] <=> $a[0])
+                    || ($b[1] <=> $a[1])
+                    || ($b[2] <=> $a[2])
+                    || ($b[3] <=> $a[3]);
+            }
+            else {
+                $b->{$qs} cmp $a->{$qs};
+            }
+        }
+        else    #not reverse
+        {
+            $qs = $dhcpsettings{'SORT_LEASELIST'};
+            if ($qs eq 'IPADDR') {
+                my @a = split(/\./, $a->{$qs});
+                my @b = split(/\./, $b->{$qs});
+                       ($a[0] <=> $b[0])
+                    || ($a[1] <=> $b[1])
+                    || ($a[2] <=> $b[2])
+                    || ($a[3] <=> $b[3]);
+            }
+            else {
+                $a->{$qs} cmp $b->{$qs};
+            }
+        }
+    }
+
+    my @leases = ();
+    my ($ip, $endtime, $ether, $hostname, @record, $record);
+    open(LEASES, "/var/run/dnsmasq/dnsmasq.leases");
+    while (my $line = <LEASES>) {
+        next if ($line =~ /^\s*#/);
+        chomp($line);
+        my @temp = split(' ', $line);
+        
+        my $hostname = &Header::cleanhtml($temp[3], "y");
+        my %lease = (
+            'IPADDR'   => $temp[2],
+            'ENDTIME'  => $temp[0],
+            'ETHER'    => $temp[1],
+            'HOSTNAME' => $hostname);
+        push (@leases, \%lease);
+    }
+    close(LEASES);
+
+    #Get sort method
+    $dhcpsettings{'SORT_LEASELIST'} = 'IPADDR';     #default
+    &General::readhash("${General::swroot}/dhcp/settings", \%dhcpsettings);    
#or maybe saved !
+    @{$list} = sort leasesort @leases;
+}
+
 sub speedtouchversion
 {
     my $speedtouch;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Ipcop-svn mailing list
Ipcop-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipcop-svn

Reply via email to