require "Netlist.pm";
Netlist->import();
my $Netlist = Netlist->new($db, $admin, \%conf);
use Socket;



#**********************************************************
#
#**********************************************************
sub netlist_list {
  $Netlist->{ACTION}='add';
  $Netlist->{ACTION_LNG}=$_ADD;

  if($FORM{add}) {
    $Netlist->ip_add({ %FORM });
    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_ADDED");
     }
    undef %FORM;
  }
  elsif($FORM{change}) {
    $FORM{DATE}=$DATE;
    $Netlist->ip_change({ %FORM });
    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_CHANGED"); 
     }
    undef %FORM;
  }
 	elsif(defined($FORM{chg})) {
    $Netlist->ip_info($FORM{chg});
    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_CHANGING");  	
     }
    $Netlist->{ACTION}='change';
    $Netlist->{ACTION_LNG}=$_CHANGE;
  }
  elsif(defined($FORM{del}) && defined($FORM{is_js_confirmed}) ) {
    $Netlist->ip_del($FORM{del});
      if(! $Netlist->{errno}) {
    	$html->message('info', $_INFO, "$_DELETED"); 
     }
  }

  if ($Netlist->{errno}) {
    $html->message('err', $_ERROR, "[$Netlist->{errno}] $err_strs{$Netlist->{errno}}");	
   }

  my $groups = $Netlist->groups_list();

  $Netlist->{GROUP_SEL}=$html->form_select('GID', 
                                          { 
 	                                          SELECTED          => $Netlist->{GID},
 	                                          SEL_MULTI_ARRAY   => [@$groups],
 	                                          MULTI_ARRAY_KEY   => 3,
 	                                          MULTI_ARRAY_VALUE => 0,
 	                                          NO_ID             => 1
 	                                        });


  $Netlist->{STATE_SEL}=$html->form_select('STATUS', 
                                          { 
 	                                          SELECTED    => $Netlist->{STATUS},
 	                                          SEL_ARRAY   => \@status,
 	                                          ARRAY_NUM_ID => 1
 	                                        });


$html->tpl_show(_include('netlist_ip', 'Netlist'), $Netlist); 

$Netlist->{GROUP_SEL}=$html->form_select('GID', 
                                          { 
 	                                          SELECTED          => $FORM{GID},
 	                                          SEL_MULTI_ARRAY   => [['', ''], @$groups],
 	                                          MULTI_ARRAY_KEY   => 3,
 	                                          MULTI_ARRAY_VALUE => 0,
 	                                          NO_ID             => 1
 	                                        });

  $Netlist->{STATE_SEL}=$html->form_select('STATUS', 
                                          { 
 	                                          SELECTED    => $Netlist->{STATUS},
 	                                          SEL_ARRAY   => [@status, ''],
 	                                          ARRAY_NUM_ID => 1
 	                                        });


$html->tpl_show(_include('netlist_ip_search', 'Netlist'), { %$Netlist, %FORM }); 


my $list = $Netlist->ip_list( { %LIST_PARAMS, %FORM } );
my $table = $html->table( { width      => '100%',
                            caption    => "IP",
                            border     => 1,
                            title      => ['IP', 'NETMASK', 'HOSTNAME', $_DESCRIBE, $_GROUP, $_STATE,  $_CHANGE, '-', '-'],
                            cols_align => ['right', 'right', 'left', 'left', 'left', 'center', 'right', 'center:noprint', 'center:noprint'],
                            qs         => $pages_qs,
                            pages      => $Netlist->{TOTAL}
                           });



  foreach my $line (@$list) {
     my $delete = $html->button($_DEL, "index=$index&del=$line->[0]", { MESSAGE => "$_DEL $line->[0]?" }); 
     my $change = $html->button($_INFO, "index=$index&chg=$line->[0]");

     $table->addrow(
     $line->[7].' '.$html->form_input('IDS', "$line->[0]", { TYPE => 'checkbox', EX_PARAMS => 'class="noprint"' } ), 
     $line->[1], 
     $line->[2], 
     $line->[3], 
     $line->[4], 
     $status[$line->[5]], 

     $line->[6], 
     $change,
     $delete
     );
   }
 


my $table2 = $html->table( { width       => '100%',
                             border      => 1,
      	                     class       => 'noprint',
                             title_plain => [
                                             "$_GROUP: ". $Netlist->{GROUP_SEL},
  	                                         "$_STATUS: ". $Netlist->{STATE_SEL},
                     	                       "RESOLVE: ". $html->form_input('RESOLV', '1', { TYPE => 'checkbox' } ),
                     	                       $html->form_input('change', $_CHANGE, { TYPE => 'SUBMIT' } )
                     	                     ]
                           });


  print $html->form_main({ CONTENT => $table->show(). $table2->show(),
	                         HIDDEN  => { index  =>  "$index" },
                         });


  $table = $html->table({ width       => '100%',
                          cols_align  => ['left', 'right'],    
                          rows        => [ ["$_TOTAL:", $Netlist->{TOTAL} ]]
                      });

  print $table->show();

}


