package Netman::Connection::Cable; use strict; use warnings; use Netman::Const; use CGI; use CGI::Ajax; use Data::Dumper; use Netman::DBI::EndpointType; # The handler func sub handler { my ($vars) = @_; # Check to see if something other than the module was in the uri if (exists($vars->{uri}->[1])) { if ($vars->{uri}->[1] eq 'add') { if (exists($vars->{params}->{endpointid})) { if (exists($vars->{params}->{label})) { # Check to see if the provided cable label already exists my $ids = Netman::DBI::Connection::Cable::ids($vars->{params}->{label}); # If it doesn't create it if (!$ids) { $ids->{cable_id} = Netman::DBI::Connection::Cable::create($vars->{params}->{label}); $ids->{connection_id} = Netman::DBI::Connection::create('Cable', $ids->{cable_id}); } # Add the endpoint to connection mapping Netman::DBI::Connection::endpoint_to_connection_add($vars->{params}->{endpointid}, $ids->{connection_id}); # Redirect to the cable page return(Netman::Const::RETURN_REDIRECT, "/cable?cableid=$ids->{cable_id}"); } else { # Find all the cables that don't have both ends connected $vars->{half_connected_cables} = Netman::Connection::connection_endpoint_count_lt('Cable', 2); # Return the template return(Netman::Const::RETURN_TEMPLATE, 'connection/cable/new.tt', $vars); } } else { $vars->{endpoint_types} = Netman::DBI::EndpointType::all(); return(Netman::Const::RETURN_TEMPLATE, 'connection/cable/create.tt', $vars); } } elsif ($vars->{uri}->[1] eq 'delete') { if (exists($vars->{params}->{connectionid}) && exists($vars->{params}->{cableid})) { if (exists($vars->{params}->{endpointid})) { Netman::DBI::Connection::endpoint_to_connection_delete($vars->{params}->{endpointid}, $vars->{params}->{connectionid}); # Redirect to the cable page return(Netman::Const::RETURN_REDIRECT, "/cable?cableid=$vars->{params}->{cableid}"); } else { Netman::DBI::Connection::endpoint_to_connection_delete('%', $vars->{params}->{connectionid}); Netman::DBI::Connection::delete($vars->{params}->{connectionid}); Netman::DBI::Connection::Cable::delete($vars->{params}->{cableid}); $vars->{msg} = 'Cable Deleted'; # Return the template return(Netman::Const::RETURN_TEMPLATE, 'msg.tt', $vars); } } } else { return(Netman::Const::RETURN_NOT_FOUND); } } else { # If a search was requested if (exists($vars->{params}->{type}) && exists($vars->{params}->{searchstr})) { # If no offset was provided set the offset to 0 if (!exists($vars->{params}->{offset}) || $vars->{params}->{offset} < 0) { $vars->{params}->{offset} = 0; } # Replace all *s with the mysql wildcard $vars->{searchstr} = $vars->{params}->{searchstr}; $vars->{searchstr} =~ s/\*/\%/g; # Search the database $vars->{results} = Netman::DBI::Connection::Cable::search($vars->{searchstr}, $vars->{params}->{offset}); # If only one result was returned direct to that users page if (scalar(@{$vars->{results}}) == 1) { return(Netman::Const::RETURN_REDIRECT, "/cable?cableid=$vars->{results}->[0]->{cable_id}"); } else { # Do some processing on a few of the columns map { my $row = $_; $row->{endpoints} = Netman::Connection::connection_endpoints($row->{connection_id}); } @{$vars->{results}}; # Return the template return(Netman::Const::RETURN_TEMPLATE, 'connection/cable/search.tt', $vars); } } elsif (exists($vars->{params}->{cableid})) { # Get the gen info $vars->{gen_info} = Netman::DBI::Connection::Cable::gen_info($vars->{params}->{cableid}); # Get the endpoints $vars->{endpoints} = Netman::Connection::connection_endpoints($vars->{gen_info}->{connection_id}); # Return the template return(Netman::Const::RETURN_TEMPLATE, 'connection/cable/cable.tt', $vars); } else { return(Netman::Const::RETURN_NOT_FOUND); } } } # Create the connection description sub description { my ($connection_id, $connection_type_specific_id, $endpoint_id) = @_; my $gen_info = Netman::DBI::Connection::Cable::gen_info($connection_type_specific_id); return($gen_info->{cable_label}, "/cable?cableid=$connection_type_specific_id"); } # Return the redirect for the page to add a new connection sub new_redirect { my ($endpoint_id) = @_; return "/cable/add?endpointid=$endpoint_id"; } 1;