#**********************************************************
#
#**********************************************************
sub netlist_groups {


  $Netlist->{ACTION}='add';
  $Netlist->{ACTION_LNG}=$_ADD;

  if($FORM{add}) {
    $Netlist->group_add({ %FORM });
    my $GID=$Netlist->{GID};

    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_ADDED");
     }
    
      if ($FORM{IP}) {
      	if($FORM{IP} !~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/) {
      	  $html->message('err', $_ERROR, "$ERR_WRONG_DATA [IP]");
    	    return 0;
    	   }
      	if($FORM{NETMASK} !~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/) {
      	  $html->message('err', $_ERROR, "$ERR_WRONG_DATA [NETMASK]");
    	    return 0;
    	   }
        else {
      	  my $ip_num = ip2int($FORM{IP}); #) {
      	  my $ip_count = unpack("N", pack("C4", split( /\./, "255.255.255.255"))) - unpack("N", pack("C4", split( /\./, "$FORM{NETMASK}")));



       	  for(my $i=0; $i<$ip_count; $i++){
      		  my $ip = int2ip($ip_num + $i);
      		  $Netlist->ip_add({IP       => $ip,
      		                    NETMASK  => $FORM{NETMASK},
      		                    HOSTNAME => lookupaddress($ip),
                              GID      => $GID });

            if ($Netlist->{errno}) {
               $html->message('err', $_ERROR, "[$Netlist->{errno}] $err_strs{$Netlist->{errno}}");	
              return 0
             }
       	   }
        }
       }
   }
  elsif($FORM{change}) {
    $Netlist->group_change({ %FORM });
    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_CHANGED"); 
     }
   }
 	elsif(defined($FORM{chg})) {
    $Netlist->group_info($FORM{chg});
    if(! $Netlist->{errno}) {
      $html->message('info', $_INFO, "$_CHANGING");  	
     }
    $Netlist->{ACTION}='change';
    $Netlist->{ACTION_LNG}=$_CHANGE;
   }
  elsif(defined($FORM{del}) && defined($FORM{is_js_confirmed}) ) {
    $Netlist->group_del($FORM{del});
    if(! $Netlist->{errno}) {
    	$html->message('info', $_INFO, "$_DELETED"); 
     }
   }

  if ($Netlist->{errno}) {
    $html->message('err', $_ERROR, "[$Netlist->{errno}] $err_strs{$Netlist->{errno}}");	
   }


$Netlist->{NETMASK}='255.255.255.0';
$html->tpl_show(_include('netlist_group', 'Netlist'), $Netlist);


my $list = $Netlist->groups_list({ %LIST_PARAMS });
my $table = $html->table( { width   => '100%',
                            caption => "$_GROUPS",
                            border  => 1,
                            title   => [$_NAME, $_COMMENTS, 'IP', '-', '-'],
                            cols_align => ['left', 'left', 'right', 'center:noprint', 'center:noprint'],
                            qs      => $pages_qs,
                            pages   => $Netlist->{TOTAL}
                           });



  foreach my $line (@$list) {
     my $delete = $html->button($_DEL, "index=$index&del=$line->[3]", { MESSAGE => "$_DEL $line->[0]?" }); 
     my $change = $html->button($_INFO, "index=$index&chg=$line->[3]");

     $table->addrow($line->[0], 
     $line->[1], 
     $html->button($line->[2], "index=". ($index-1). "&GID=$line->[3]"),
     $change,
     $delete
     );
   }
 

  
  print $table->show(); 


  $table = $html->table({ width       => '100%',
                          cols_align  => ['left', 'right'],    
                          rows        => [ ["$_TOTAL:", $Netlist->{TOTAL} ]]
                      });

  print $table->show();

  return 0;
}


#**********************************************************
#
#**********************************************************
sub lookupaddress {
  my($hostname,$server) = @_;

  my $iaddr = inet_aton($hostname); # or whatever address
  my $name  = gethostbyaddr($iaddr, AF_INET);

return $name;
}


sub netlist_new {
my $table = $html->table( { width   => '100%',
                            caption => "$_GROUPS",
                            border  => 1,
                            title   => [$_NAME, $_COMMENTS, 'IP', '-', '-'],
                            qs      => $pages_qs,
                            pages   => $Netlist->{TOTAL}
                           });

	print $table->show();
}

1

